|
发表于 2016-2-6 16:49:48
|
显示全部楼层
可用的代码,是51用的:
- #pragma db cd sb oe
- /* sUTB_mini板LCD20X2显示驱动程序
- 数据线为4位
- 本设计中,RW线恒为LO,没有驱动
-
- */
- /*LCD DISPLAY MODULE */
- #include <reg52.h>
- #define uchar unsigned char
- sbit LCD_RS = P0^1;
- sbit LCD_E = P0^0;
- #define LCD_BUS P0 //P04..P07
- extern void Delay5mS( uchar t );
- void LCD_Command(uchar c);
- void LCD_Data(uchar c);
- void LCD_Init();
- void LCD_Clr();
- void LCD_XY(uchar x,uchar y);
- void LCD_StringXY(uchar x,uchar y,uchar *c);
- void LCD_Integer( unsigned int val );
- void LCD_IntegerXY(uchar x,uchar y,unsigned int val);
- void LCD_sIntegerXY(uchar x,uchar y, int val);
- void LCD_Integer_100( unsigned int val );
- void LCD_IntegerXY_100(uchar x,uchar y,unsigned int val);
- void LCD_IntegerXY_1000(uchar x, uchar y, unsigned int val);
- void LCD_sIntegerXY_1000(uchar x, uchar y, int val);
- void LCD_sInteger( int val);
- //void LCD_IntegerXY_L(uchar x,uchar y,unsigned int val);
- //void LCD_LongIntXY(uchar x,uchar y,unsigned long val);
- void LCD_LongIntXY_D(uchar x,uchar y,unsigned long val, uchar digbit );
- void LCD_byteXY(uchar x,uchar y,uchar val);
- //void LCD_BCDXY(uchar x,uchar y,uchar b);
- void LCD_Char( uchar c );
- void LCD_CharXY( uchar x, uchar y, uchar c );
- void LCD_String(uchar *c);
- void LCD_CharHex( uchar c );
- void LCD_CharHexXY( uchar x , uchar y , uchar c );
- void LCD_CharBin( uchar c );
- void LCD_CharBinXY( uchar x , uchar y , uchar c );
- void LCD_Space( uchar i );
- void LCD_SpaceXY( uchar x , uchar y , uchar c );
- //void setblink(uchar x,uchar y)
- void LCD_BUS_Port( uchar x );
- //void LCD_PercentXY( uchar x, uchar y, int per );
- //void LCD_Weight2XY( uchar x, uchar y, long w );
- void LCD_Bit( bit b );
- void Delay25uS( void )
- {
- unsigned int i;
- for( i=0;i<10;i++ );
- }
- void LCD_Command(uchar c)
- {
- LCD_RS = 0;
- // LCD_RW = 0;
- LCD_BUS = LCD_BUS & 0x0f;
- LCD_BUS = LCD_BUS | ( c & 0xf0 ) ;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 0;
- LCD_BUS = LCD_BUS & 0x0f;
- LCD_BUS = LCD_BUS | ( ( c * 16 ) & 0xf0 );
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 0;
- Delay25uS();
- }
- void LCD_Data(uchar c)
- {
- LCD_RS=1;
- // LCD_RW = 0;
- LCD_BUS = LCD_BUS & 0x0f;
- LCD_BUS = LCD_BUS | ( c & 0xf0 ) ;
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 0;
- LCD_BUS = LCD_BUS & 0x0f;
- LCD_BUS = LCD_BUS | ( ( c * 16 ) & 0xf0 );
- LCD_E = 1;
- LCD_E = 1;
- LCD_E = 0;
- Delay25uS();
- }
- void LCD_Init()
- {
- LCD_RS=1;
- LCD_E=1;
- Delay5mS( 3 );
- LCD_Command( 0x28 );
- Delay5mS( 2 );
- LCD_Command( 0x28 );
- Delay5mS( 2 );
- LCD_RS=1;
- LCD_E=1;
- LCD_Command(0x28);
- Delay25uS();
- LCD_Command(0x28);
- Delay25uS();
- LCD_Command(0x06);
- Delay25uS();
- LCD_Command(0x0c);
- Delay25uS();
- LCD_Command(0x01);
- Delay5mS( 2 );
- }
- void LCD_Clr(void)
- {
- LCD_Command(0x01);
- Delay5mS( 2 );
- }
- void LCD_XY(uchar y,uchar x)
- //LCM 20x4
- {
- if( x == 0 )
- LCD_Command( 0x80 + y );
- else if( x == 1 )
- LCD_Command( 0xc0 + y );
- else if( x == 2 )
- LCD_Command( 0x80 + y + 20 );
- else if( x == 3 )
- LCD_Command( 0xc0 + y + 20 );
- }
- /* LCM 20x2
- {
- if((x&0x01)==0)
- LCD_Command(0x80|(y));
- else
- LCD_Command(0xc0|(y));
- }
- */
- void LCD_Char( uchar c )
- {
- LCD_Data( c );
- }
- void LCD_CharXY( uchar x, uchar y, uchar c )
- {
- LCD_XY( x, y );
- LCD_Char( c );
- }
- void LCD_String(uchar *c)
- {
- uchar d=0;
- while(c[d]!=0)
- {
- LCD_Data(c[d++]);
- }
-
- }
- void LCD_StringXY(uchar x,uchar y,uchar *c)
- {
- uchar d=0;
- LCD_XY(x,y);
- while(c[d]!=0)
- {
- LCD_Data(c[d++]);
- }
- }
复制代码 |
|