#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 /><br />static uchar Digit[5]; //数据发送缓冲区<br />static uchar F0;<br /><br />void delay_us(uint time)<br />{<br /> uint i,j;<br /><br /> for(i=0 ; i<time ; i++ ) <br /> for(j=0 ; j<15; j++ );<br /> <br /><br />}<br /><br />//起始条件 <br />void start()<br />{ <br /> SDA = 1;<br /> delay_us(10);<br /> SCL = 1;<br /> delay_us(50);<br /> SDA = 0;<br /> delay_us(50);<br /> SCL = 0 ;<br />}<br /><br />//停止条件<br />void stop()<br />{<br /> SDA = 0 ;<br /> delay_us(10);<br /> SCL = 1 ;<br /> delay_us(50);<br /> SDA = 1 ;<br /> delay_us(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_us(10);<br /> SCL = 1;<br /> delay_us(50);<br /> SCL = 0;<br /> delay_us(20);<br /> temp = temp<< 1;<br /> }<br /> delay_us(1);<br /> SDA = 1;<br /> delay_us(1);<br /><br /> EALLOW;<br /> SDADIR = 0;<br /> EDIS;<br /><br /> SCL = 1;<br /> delay_us(20); <br /> F0 = 0;<br /> if( SDA == 1) {<br /> F0 = 1;<br /> }<br /> delay_us(10);<br /> SCL = 0;<br /> <br />}<br /><br />void clearlcd(void)<br />{<br /> start(); //启动I2C 总线<br /> sendbyte(0x70); //送器件地址<br /> sendbyte(0x50); //显示模式1:1/3偏压、1:4背极、节电方式及清除显示(清屏)<br /> stop();<br /> <br />}<br /> <br />void pcf8576set(void)<br />{<br /> start();<br /> sendbyte(0x70); //送器件地址<br /> sendbyte(0x58); //显示模式2:1/3偏压、1:4背极、节电方式及允许显示<br /> stop();<br />}<br /><br />void senddata(){<br /> uchar i;<br /> <br /> start();<br /> sendbyte( 0x70 ); //工作方式<br /> if( F0 == 1 ) return;<br /> sendbyte( 0x80 ); //子地址<br /> if( F0 == 1 ) return;<br /> sendbyte( 0xC8 ); //工作模式<br /> if( F0 == 1 ) return; <br /> for( i=0 ; i<5 ; i++ ) {<br /> sendbyte( Digit ) ;<br /> if( F0 == 1 ) return; <br /> <br /> }<br /> stop();<br /> delay_us(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 /> |
|