帮我看下这程序为什么运行不了

2019-03-24 11:35发布

求大神帮我看下   我想做个实物 网上找了个基于MSP430G2211实现的风速测试仪
程序执行了#include"LCD_12864.h"    这里显示错误
新手求助啊·····
这是程序
#include<msp430g2211.h>#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<msp430g2211.h> 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&=~BIT1void 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<msp430g2211.h> 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[];



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
qinkaiabc
1楼-- · 2019-03-24 17:01
把问题描述清楚
xiaosa_k1
2楼-- · 2019-03-24 18:40
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章