📄 lcd1602.h
字号:
#ifndef _LCD1602_
#define _LCD1602_
#include <AT89X51.H>
#include <string.h>
#include <intrins.h>
//--------------------------------------------------------------------
#define E_1602 P2_2 //on falling edge enable data or command
#define RW_1602 P2_1 //read or write control
#define RS_1602 P2_0 //cmd or data register select
#define DATA_1602 P1 //data port
#define DATA 1 //select DATA register
#define CMD 0 //select CMD register
#define READ 1
#define WRITE 0//---------------------------------------------------------------
void Delay_us(uchar t);
void Delay_ms(uchar t);
void Init_1602(void);
void Write_Char_1602(uchar Data,bit CMD_DATA,bit Check);
void Check_Busy_1602(void);
void Write_String_1602(uchar *P);
void Set_R_C(uchar R,uchar C);
//void Clear_LCD_1602(void);
//----------------------------------------------------------------
/*
void Clear_LCD_1602(void)
{
Write_Char_1602(0x01,CMD,1);//clear screen
}
*/
void Delay_us_1602(uchar t)
{
while(--t);
}
void Delay_ms_1602(uchar t)
{
while(t--)
{
Delay_us_1602(225);
Delay_us_1602(227);
}
}
void Init_1602(void)
{
Delay_ms_1602(15);
Write_Char_1602(0x38,CMD,0); //don't check busy
Delay_ms_1602(5);
Write_Char_1602(0x38,CMD,0);
Delay_ms_1602(5);
Write_Char_1602(0x38,CMD,0);
Write_Char_1602(0x38,CMD,1);//8 wire,2 line display,5x10 char
Write_Char_1602(0x08,CMD,1);//close display,no cursor,don't blink
Write_Char_1602(0x01,CMD,1);//clear screen
Write_Char_1602(0x06,CMD,1);//the cursor move from left to right,the text don't move
Write_Char_1602(0x0c,CMD,1);//open display
}
void Write_Char_1602(uchar Data,bit CMD_DATA,bit Check)
{
if(Check)
Check_Busy_1602();
RS_1602=CMD_DATA;
RW_1602=WRITE;
DATA_1602=Data;
E_1602=1;
_nop_();
E_1602=0;
}
void Write_String_1602(uchar *P) //only can write from start to end
{
uchar i,len;
len=strlen(P);
Set_R_C(0,0);
if(len>16)
{
for(i=0;i<16;i++)
{
Write_Char_1602(P[i],DATA,1);
}
Set_R_C(1,0);
for(i=16;i<len;i++)
{
Write_Char_1602(P[i],DATA,1);
}
}
else
{
for(i=0;i<len;i++)
{
Write_Char_1602(P[i],DATA,1);
}
}
}
void Set_R_C(uchar R,uchar C) //set row and column R=0/1;C=0~F
{
R&=0x01;
C&=0x0f;
if(R)
Write_Char_1602(0x80+0x40+C,CMD,1);
else
Write_Char_1602(0x80+C,CMD,1);
}
void Check_Busy_1602(void)
{
DATA_1602=0xff; //set as input port
RS_1602=CMD;
RW_1602=READ;
E_1602=1;
while(DATA_1602 & 0x80)
{
E_1602=0; //这两句protues仿真必须加
E_1602=1; //
}
E_1602=0;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -