单步跟踪了时序,能写入PCF8576,有应答,但LCD显示不变,即PCF8576输出引脚电位保持不变,为3.3V。请高手指点:<br />#include "DSP28_Device.h"<br /><br />#define uint unsigned int<br />#define uchar unsigned char<br /><br />#define SDA GpioDataRegs.GPADAT.bit.GPIOA11<br />#define SCL GpioDataRegs.GPADAT.bit.GPIOA12<br />#define SDADIR GpioMuxRegs.GPADIR.bit.GPIOA11<br />#define SCLDIR GpioMuxRegs.GPADIR.bit.GPIOA12<br /><br />uchar SlvAdr;<br />uchar SubAdr;<br />uchar PCF8576 ;<br />uchar MODE1 ;<br />uchar MODE2;<br />uchar Digit[8]; //数据发送缓冲区<br />uchar F0;<br /><br />void delay(uint time)<br />{<br /> uint i,j;<br /><br /> for(i=0 ; i<time ; i++ ) <br /> for(j=0 ; j<50; j++ );<br /> <br /><br />}<br /><br />//起始条件 <br />void start()<br />{ <br /> SDA = 1;<br /> delay(10);<br /> SCL = 1;<br /> delay(50);<br /> SDA = 0;<br /> delay(50);<br /> SCL = 0 ;<br />}<br /><br />//停止条件<br />void stop()<br />{<br /> SDA = 0 ;<br /> delay(10);<br /> SCL = 1 ;<br /> delay(50);<br /> SDA = 1 ;<br /> delay(50);<br />}<br /><br />void sendbyte(uchar ch)<br />{<br /> uchar i;<br /> uchar temp = ch;<br /> <br /><br /> EALLOW;<br /> SDADIR = 1;<br /> EDIS;<br /><br /> for(i=0 ; i<8 ; i++ ) {<br /> if( ( temp&0x80) == 0x80 ) {<br /> SDA = 1 ;<br /> }<br /> else {<br /> SDA = 0;<br /> }<br /> delay(10);<br /> SCL = 1;<br /> delay(50);<br /> SCL = 0;<br /> delay(20);<br /> temp = temp<< 1;<br /> }<br /> delay(1);<br /> SDA = 1;<br /> delay(1);<br /><br /> EALLOW;<br /> SDADIR = 0;<br /> EDIS;<br /><br /> SCL = 1;<br /> delay(20); <br /> F0 = 0;<br /> if( SDA == 1) {<br /> F0 = 1;<br /> }<br /> delay(10);<br /> SCL = 0;<br /> <br />}<br /><br />void ClearLcd(void)<br />{<br /> start(); //启动I2C 总线<br /> sendbyte(0x1070); //送器件地址<br /> sendbyte(0x50); //显示模式1:1/3偏压、1:4背极、节电方式及清除显示(清屏)<br /> stop();<br /> <br />}<br /> <br />void PCF8576SET(void)<br />{<br /> start();<br /> sendbyte(0x1070); //送器件地址<br /> sendbyte(0x58); //显示模式2:1/3偏压、1:4背极、节电方式及允许显示<br /> stop();<br />}<br /><br />void senddata(){<br /> uchar i;<br /><br /> //ClearLcd();<br /> <br /> start();<br /> sendbyte( 0x1070 );<br /> if( F0 == 1 ) return;<br /> sendbyte( 0x1080 );<br /> if( F0 == 1 ) return;<br /> <br /> for( i=0 ; i<5 ; i++ ) {<br /> sendbyte( Digit ) ;<br /> if( F0 == 1 ) return; <br /> }<br /> stop();<br /> delay(5000); <br />}<br /><br />void test_lcd()<br />{<br /> Digit[0]=0x71; //闪烁方式<br /> Digit[1]=0x7E; //0<br /> Digit[2]=0x18; //1<br /> Digit[3]=0xB6; //2<br /> Digit[4]=0xBC; //3<br /><br /> senddata();<br />}<br /><br /> |
|