求大神帮我看下 我想做个实物 网上找了个基于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&=~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<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[];
此帖出自小平头技术问答
一周热门 更多>