[求助] 帮我看下这程序为什么运行不了

a214647406   2014-5-6 17:24 楼主
求大神帮我看下   我想做个实物 网上找了个基于MSP430G2211实现的风速测试仪
程序执行了#include"LCD_12864.h"    这里显示错误
新手求助啊·····
这是程序
#include
#include"LCD_12864.h"
Watchdog_Config();  //"看门狗"配置
Clocks_Config();    //时钟配置
    GPIO_Config();      //GPIO配置,P1.0-液晶串行数据输出,P1.1-液晶时钟输出//P1.2上升沿中断使能
   TimerA0_Config();   //"TimerA0"配置,产生1s定时中断
init_lcd ();         //LCD配置
void FaultRoutine(void)  //时钟故障,进入此"陷阱"
{                           
   while(1);             // 陷阱
}
void Watchdog_Config(void)  //"看门狗"配置
{
WDTCTL=WDTPW+WDTHOLD;
}
void Clocks_Config(void)  //时钟配置
{
  if (CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF)                                       
FaultRoutine();         //如果校准数据被擦除,则运行FaultRoutine()
BCSCTL1=CALBC1_1MHZ;   //设定范围
  //BCSCTL1&=~BIT6;   //LFXT1 模式选择:低频模式(Low-frequencymode)
DCOCTL=CALDCO_1MHZ;             // 设定DCO步长+调制
BCSCTL3|= LFXT1S_2;              // LFXT1 = VLO = 12KHz
IFG1&=~OFIFG;                    //清除OSC故障标志(OSCFault flag)
BCSCTL2|=SELM_0+DIVM_3+DIVS_3; // DCO = 12MHz,MCLK = DCO/8,SMCLK //= DCO/8   
}                                 
void GPIO_Config(void)  //I/O口配置
{
P1DIR|=BIT0+BIT1;  //P1.0(SID)和P1.1(SCLK)输出
P1DIR&=~BIT2;      //P1.2输入风扇输出脉冲
P1IES&=~BIT2;      //上升沿中断
P1IE|=BIT2;        //中断使能
}
void TimerA0_Config(void)  //0.5Hz 5250   1Hz 10500
{
CCR0=10500-1;            //每秒产生1次中断
TACTL|=TASSEL_1+MC_1;   //时钟源:ACLK,计数模式:增计数
CCTL0|=CCIE;             //模块0中断使能
}
   _EINT();             //开总中断
void main()
{
Watchdog_Config();  //"看门狗"配置
Clocks_Config();    //时钟配置
  GPIO_Config();     //GPIO配置,P1.0-液晶串行数据输出,P1.1-液晶时钟输出//P1.2上升沿中断使能
TimerA0_Config();   //"TimerA0"配置,产生1s定时中断
init_lcd ();         //LCD配置
_EINT();             //开总中断
while(1);
}
#pragma vector=TIMERA0_VECTOR  //定时中断向量声明
__interrupt voidTimer_A0(void) //Timer A0 1s定时中断服务程序
{
Speed=Num*30;    //计算风扇每分钟转速(RPM),转速=1s内上升沿个数
                      //*60(1分钟60秒)/2(风扇转一圈输出2周期脉冲)
Num=0;                         //脉冲上升沿计数清0
LCD_Display(Speed);         //风扇转速送液晶显示
  //TACTL|=TACLR;               
}
#pragma vector=PORT1_VECTOR   //P1口中断源
__interrupt voidP1_ISR(void)  //声明一个中断服务程序,名为P1_ISR
{
  if(P1IFG&BIT2)               //判断P1中断标志位第2位
  {
   Num+=1;                     //中断处理程序:来一个上升沿,计数值加1
  }
P1IFG=0;                     //清除P1所有中断标志位
}
#include
typedef unsigned char uchar;
typedef unsigned int  uint;
#define x1    0x80   //x1液晶屏上半屏的字 列起始地址
#define x2    0x88   //x2液晶屏下半屏的字 列起始地址
#define y     0x80   //y液晶屏点阵的行起始地址
#define comm  0      //comm代表命令
#define dat   1      //dat代表数据
#define LCD_SID_SET   P1OUT|=BIT0
#define LCD_SID_RESET P1OUT&=~BIT0
#define LCD_SCLK_SET  P1OUT|=BIT1
#define LCD_SCLK_RESET P1OUT&=~BIT1
void wr_lcd (uchar dat_comm,uchar content);
void delay (uint us);
const uchar display[]={
"当前转速是:"   //显示的物理量
"0123456789 "  //显示的数值
"RPM"          //显示的物理量的单位
}; //本项目液晶显示内容
/*------------------初始化-----------------*/
void init_lcd (void)
{
  //LCD_RST_SET;
wr_lcd (comm,0x30);  //30---基本指令动作  
wr_lcd (comm,0x01);  //清屏,地址指针指向00H
  delay(100);          //执行时间:1.6ms
wr_lcd (comm,0x06);  //光标的移动方向:显示向右移动,游标跟着移动
wr_lcd (comm,0x0c);       //开显示,关游标
}
/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
  uchara,i,j;
  delay(50);
a=content;         //要写入的内容
LCD_SCLK_RESET;
LCD_SID_SET;       //数据操作
  for(i=0;i<5;i++)  //延时
  {
   LCD_SCLK_SET;
   LCD_SCLK_RESET;
  }
    LCD_SID_RESET;  //写数据
   LCD_SCLK_SET;   
   LCD_SCLK_RESET;
  if(dat_comm)      //dat_comm=0,写命令;dat_comm=1写数据
  {
   LCD_SID_SET;    //data
  }
  else  
  {
   LCD_SID_RESET;  //command
  }
   LCD_SCLK_SET;   //时钟上升沿,数据写入
   LCD_SCLK_RESET;  
    LCD_SID_RESET;  //写数据
   LCD_SCLK_SET;  
   LCD_SCLK_RESET;
  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)
    {
      if((a&0x80)==0x80) //判断该位是0还是1
      {
       LCD_SID_SET;
      }
      else
      {
       LCD_SID_RESET;
      }
     LCD_SCLK_SET;
     LCD_SCLK_RESET;
     a=a<<1;  //输出一位,左移一位,1帧8位的数据移位8次
    }
     LCD_SID_RESET;
    for(i=0;i<4;i++)  //延时
    {
       LCD_SCLK_SET;
       LCD_SCLK_RESET;
    }
}
}
/*-----------------------------------*/
void delay (uint us)   //延时时间us
{
  while(us--);
}
void LCD_Display(uint value)
{
  uchari,gewei ,shiwei ,baiwei ,qianwei ;
  
  /*转速值分离*/
gewei=value%10;       //个位     
shiwei=value/10%10;   //十位
baiwei=value/100%10;  //百位
qianwei=value/1000;   //千位
  
  if(qianwei==0)                         //千位"消隐"处理
  {
   qianwei=10;
  }
  if(baiwei==0&&qianwei==10)              //百位"消隐"处理
  {
   baiwei=10;
  }
  if(shiwei==0&&qianwei==10&&baiwei==10)  //十位"消隐"处理  
  {
   shiwei=10;
  }
  
wr_lcd(comm,0x30);    //基本指令集
wr_lcd(comm,0x80);    //从第1行第1字开始显示
  for(i=0;i<11;i++)
  {
   wr_lcd(dat,display);  //"当前转速是:"
  }
  //wr_lcd(dat,0x3A);  //冒号
   
wr_lcd(comm,0x93);        //从第2行第4字开始显示
  //wr_lcd(dat,0x30+qianwei);
  //wr_lcd(dat,0x30+baiwei);
  //wr_lcd(dat,0x30+shiwei);
  //wr_lcd(dat,0x30+gewei);
  //wr_lcd(dat,0x20); //冒号
  //wr_lcd(dat,'R');
  //wr_lcd(dat,'P');
  //wr_lcd(dat,'M');
/*----------以下四个语句是关于转速值的分离----------*/
wr_lcd(dat,display[11+qianwei]);  //显示千位
wr_lcd(dat,display[11+baiwei]);   //显示百位
wr_lcd(dat,display[11+shiwei]);   //显示十位
wr_lcd(dat,display[11+gewei]);    //显示个位
  for(i=0;i<4;i++)
  {
    wr_lcd(dat,display[21+i]);      //显示单位"RPM(Revolutions Per Minute, //转/分)"
  }
}
#include
typedef unsigned char uchar;
typedef unsigned int  uint;
extern void init_lcd (void);
extern void chn_disp (constuchar *chn);
extern void chn_disp1 (constuchar *chn);
extern void img_disp (constuchar *img);
extern void img_disp1 (constuchar *img);
extern void lat_disp (uchar data1,uchar data2);
extern void con_disp (uchar data1,uchar data2,ucharx0,uchar y0,uchar xl,uchar yl);
extern void clrram (void);
extern void wr_lcd (uchar dat_comm,uchar content);
extern void delay (uint us);
extern void delay1 (uint ms);
extern void LCD_Display(uint value);
extern const uchar display[];




  • clip_image002.gif

回复评论 (2)

把问题描述清楚
点赞  2014-5-6 18:04
是编译不过去,还是烧录后运行有问题?
点赞  2014-5-7 08:53
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复