LCD没有放映, 请高手看下, Fosc = 12M , <br /><br />/******************************************************************************************/<br />/* filename : LCDDRV.C */<br />/* author : Steven */ <br />/* description : lcd drive io initial, and drive functions */ <br />/* LPC2131 connect with ST7565 */ <br />/* D0 ~ D7 -------- P0.8 ~ P0.15 */ <br />/* /CS1 -------- P0.4 */ <br />/* RST -------- P0.5 */<br />/* D/I -------- P0.6 */ <br />/* R/W -------- P0.7 */<br />/* Enable -------- P0.16 */<br />/* D/I : LOW - I , HIGH - D */ <br />/* R/W : LOW - WR, HIGH - RD */ <br />/******************************************************************************************/<br />#define CS1 4<br />#define CS1_LOW IO0CLR |= 1 << CS1; <br />#define CS1_HIGH IO0SET |= 1 << CS1;<br /><br />#define LCD_RST 5<br />#define LCD_RST_LOW IO0CLR |= 1 << LCD_RST<br />#define LCD_RST_HIGH IO0SET |= 1 << LCD_RST<br /><br />#define D_I 6<br />#define LCD_CMD IO0CLR |= 1 << D_I;<br />#define LCD_DATA IO0SET |= 1 << D_I;<br /><br />#define R_W 7 <br />#define LCD_RD IO0CLR |= 1 << R_W; <br />#define LCD_WR IO0SET |= 1 << R_W;<br /><br />#define EN 16<br />#define LCD_EN IO0SET |= 1 << EN;<br />#define LCD_DIS IO0CLR |= 1 << EN; <br /><br />#define OutData( dat ) { IO0CLR |= 0xff << 8; Io0SET |= (dat & 0xff) << 8; }<br /><br /><br />/*********Lcd Cmd *****/<br />#define DisplayOff 0xAE<br />#define DisplayOn 0xAF<br />#define DisplayStart 0x40<br />#define PageAddr 0xB0<br />#define ColAddrHi 0x10<br />#define ColAddrLo 0x00<br />#define SegRemapOff 0xA0<br />#define SegRemapOn 0xA1<br />#define NormalDisp 0xA6<br />#define ReverseDisp 0xA7<br />#define SWReset 0xE2<br />#define ComRemapOff 0xC0<br />#define ComRemapOn 0xC8<br />#define IntRegRatio 0x20<br />#define ContCtrlReg 0x81<br />#define BoostLevel 0x86 <br />#define R_Mod_W 0xE0 /*If enter Read-Modify-Write mode, the column will not increase automatically*/<br />#define End_R_Mod_W 0xEE /*End of Read-Modify-Write*/<br />#define ModOscFreq 0xA9 <br />#define PwrCtrlReg 0x2A <br />#define EntireDispOff 0xA4<br />#define IntVolBstrON 0x04<br />#define OPampBufferON 0x01 <br /><br />static void IoInitial( void );<br />static void LcdInitialCmd( void );<br />static void WriteLcdData( uint8 data );<br />static void WriteLcdCmd ( uint8 cmd );<br />void FullScreanBlack( void );<br />void clrscr( void );<br />void gotoxy(uint8 x, uint8 y )<br />void LcdInitial( void )<br />{<br /> IoInitial();<br /> <br /> LcdInitialCmd();<br /> clrscr(); <br /> FullScreanBlack( );<br />}<br />static void IoInitial( void )<br />{<br /> PINSEL0 &= 0xf;<br /> PINSEL1 &= 0xfffffffc;<br /> IO0DIR |= 0x1fff0;<br /> <br />}<br />static void LcdInitialCmd( void )<br />{<br /> LcdReset();<br /> WriteLcdCmd(BoostLevel);<br /> WriteLcdCmd(DisplayOff);<br /> WriteLcdCmd(SegRemapOn);<br /> WriteLcdCmd(ComRemapOn);<br /> WriteLcdCmd(IntRegRatio|0x04); <br /> WriteLcdCmd(PwrCtrlReg|IntVolBstrON|OPampBufferON);<br /> WriteLcdCmd(DisplayOn);<br /> WriteLcdCmd(DisplayStart);<br />}<br />void LcdReset()<br />{<br /> LCD_RST_LOW;<br /> delay(500);<br /> LCD_RST_HIGH;<br /> <br />}<br />static void WriteLcdData( uint8 data )<br />{<br /> CS1_LOW;<br /> LCD_DATA;<br /> OutData(data);<br /> LCD_WR;<br /> LCD_EN;<br /> LCD_RD;<br /> LCD_DIS;<br /> CS1_HIGH;<br /><br />}<br />static void WriteLcdCmd ( uint8 cmd )<br />{<br /> CS1_LOW;<br /> LCD_CMD;<br /> LCD_WR;<br /> OutData(cmd);<br /> LCD_EN;<br /> LCD_RD;<br /> LCD_DIS;<br /> CS1_HIGH;<br /> <br /> <br />}<br />void clrscr( void )<br />{<br /> uint i, j;<br /> for( i = 0; i < 8 ; i++)<br /> for( j = 0; j < 128; j++)<br /> {<br /> gotoxy( i, j);<br /> WriteLcdData( 0x00 );<br /> }<br /> <br />}<br />void FullScreanBlack( void )<br />{<br /> uint8 i, j;<br /> for( i = 0; i < 8 ; i++)<br /> for( j = 0; j < 128; j++)<br /> {<br /> gotoxy( i, j);<br /> WriteLcdData( 0xc6 );<br /> }<br /> <br />}<br />void delay(uint32 i)<br />{<br /> while( i-- > 0)<br /> ;<br />}<br />void gotoxy(uint8 x, uint8 y )<br />{<br /> uint8 i;<br /> x &= 0x0f;<br /> x |= PageAddr;<br /> WriteLcdCmd( x );<br /> i = y;<br /> i = (i >> 4) & 0x0f;<br /> i |= ColAddrHi;<br /> WriteLcdCmd( i );<br /> y &= 0x0f;<br /> y |= ColAddrLo;<br /> WriteLcdCmd( y );<br />} |
|