📄 1602test.txt
字号:
#include <REG52.h>
#define uchar unsigned char
#define uint unsigned int
#define LCM_Data P2 //数据口
sbit LCM_RW = P1^1;
sbit LCM_RS = P1^2;
sbit LCM_E = P1^0;
void delay(uint del) //延时,晶振12M,延时因单片机型号不同会有些不同
{
while(del--);
}
void lcd_e_toggle(void)
{
LCM_E = 1;
delay(1);
LCM_E = 0;
}
void check_busy(void)
{
bit result;
do{
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 1;
LCM_Data=0xff;
result = (bit)(LCM_Data&0x80);
LCM_E = 0;
}while (result == 1);
delay(1);
}
// 循环检测LCD忙标志(BF),直到其值为0,方可执行下一指令
void lcd_wait_until_finish(void)
{
LCM_RW = 1; // RW置1,状态为读
LCM_RS = 0; // RS置0,读状态时RS需置低电平
LCM_E = 1; // E 置1,读取信息
check_busy();
LCM_E = 0; // E重置为0
}
// 公共函数
// 向LCD写命令字
void lcd_command(uchar cmd)
{
LCM_RW = 0; // RW置0,状态为写
LCM_RS = 0; // RS置0,写入命令字
LCM_Data = cmd; // 将命令字cmd送入LCD的数据端口
lcd_e_toggle(); // 产生使能脉冲,在下降沿开始执行,将命令字读入
lcd_wait_until_finish(); // 等待执行完毕
}
// 设置显示位置( 即写入显示地址),x,y均从0开始
void lcd_goto_xy(uchar x, uchar y)
{
uchar p; // p为字符显示位置,即DDRAM中的地址
if (y==0)
{
p = 0x00 + x; // (0,0)显示位置为0x00
}
else
{
p = 0x40 + x; // (0,1)显示位置为0x40
}
lcd_command(p + 0x80); // 写入显示地址时DB7须为高电平,加0x80
}
// 写字符(传入的参数实际为所需显示字符的地址,即液晶字符产生器中字符的地址)
void lcd_putc(uchar c)
{
LCM_RW = 0; // RW置0,状态为写
LCM_RS = 1; // RS置1,写入数据
LCM_Data = c; // 将字符c(实际上是字符的地址)送入LCD数据端口
lcd_e_toggle(); // 使能脉冲
lcd_wait_until_finish(); // 等待完成
}
// 指定位置写字符
/*
void lcd_xy_putc(uchar x, uchar y, uchar c)
{
lcd_goto_xy(x,y);
lcd_putc(c);
}
*/
// 写字符串
void lcd_puts(uchar *s)
{
while(*s)
{
lcd_putc(*s);
s++;
}
}
// 指定位置写字符串
/*
void lcd_xy_puts(uchar x, uchar y, uchar *s)
{
lcd_goto_xy(x, y);
lcd_puts(s);
}
*/
// LCD初始化
void lcd_init(void)
{
lcd_command(0x38); // 设为8位接口模式,显示2行字符
lcd_command(0x06); // 写入新数据后光标右移
lcd_command(0x0c); // 显示功能开,不显示光标
lcd_command(0x01); // 清屏
}
main()
{ lcd_init();
lcd_goto_xy(0,0);
lcd_puts("Welcome!") ;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -