有谁用过LCD控制芯片S6B0724没,写个驱动,液晶一点反应都没有,调了好几天了,不知道错在哪里。高手们帮帮忙看看,单片机用的是PIC16F873,4M晶振,用的是8080的时序。<br /><br />void LCD_WriteCmd(int8 cmd)<br />{<br /> output_low(PIN_B2); //A0=0 <br /> output_high(PIN_B4); //R=1<br /> //*(0x07)=cmd;<br /> output_c(cmd);<br /> #asm<br /> NOP<br /> NOP<br /> NOP<br /> #endasm<br /> output_low(PIN_B3); //WR=0<br /> output_high(PIN_B3); //WR=1<br />}<br /><br /><br />void LCD_WriteDat(int8 dat)<br />{<br /> output_high(PIN_B2); //A0=1 <br /> output_high(PIN_B4); //R=1<br /> //*(0x07)=dat;<br /> output_c(dat);<br /> #asm<br /> NOP<br /> NOP<br /> NOP<br /> #endasm<br /> output_low(PIN_B3); //WR=0<br /> output_high(PIN_B3); //WR=1<br />}<br />int8 LCD_ReadStatus()<br />{<br /> int8 dat;<br /> set_tris_c(0xff);<br /> output_low(PIN_B2); //A0=0<br /> output_high(PIN_B3); //WR=1<br /> output_low(PIN_B4); //R=0<br /> #asm<br /> NOP<br /> NOP<br /> NOP<br /> #endasm<br /> dat=input_c();<br /> output_high(PIN_B4); //R=1<br /> set_tris_c(0x00);<br /> return dat;<br />}<br /><br />void LCD_Init()<br />{<br /> <br /> output_low(PIN_B6); //8080<br /> output_low(PIN_B5); //CS1=0;<br /> <br /> //液晶复位<br /> output_low(PIN_B1);<br /> delay_ms(10);<br /> output_high(PIN_B1);<br /> delay_us(1);<br /> <br /> //ADC select seg0-seg131<br /> LCD_WriteCmd(0xa0);<br /> //SHL select com0-com64<br /> LCD_WriteCmd(0xc8); <br /> //LCD Bias select<br /> LCD_WriteCmd(0xa2);<br /> //Voltage Converter ON //Voltage Regulator ON //Voltage Follower ON<br /> LCD_WriteCmd(0x2c);<br /> delay_ms(2);<br /> LCD_WriteCmd(0x2a);<br /> delay_ms(2);<br /> LCD_WriteCmd(0x29);<br /> delay_ms(2);<br /> <br /> LCD_WriteCmd(0x81);<br /> <br /> LCD_WriteCmd(0x27);<br /> LCD_WriteCmd(0x40);<br /> LCD_WriteCmd(0xaf);<br />}<br /><br />void main()<br />{<br /> int8 i=0;<br /> <br /> set_tris_a(0xff);<br /> set_tris_b(0x01);<br /> set_tris_c(0x00);<br /> port_b_pullups(0xff);<br /> LCD_Init();<br /><br /> i=LCD_ReadStatus();<br /> putc(i); //串口输出状态<br /><br /> LCD_WriteCmd(0xb0); //setpage<br /> LCD_WriteCmd(0x00);<br /> LCD_WriteCmd(0x10);<br /> for(i=0;i<=50;i++)<br /> {<br /> LCD_WriteDat(0xff);<br /> }<br /> for(i=51;i<=100;i++)<br /> {<br /> LCD_WriteDat(0x00);<br /> }<br /><br /> LCD_WriteCmd(0xb1); //setpage<br /> LCD_WriteCmd(0x10);<br /> LCD_WriteCmd(0x0a);<br /> for(i=0;i<=50;i++)<br /> {<br /> LCD_WriteDat(0xff);<br /> }<br /> for(i=51;i<=100;i++)<br /> {<br /> LCD_WriteDat(0x00);<br /> }<br /> while(1);<br /><br /><br /> <br /><br />} |
|