📄 1602driver.c
字号:
#include <reg51.h>
//#include <stdlib.h>
#define Port P2
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
//sbit P1_4=P1^4;
//sbit P1_5=P1^5;
unsigned char ReadState_LCD(void);
unsigned char IsBusy_LCD(void);
void WriteData_LCD(unsigned char Data);
void WriteCommand_LCD(unsigned char Code);
void Init_LCD(void);
void PutStr_LCD(unsigned char *str);
void PutStrXY_LCD(unsigned char x, unsigned char y, unsigned char *str);
void PutIntXY_LCD(unsigned char x, unsigned char y, unsigned Num);
void PutNumXY_LCD(unsigned char x, unsigned char y, unsigned Num, unsigned char Len);
void SetPos_LCD(unsigned char x, unsigned char y);
unsigned char ReadState_LCD(void) //char ReadState_LCD
{
Port = 0xff;
RS = 0;
RW = 1;
E = 1;
return Port;
}
unsigned char IsBusy_LCD(void) //IsBusy_LCD
{
Port = 0xff;
RS = 0;
RW = 1;
E = 1;
// return (Port >> 7) & 0x01;
return Port&0x80;
}
void WriteData_LCD(unsigned char Data) //WriteData_LCD
{
while ( IsBusy_LCD() );
RS = 1;
RW = 0;
Port = Data;
E = 0;
E = 1;
E = 0;
}
void WriteCommand_LCD(unsigned char Code) //WriteCommand_LCD
{
while ( IsBusy_LCD() );
RS = 0;
RW = 0;
Port = Code;
E = 0;
E = 1;
E = 0;
}
void delay(unsigned time) //void delay
{
while(time--);
}
void Init_LCD(void) //Init_LCD
{
delay(15000);
WriteCommand_LCD(0x38);
delay(5000);
WriteCommand_LCD(0x38);
delay(5000);
WriteCommand_LCD(0x38);
delay(5000);
WriteCommand_LCD(0x38);
WriteCommand_LCD(0x0f);
WriteCommand_LCD(0x08);
WriteCommand_LCD(0x01);
WriteCommand_LCD(0x06);
WriteCommand_LCD(0x0c);
WriteCommand_LCD(0x80);
}
void PutStr_LCD(unsigned char *str) //PutStr_LCD
{
while(*str)
{
WriteData_LCD(*str++);
}
}
void PutStrXY_LCD(unsigned char x, unsigned char y, unsigned char *str) //PutStrXY_LCD
{
SetPos_LCD(x, y);
PutStr_LCD(str);
}
void PutIntXY_LCD(unsigned char x, unsigned char y, unsigned Num) //PutIntXY_LCD
{
unsigned char i = 0;
unsigned char Len = 1;
if(Num >= 10) Len++;
if(Num >= 100) Len++;
if(Num >= 1000) Len++;
if(Num >= 10000) Len++;
for(i = 0; i < Len; i++)
{
SetPos_LCD(x + Len - i - 1, y);
WriteData_LCD(Num % 10 + 48);
Num /= 10;
}
}
void PutNumXY_LCD(unsigned char x, unsigned char y, unsigned Num, unsigned char Len) //PutNumXY_LCD
{
unsigned char i = 0;
unsigned char Add = ReadState_LCD() & 0x7f;
for(i = 0; i < Len; i++)
{
SetPos_LCD(x + Len - i - 1, y);
WriteData_LCD(Num % 10 + 48);
Num /= 10;
}
}
void SetPos_LCD(unsigned char x, unsigned char y) //SetPos_LCD
{
unsigned char i = y * 0x40 + x;
WriteCommand_LCD(0x80 + i);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -