求大神帮我看下 我想做个实物 网上找了个基于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[];
|