📄 1602时间函数.c
字号:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P1^0;
sbit rw=P1^1;
sbit e =P1^2;
uchar hour,minute,second;
uint counter=0; //250us计数单元
uchar n;
////////////////////////////////////////////////////////////
void Timer0(void) interrupt 1 //T0中断服务函数
{
counter++;
if(counter==4000)
{
counter=0;
second++;
}
if(second==60) {second=0;minute++;}
if(minute==60) {minute=0;hour++;}
if(hour==24) {hour=0;}
}
///////////////////////////////////////////////////////////1602显示函数
delay(uchar time) //延时函数,12M下1us
{
while(time>0)
{time-- ;}
}
write_cmd(uchar m) //写指令,含指令码
{
rs=0;
rw=0;
P0=m;
e=0;//
delay(250);
e=1;//e高脉冲
}
write_data(uchar c) //写数据
{
rs=1;
rw=0;
P0=c;
e=0;//
delay(250);
e=1;//e高脉冲
}
position(uchar row,uchar colum)//写位置(第几行,第几列)
{
uchar p;
if(row==1)
p=0x80+colum-1;
else
p=0xc0+colum-1;
write_cmd(p);
}
display(uchar *s) //写字符串
{
for(;*s!='\0';s++)
write_data(*s);
}
init_lcd(void)//标准初始化
{
delay(15000);
write_cmd(0x38); //显示模式设置(8位数据接口,双行显示,5×7点阵)
delay(5000);
write_cmd(0x38);
delay(5000);
write_cmd(0x38); //以后写读数据时都要检测忙信号(此处没有)
write_cmd(0x38);
write_cmd(0x08); //显示关闭
write_cmd(0x01); //显示清屏
write_cmd(0x06); //显示光标移动设置(地址计数递增,显示屏不移动)
write_cmd(0x0c); //显示开及光标设置(开显示,不显示光标)
}
main()
{
TMOD=0x2;
TH0=0x6;
TL0=0x6;
TR0=1; //开中断
ET0=1;
EA=1;
hour=19; //设定时间初值
minute=41;
second=55;
init_lcd(); //初始化液晶
while(1)
{
position(1,7);
n=hour/10;
write_data(n+48); //单个字符显示,注意是映射码,液晶中是写入的内部规定的映射表
n=hour%10;
write_data(n+48);
position(1,9);
display(":");
n=minute/10;
write_data(n+48);
n=minute%10;
write_data(n+48);
position(1,12);
display(":");
n=second/10;
write_data(n+48);
n=second%10;
write_data(n+48);
position(2,2);
display("Realtime Clock");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -