LCD1602简易数字钟
选用芯片:AT89S52
此函数功能为:用定时器的中断方式实现数字钟功能,然后在LCD1602上显示,能校时和校分,具有整点报时功能(四低一高)。
博主才疏学浅,可能会出现设计不足和错误,欢迎大家评论区交流。^ _ ^
/*******************************************************************
此函数功能为:用定时器的中断方式实现数字钟功能,然后在LCD1602上显示,能校时和校分,具有整点报时功能(四低一高)。
作者:Crazy Wind
日期:2020.10.10
version:1.0.0
********************************************************************/
#include"reg52.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^0; //寄存器选择位RS为P2.0
sbit RW=P2^1; //读写选择位RW为P2.1
sbit E=P2^2; //使能信号位E为P2.2
sbit BF=P0^7; //忙碌标志位BF为P0.7
uint i,j;
uchar s=0; //秒
uchar m=0; //分
uchar h=0; //时
uint k=0;
uchar a;
sbit k1=P1^4; //校分按键
sbit k2=P1^5; //校时按键
sbit beep=P3^6; //蜂鸣器
uchar shuzi[9]; //存储秒分时转换成的对应的CGRAM字符(数组位数比实际位数多一位用来存放'\0')
uchar code bjtime[]={
"BEIJING TIME"}; //自定义的一条字符
uchar code CGzifu[]={
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20};//CGRAM中0~9和':'对应的字符码
/*****************************************************
函数功能:ms延时
******************************************************/
void delayms(uint ms) //毫秒延时
{
for(i=0;i<ms;i++)
{
for(j=115;j>0;j--);
}
}
/*****************************************************
函数功能:打开定时器,使用中断方式
******************************************************/
void dsq(void) //定时器和中断
{
TMOD=0x01; //定时器T0的模式1
TH0=0x4C; //定时器T0的高8位赋初值 (11.0592MHz)
TL0=0x00; //定时器T0的低8位赋初值
TR0=1; //启动定时器T0
EA=1; //开放总中断
ET0=1; //允许使用定时器中断0
}
/*****************************************************
函数功能:定时器中断,秒分时进位
******************************************************/
void ms() interrupt 1 //50毫秒 进入此中断
{
k++;
TH0=0x4C; //重新赋初值
TL0=0x00;