首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

MSP430做AD转换并在液晶上显示,但是液晶12864上死活没显示,大家帮忙看看程序有没有有关问题

2013-06-26 
MSP430做AD转换并在液晶上显示,但是液晶12864上死活没显示,大家帮忙看看程序有没有问题#includemsp430x14

MSP430做AD转换并在液晶上显示,但是液晶12864上死活没显示,大家帮忙看看程序有没有问题

#include  <msp430x14x.h>

  double data;//用来存储ADC12MEM中的数据
 unsigned int a,b,c=0; //用来存储将要显示在LCD上的各位数据

//初始化时钟
void initClock(void){
  BCSCTL1=RSEL2+RSEL1+RSEL0+DIVA_1;//XT2开启 LFXT1工作在低频模式 ACLK 2分频( 注释:原来的人没做分频,我担心频率过高) 最高的标称频率
  DCOCTL=DCO2+DCO1+DCO0;//DCO为最高频率
  do{
    IFG1&=~OFIFG;//清除振荡器失效标志
    for(unsigned int i=255;i>0;i--);
  }while(IFG1&OFIFG);//判断XT2是否起振
  BCSCTL2=SELM1+SELS;//MCLK SMCLK时钟源为TX2CLK不分频
}
//延时函数
void delay(unsigned int m){
for(unsigned int i=0;i<m;i++)
_NOP();
}


//ADC12采样初始化,并打开中断子程序计算采样值的大小
void initADC12(){

P6SEL=0X01;//P6.0作为模拟输入 
ADC12IE=0X01; //开放中断ADC12IFG.0
ADC12CTL0=ADC12ON+SHT0_4+REFON+REF2_5V;//打开ADC转换的核,采用内部参考电压2.5v;
ADC12CTL1=SHP;   //信号源内部触发
ADC12CTL0 |=ENC;  //开放使能
_EINT();//开放系统总中断
ADC12CTL0 |=ADC12SC; //开始转换,转换完成之后自动进入中断服务子程序

}


#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(){
data=ADC12MEM0*2.5/4095;  //data为全局变量
}
//基本写入函数命令
void Lcd_InsWrite(unsigned int i,char Instruction)

  P4DIR=0XFF; // P4口设置成输出模式
if(i==0)
P3OUT=0x1F; // RS=0,R/W=0 写指令
else P3OUT=0x9F; // RS=0,R/W=0 写数据
P3OUT|=BIT5; //E=1 使能
P4OUT=Instruction; //功能设定 
delay(3); //延时
P3OUT&=~BIT5; //E=0:下降沿锁存数据
}

//LCD初始化函数
//函数声明:采用MSP430端口p3.5-3.7连接LCD的E,RW,和RS端口;P4口用来传送数据
void init_lcd(void)
{
P3DIR=0XE0; //P3.5-E,P3.6-R/W,P3.7-RS输出 
Lcd_InsWrite(0,0x38);//8位数据端口,2行显示,5*7点阵
delay(400);
Lcd_InsWrite(0,0x0c);//开启显示, 无光标
delay(400); 
Lcd_InsWrite(0,0x06);//AC递增, 画面不动
delay(400);
Lcd_InsWrite(0,0x01);//清屏
delay(400);
}


//将ADC转换后的值写入LCD
void WriteData(){
data*=100;
int temp=(int)data;
a=temp/100;//考虑到由于内部参考电压的限制,且仅考虑两位小数的情况
b=(temp%100)/10;
c=(temp%10);
Lcd_InsWrite(1,a+0x30);
Lcd_InsWrite(1,'.');
Lcd_InsWrite(1,b+0x30);
Lcd_InsWrite(1,c+0x30);
}

//主函数部分
void main(){
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
initClock();//初始化时钟
initADC12();//ADC12采样初始化,并打开中断子程序计算采样值的大小
init_lcd(); //lcd初始化
Lcd_InsWrite(0,0x80); //显示在第一行
WriteData(); //将采样值分别计算出对应位的输出
}

单片机 液晶 msp430
[解决办法]
看着像是标准的8080接口感觉延时可能太短了

//基本写入函数命令
void Lcd_InsWrite(unsigned int i,char Instruction)

    P4DIR=0XFF; // P4口设置成输出模式
    if(i==0)
    P3OUT=0x1F; // RS=0,R/W=0 写指令
    else P3OUT=0x9F; // RS=0,R/W=0 写数据



   delay(30);

    P3OUT
[解决办法]
=BIT5; //E=1 使能
    P4OUT=Instruction; //功能设定 
    delay(3); //延时
   P3OUT&=~BIT5; //E=0:下降沿锁存数据?
}



http://www.eefocus.com/article/09-04/70691s.html
你看下这个对比下你的时序,E应该类似于片选,操作总线前就该拉低,完成后拉高.

你把你们老师的程序贴出来看看

热点排行