woaiguye 发表于 2007-11-29 11:34

用LCD1602来显示AD转换的值

最近在做一个AD转换和显示,AD转换能采集到数据,液晶显示也能显示出来,现在的问题是液晶显示无法显示出AD的值.具体程序如下:<br />#include&nbsp;&nbsp;&nbsp;&ltreg51.h&gt&nbsp;&nbsp;<br />#include&nbsp;&nbsp;&nbsp;&ltintrins.h&gt&nbsp;&nbsp;&nbsp;<br />sbit&nbsp;rs=P1^4;&nbsp;//指令和数据寄存器//<br />sbit&nbsp;rw=P1^5;&nbsp;//读写控制//<br />sbit&nbsp;e=P1^6;&nbsp;//片选//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />sbit&nbsp;SCLK&nbsp;=&nbsp;P1^0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;输入输出时钟I/O&nbsp;CLK<br />sbit&nbsp;SDOUT&nbsp;=&nbsp;P1^1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;数据输出DATA&nbsp;OUT<br />sbit&nbsp;CS&nbsp;=&nbsp;P1^2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;片选信号<br />sbit&nbsp;flag=P0^7;<br />unsigned&nbsp;char&nbsp;str[]=&quot;the&nbsp;AD&nbsp;result&nbsp;is:&quot;;<br />//...........液晶现实开始..........<br />void&nbsp;wait(unsigned&nbsp;int&nbsp;w)<br />{&nbsp;<br />int&nbsp;time;<br />for&nbsp;(time=0;time&nbsp;&ltw;time++);<br />return;<br />}<br /><br />void&nbsp;busy()<br />{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0=0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rw=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!flag)&nbsp;break;<br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;w_dat(unsigned&nbsp;char&nbsp;dat)&nbsp;//写数据//<br />{<br />busy(&nbsp;&nbsp;);<br />rs=1;<br />rw=0;<br />e=1;<br />P0=dat;<br />e=0;<br />return;<br />}<br /><br />void&nbsp;w_com(unsigned&nbsp;char&nbsp;com)&nbsp;//写指令//<br />{<br />busy(&nbsp;);<br /><br />rs=0;<br />rw=0;<br />e=1;<br />P0=com;<br />e=0;<br />}<br /><br />void&nbsp;LCD_set_xy(unsigned&nbsp;char&nbsp;x,unsigned&nbsp;char&nbsp;y)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;address;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(x&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;=0X80&nbsp;+&nbsp;y;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;=&nbsp;0XC0&nbsp;+&nbsp;y;<br />&nbsp;&nbsp;&nbsp;&nbsp;w_com(address);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;LCD_write_string(unsigned&nbsp;char&nbsp;x,unsigned&nbsp;char&nbsp;y,unsigned&nbsp;char&nbsp;*s)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_set_xy(x,y);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(*s)&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;P0&nbsp;=&nbsp;*s;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;w_dat(*s);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;init(void)&nbsp;<br />{<br />unsigned&nbsp;char&nbsp;i;<br />for&nbsp;(i=0;i&lt2;i++)&nbsp;<br />{<br />&nbsp;&nbsp;w_com(0x38);<br />&nbsp;&nbsp;wait(10);<br />}<br />w_com(0x38);<br />w_com(0x0f);<br />w_com(0x18);<br />w_com(0x06);<br />w_com(0x01);<br />w_com(0x80);<br />}<br />//..........液晶现实模块结束........<br /><br />//.........AD转换模块开始.........<br />unsigned&nbsp;int&nbsp;Conversion(void)//&nbsp;AD转换程序,返回AD值<br />{<br />&nbsp;&nbsp;char&nbsp;i,n;<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;Bit16_data;<br />&nbsp;&nbsp;CS=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//低电平有效,开始转换<br />for(i=0;i&lt6;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;SCLK=0;<br />&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;SCLK=1;<br />}<br /><br />if(SDOUT==0)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />n=17;<br />while(n--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCLK&nbsp;=&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Bit16_data&nbsp;=&nbsp;Bit16_data&lt&lt1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;左移一位,或_crol_(temp,1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(SDOUT&nbsp;==&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bit16_data&nbsp;=&nbsp;Bit16_data|0x0001;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;若接收到的位为1,则数据的最后一位置1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Bit16_data&nbsp;=&nbsp;Bit16_data&0xFFFE;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;否则数据的最后一位置0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCLK=0;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />CS=1;<br />return(Bit16_data);<br />}<br />}<br />//.........AD转换模块结束..........<br />//........主函数开始...........<br />void&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;ADresult;<br />init();&nbsp;<br />LCD_write_string(1,0,str);<br />ADresult=Conversion();<br />wait(5);&nbsp;&nbsp;&nbsp;&nbsp;<br />while(1)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//LCD_write_string(2,0,&nbsp;ADresult);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />在编译的时候最后一行出错,无法编译,哪位高手帮忙解决一下?AD芯片用的是ADS8320,转换结束后数据放在变量ADresult中,液晶显示第一行能够显示,要求第二行显示ADresult!小弟刚从学校出来,很多东西都搞不定!谢谢!<br /><br /><br /><br /><br /><br />
页: [1]
查看完整版本: 用LCD1602来显示AD转换的值