LCD液晶无显示,请高手分析如下源码。(附电路)

[复制链接]
2233|0
 楼主| fmcok 发表于 2008-7-22 11:49 | 显示全部楼层 |阅读模式
TMS320F2812控制PCF8576,模拟I2C总线,驱动4位数码管LCD,第一次发送收答正常,再次发送无应答。<br /><br />#include&nbsp;&quot;DSP28_Device.h&quot;<br /><br />#define&nbsp;uint&nbsp;unsigned&nbsp;int<br />#define&nbsp;uchar&nbsp;unsigned&nbsp;char<br /><br />#define&nbsp;SDA&nbsp;GpioDataRegs.GPADAT.bit.GPIOA11<br />#define&nbsp;SCL&nbsp;GpioDataRegs.GPADAT.bit.GPIOA12<br />#define&nbsp;&nbsp;&nbsp;&nbsp;SDADIR&nbsp;&nbsp;&nbsp;&nbsp;GpioMuxRegs.GPADIR.bit.GPIOA11<br />#define&nbsp;&nbsp;&nbsp;&nbsp;SCLDIR&nbsp;&nbsp;&nbsp;&nbsp;GpioMuxRegs.GPADIR.bit.GPIOA12<br /><br /><br />uchar&nbsp;&nbsp;&nbsp;&nbsp;Digit[4];&nbsp;&nbsp;&nbsp;&nbsp;//数据发送缓冲区<br /><br />uchar&nbsp;&nbsp;&nbsp;&nbsp;F0;<br /><br />void&nbsp;delay_us(uint&nbsp;time)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint&nbsp;i,j;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0&nbsp;;&nbsp;i&lttime&nbsp;;&nbsp;i++&nbsp;)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0&nbsp;;&nbsp;j&lt15;&nbsp;j++&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />}<br /><br />//起始条件&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;start()<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;0&nbsp;;<br />}<br /><br />//停止条件<br />void&nbsp;stop()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;0&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;1&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;1&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;0&nbsp;;<br />}<br /><br />void&nbsp;sendbyte(uchar&nbsp;ch)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;temp&nbsp;=&nbsp;ch;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;SDADIR&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;SCLDIR&nbsp;=&nbsp;1&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0&nbsp;;&nbsp;i&lt8&nbsp;;&nbsp;i++&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;(&nbsp;temp&0x80)&nbsp;==&nbsp;0x80&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;1&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_us(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_us(50);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_us(20);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;temp&lt&lt&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(1);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;SDADIR&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(20);&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;F0&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;SDA&nbsp;==&nbsp;1)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;F0&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />/*<br />void&nbsp;sendbyte(&nbsp;uchar&nbsp;*ch)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;8;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;&nbsp;&nbsp;&nbsp;temp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;EALLOW;<br />&nbsp;&nbsp;&nbsp;&nbsp;SDADIR&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;EDIS;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;*ch;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(n--)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if((&nbsp;temp&0x80)&nbsp;==&nbsp;0x80)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_us(&nbsp;50&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SDA&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_us(&nbsp;50&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp&nbsp;=&nbsp;temp&lt&lt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;clearlcd(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;start();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动I2C&nbsp;总线<br />&nbsp;&nbsp;&nbsp;&nbsp;sendbyte(0x70);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//送器件地址<br />&nbsp;&nbsp;&nbsp;&nbsp;sendbyte(0x50);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示模式1:1/3偏压、1:4背极、节电方式及清除显示(清屏)<br />&nbsp;&nbsp;&nbsp;&nbsp;stop();<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />void&nbsp;pcf8576set(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;start();<br />&nbsp;&nbsp;&nbsp;&nbsp;sendbyte(0x70);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//送器件地址<br />&nbsp;&nbsp;&nbsp;&nbsp;sendbyte(0x58);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示模式2:1/3偏压、1:4背极、节电方式及允许显示<br />&nbsp;&nbsp;&nbsp;&nbsp;stop();<br />}<br /><br />void&nbsp;test_lcd()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Digit[0]=0xFF;&nbsp;&nbsp;&nbsp;&nbsp;//0<br />&nbsp;&nbsp;&nbsp;&nbsp;Digit[1]=0xFF;&nbsp;&nbsp;&nbsp;&nbsp;//1<br />&nbsp;&nbsp;&nbsp;&nbsp;Digit[2]=0xFF;&nbsp;&nbsp;&nbsp;&nbsp;//2<br />&nbsp;&nbsp;&nbsp;&nbsp;Digit[3]=0xFF;&nbsp;&nbsp;&nbsp;&nbsp;//3<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;start();<br />&nbsp;&nbsp;&nbsp;&nbsp;sendbyte(&nbsp;0x70&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//器件地址<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;F0&nbsp;==&nbsp;1&nbsp;)&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;sendbyte(&nbsp;0x80&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数据指针<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;F0&nbsp;==&nbsp;1&nbsp;)&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;sendbyte(&nbsp;0xCB&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//工作模式:正常功耗、允许显示、1/3偏置、1:3多极<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;F0&nbsp;==&nbsp;1&nbsp;)&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;sendbyte(&nbsp;0x73&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//闪烁方式<br />&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;F0&nbsp;==&nbsp;1&nbsp;)&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for(&nbsp;i=0&nbsp;;&nbsp;i&lt4&nbsp;;&nbsp;i++&nbsp;)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendbyte(&nbsp;Digit&nbsp;)&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;F0&nbsp;==&nbsp;1&nbsp;)&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;stop();<br />&nbsp;&nbsp;&nbsp;&nbsp;delay_us(5000);&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

55

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部