You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.6 KiB
76 lines
1.6 KiB
#include "lcd.h" |
|
|
|
|
|
void Read_Busy() //忙检测函数,判断bit7是0,允许执行;1禁止 |
|
{ |
|
unsigned char sta; // |
|
LCD1602_DB = 0xff; |
|
LCD1602_RS = 0; |
|
LCD1602_RW = 1; |
|
do |
|
{ |
|
LCD1602_EN = 1; |
|
sta = LCD1602_DB; |
|
LCD1602_EN = 0; //使能,用完就拉低,释放总线 |
|
}while(sta & 0x80); |
|
} |
|
|
|
void Lcd1602_Write_Cmd(unsigned char cmd) //写命令 |
|
{ |
|
Read_Busy(); |
|
LCD1602_RS = 0; |
|
LCD1602_RW = 0; |
|
LCD1602_DB = cmd; |
|
LCD1602_EN = 1; |
|
LCD1602_EN = 0; |
|
} |
|
|
|
void Lcd1602_Write_Data(unsigned char dat) //写数据 |
|
{ |
|
Read_Busy(); |
|
LCD1602_RS = 1; |
|
LCD1602_RW = 0; |
|
LCD1602_DB = dat; |
|
LCD1602_EN = 1; |
|
LCD1602_EN = 0; |
|
} |
|
|
|
void LcdSetCursor(unsigned char x,unsigned char y) //坐标显示 |
|
{ |
|
unsigned char addr; |
|
if(y == 0) |
|
addr = 0x00 + x; |
|
else |
|
addr = 0x40 + x; |
|
|
|
Lcd1602_Write_Cmd(addr|0x80); |
|
} |
|
|
|
//按指定位置显示一个字符 |
|
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) |
|
{ |
|
Y &= 0x1; |
|
X &= 0xF; //限制X不能大于15,Y不能大于1 |
|
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40; |
|
X |= 0x80; //算出指令码 |
|
Lcd1602_Write_Cmd(X); //发命令字 |
|
Lcd1602_Write_Data(DData); //发数据 |
|
} |
|
|
|
|
|
void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str) //显示字符串 |
|
{ |
|
LcdSetCursor(x,y); //当前字符的坐标 |
|
while(*str != '\0') |
|
{ |
|
Lcd1602_Write_Data(*str++); |
|
} |
|
} |
|
|
|
void InitLcd1602() //1602初始化 |
|
{ |
|
Lcd1602_Write_Cmd(0x38); //打开,5*8,8位数据 |
|
Lcd1602_Write_Cmd(0x0c); |
|
Lcd1602_Write_Cmd(0x06); |
|
Lcd1602_Write_Cmd(0x01); //清屏 |
|
}
|
|
|