#include "LCD1602.H" #include
"TYPEDEF.H" #include "CONFIG.H"
//写命令函数 static void LCD1602_WriteCommand( uint8
com );
//判忙函数 static void
LCD1602_CheckBusy();
//写数据函数 static void
LCD1602_WriteData( uint8 dat );
//将数据转化为字符串 static void Uint32_To_String( uint8
*str, uint32 dat );
//液晶初始化函数 void
LCD1602_Init() {
LCD1602_WriteCommand( 0x38
);//8跟数据线,2行显示,5*8点阵 LCD1602_WriteCommand( 0x06
);//写入数据后光标自动右移 LCD1602_WriteCommand( 0x01 );//清除DDRAM,清屏 LCD1602_WriteCommand( 0x0c
);//不显示光标,不闪烁 }
//液晶位置设置函数 void
LCD1602_SetPosition( uint8 x, uint8 y ) { if(
x==0 ) LCD1602_WriteCommand( 0X80+y ); else if( x==1 )LCD1602_WriteCommand( 0X80+0x40+y
); else { char Buffer[]={"Pos Error"}; LCD1602_WriteBuffer( Buffer
); while(1); } } //液晶写缓存函数 void
LCD1602_WriteBuffer( uint8 *buffer ) { while( *buffer != '\0'
) { LCD1602_WriteData( *buffer ); buffer++; }
}
//写字符串函数 void LCD1602_WriteString(
uint8 x, uint8 y, uint8 *str ) { LCD1602_SetPosition(x,y); LCD1602_WriteBuffer( str
); }
//显示数值函数 void LCD1602_WriteNum(
uint8 x, uint8 y, uint32 dat ) { uint8 buf[12] =
{0}; LCD1602_SetPosition( x, y ); Uint32_To_String( buf, dat
); LCD1602_WriteBuffer( buf ); }
//显示温度函数 void LCD1602_DispTemp( uint8 x, uint8
y, int8 temp ) { LCD1602_SetPosition( x, y
); if( temp < 0 ) { temp *=
-1; LCD1602_WriteData('-'); } else { LCD1602_WriteData('+'); } LCD1602_WriteData(
temp/10 + '0' ); LCD1602_WriteData( temp + '0' ); }
//显示两位数函数 void LCD1602_Disp2bit( uint8 x, uint8
y, uint8 dat ) { LCD1602_SetPosition( x, y
); LCD1602_WriteData( dat/10 + '0' ); LCD1602_WriteData( dat + '0'
); }
//开启光标函数 void LCD1602_OpenCursor(
void ) { LCD1602_WriteCommand( 0x0f ); //显示开,光标闪烁开 }
//关闭光标函数 void LCD1602_CloseCursor( void
) { LCD1602_WriteCommand( 0X0C ); //显示开,光标关 }
//设定光标位置函数 void LCD1602_SetCursor( uint8 x,
uint8 y ) { LCD1602_SetPosition( x, y
); }
static void LCD1602_WriteCommand( uint8
com ) { LCD1602_CheckBusy(); rs
= L; rw = L; en = L; PORT_DATA = com; en = H; en = L; }
static void LCD1602_CheckBusy() { uint8 dat = 0; rs =
L; rw = H; en = L; PORT_DATA =
0xff; do { en = H; dat =
PORT_DATA; en = L; } while( dat&0x80
); }
static void LCD1602_WriteData( uint8
dat ) { LCD1602_CheckBusy(); rs = H; rw = L; en = L; PORT_DATA = dat; en =
H; en = L; }
//将数值转换为字符串函数 static void
Uint32_To_String( uint8 *str, uint32 dat ) { //uint32
数据的最大值为4294967295,有10位数 uint8 buffer[12] = { 0 }; int8 i = 0, j = 0; do { buffer[i] = dat +
'0'; dat /= 10; i++; }while( dat != 0
); buffer[i] = '\0'; i -= 1; j = 0; while( i >= 0
) { str[j++] = buffer[i--]; } str[j] = '\0'; } |