📄 lcd1602.c
字号:
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
#define begin 1
sbit RS=P2^0; //选择数据或指令模式
sbit RW=P2^1;//读写选择
sbit E=P2^2;//使能端,下降沿执行指令
void lcd_initial();//初始化
void write_s(uchar *s);//写符号
void write_data(uchar);//写数据
void write_code(uchar);//写指令
void check_busy();//判忙
void display();//显示时间
void delay(uchar);//延时(毫秒)
uchar s,m,h,n;
void main()
{TMOD=0X01;
IE=0X82;
TL0=-50000%256;
TH0=-50000/256;
TR0=1;
lcd_initial();
delay(20);
write_code(0x86+begin);//显示:
delay(2);
write_s(":");
delay(2);
write_code(0x89+begin);//显示:
delay(2);
write_s(":");
display();
delay(20);
write_code(0x80);
write_s("TIME");
while(1)
{display();delay(20);}
}
void lcd_initial()
{delay(20);
write_code(0x01);//清屏并光标复位
delay(5);
write_code(0x38);//设置式:8位2行5x7点阵显示模
delay(5);
write_code(0x0c);//显示器开、光标关且光标不允许闪烁
delay(5);
write_code(0x06);//文字不动,光标自动右移
}
void write_s(uchar *s)
{
while(*s>0)
{write_data(*s);
s++;
}
}
void write_data(uchar dat)
{check_busy();
out=dat;
_nop_();
_nop_();
RS=1;
RW=0;
E=0;
_nop_();
_nop_();
E=1;
}
void write_code(uchar command)
{check_busy();
out=command;
_nop_();
_nop_();
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
E=1;
}
void check_busy()
{while(0x80&out)
{
RS=0;
RW=1;
E=0;
_nop_();
_nop_();
E=1;
}
}
void display()
{
write_code(0x84+begin);//显示小时
delay(2);
write_data(h/10+0x30);
delay(2);
write_data(h%10+0x30);
delay(2);
write_code(0x87+begin);//显示分钟
delay(2);
write_data(m/10+0x30);
delay(2);
write_data(m%10+0x30);
delay(2);
write_code(0x8a+begin);//显示秒钟
delay(2);
write_data(s/10+0x30);
delay(2);
write_data(s%10+0x30);
}
void delay(uchar i)
{uchar j=250;
for(;i>0;i--,j=250)
{while(--j);}
}
void t0() interrupt 1
{
TL0=-50000%256;
TH0=-50000/256;
n++;
if(!(n%10))
{write_code(0x86+begin);//让 :不显示
delay(2);
write_data(0X20);
delay(2);
write_code(0x89+begin);//让 :不显示
delay(2);
write_data(0X20);
}
if(!(n%20))
{s++;
if(s==60)s=0,m++;
if(m==60)m=0,h++;
if(h==24)h=0;
write_code(0x86+begin);//让 :显示
delay(2);
write_s(":");
delay(2);
write_code(0x89+begin);//让 :显示
delay(2);
write_s(":");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -