下面是参考别人资料写的一个程序,烧进去后,液晶没任何反映.<br />用的是12232-9液晶,跪求高手指点,小弟不胜感激<br />//===========================================================================//<br />//mcumsp430f449//<br /><br />//p20rs//<br />//p21r/w//<br />//p22e//<br />//p30-p37db//<br />//===========================================================================//<br />#include "msp430x44x.h"<br />/*************************/<br /><br /><br />unsigned char busy,hang,lie;<br /><br />/********************************/<br />//定义字符串数组*/<br />/********************************/<br />char STR2[]="http://www.qfmcu.com";<br />char STR3[]="http://www.mcubbs.net";<br /><br />/**************************定义函数原型********************************/<br />void Delayus(unsigned long n);/*延时函数*/<br />void BUSYLOOP();//*判忙函数*//<br />void Write_command(unsigned char CMD);//*发控制字函数*//<br />void Write_data(unsigned char dat);//*发数据函数*//<br />void CHUSHIHUA();//*初始化函数*//<br />void CLEAR();//*清屏*//<br />void Display(unsigned char *ptr,unsigned char ddram);//**显字符串函数**//<br /><br /><br />/*********************************************延时<br />**************************************/<br /><br /><br />void Delayus(unsigned long n)<br />{unsigned long i,j;<br />for(i=0;i<n;i++)<br /> for(j=0;j<9;j++);<br />}<br />//*********************判忙函数************************//<br />void BUSYLOOP()<br />{ P2DIR=0xff;<br /> P2OUT&=~0x01;<br /> P2OUT|=0x02;<br /> P3DIR=0X00;<br /> P2OUT|=0x04;<br /> while((P3IN&0x80)==0x80);<br /> P2OUT&=~0x04;<br /> P3DIR=0Xff;<br />}<br />//*********************写控制字函数****************************//<br />void Write_command(unsigned char CMD)<br />{<br /><br />BUSYLOOP();<br />_NOP();<br />P2DIR=0xff;<br />P3DIR=0xff;<br />P2OUT&=~0x01;<br />P2OUT&=~0x02;<br />P2OUT|=0x04;<br />P3OUT=CMD;<br />Delayus(10);<br />_NOP();<br />P2OUT&=~0x04;<br />_NOP();<br />}<br /><br />//*********************写数据函数****************************//<br />void Write_data(unsigned char dispdata)<br />{BUSYLOOP();<br />//Delayus(1000);<br /> _NOP();<br /> P2DIR=0xff;<br /> P3DIR=0xff;<br /> P2OUT|=0x01;<br /> P2OUT&=~0x02;<br /> P2OUT|=0x04;<br /> P3OUT=dispdata;<br /> Delayus(5);<br /> _NOP();<br /> P2OUT&=~0x04;<br /> _NOP();<br />}<br /><br />/***************************清屏*************************************/<br />void CLEAR()<br />{<br />P2OUT&=~0x01;//RS=0;<br />P2OUT&=~0x02;//RW=0;<br />P2OUT|=0x04;//E=1;<br />P3OUT=0x01;<br />Delayus(10);<br />P2OUT&=~0x04;//E=0;<br />}<br /><br />//*************************液晶初始化********************************//<br />void CHUSHIHUA()<br />{<br />Delayus(40000);<br />Write_command(0x30);<br />Delayus(1500);<br />Write_command(0x30);<br />Delayus(400);<br />Write_command(0x0C);<br />Delayus(1500);<br />Write_command(0x01);<br />Delayus(15000);<br />Write_command(0x06);<br />}<br /><br />/*=======================================================<br />显示字符串<br />=======================================================*/<br />void Display(unsigned char *ptr,unsigned char ddram)<br />{<br />int i1,x;<br /> i1=0;<br /> if(ddram<0x88)<br /> {hang=0;}//定位行地址:第一行<br /> else if(ddram<0x90)<br /> {hang=2;}//定位行地址:第三行<br /> else if(ddram<0x98)<br /> {hang=1;}//定位行地址:第二行<br /> else<br /> {hang=3;}//定位行地址:第四行<br /><br /> lie=0x0f&ddram;//定位列地址<br /> if(lie>0x07)<br /> {lie=lie-0x08;}<br /> x=lie*2;<br /> Write_command(ddram);//定位显示起始地址<br /> while((ptr[i1])!='\0')<br /> { Write_data(ptr[i1]);//输出单个字符<br /> i1++;<br /> x++;<br /> if(x==0x10)<br /> {x=0;<br /> hang++;<br /> }<br /> switch(hang)<br /> {<br /> case 0:Write_command(0x80);<br /> break;<br /> case 1:Write_command(0x90);<br /> break;<br /> case 2:Write_command(0x88);<br /> break;<br /> case 3:Write_command(0x98);<br /> }<br /> if(hang>3)<br /> {<br /> Write_command(0x80);<br /> hang=0;<br /> }<br /> }<br /><br />}<br /><br />/**************************主函数开始***********************************/<br />main()<br />{WDTCTL=WDTPW+WDTHOLD;//停止看门狗<br /><br />P3DIR=0xff;<br />P3OUT=0x00;<br />P4DIR=0x0f;<br />P4OUT=0x00;<br />////////////////////////////////<br />CLEAR();<br />CHUSHIHUA();//初始化函数//<br />Display((unsigned char *)STR2,0x80);//上面一行显示一个预定字符串<br />Display((unsigned char *)STR3,0x88);<br />Delayus(200);<br />Write_command(0x9C);//将光标移到0x9C<br />Write_command(0x0f);//光标处反白闪烁<br /><br />//write_command(0x08,0);//进入睡眠状态<br />//delayus(200);<br />//write_command(0x0C,0);//唤醒<br /><br />while(1)<br />{;}<br />}<br />/*************************主函数结束*************************************/<br /><br />请高手指点下看哪有问题?<br />单片机为msp430f449<br /> |
|