微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 通过51单片机实现电子时钟功能并通过LCD1602显示

通过51单片机实现电子时钟功能并通过LCD1602显示

时间:11-26 来源:互联网 点击:

for(x=z;x>

for(y=110;y>

write_com(0x80+0x40+10);//光标定位到秒位置

write_com(0x0f); //光标开始闪烁

}

if(s1num==2)//第二次按下光标闪烁定位到分钟位置

{

write_com(0x80+0x40+7);

}

if(s1num==3)//第三次按下光标闪烁定位到小时位置

{

write_com(0x80+0x40+4);

}

if(s1num==4)//第四次按下

{

s1num=0;//记录按键数清零

write_com(0x0c);//取消光标闪烁

TR0=1; //启动定时器使时钟开始走

}

}

}

if(s1num!=0)//只有功能键被按下后,增加和减小键才有效

{

if(s2==0)

{

delay(5);

if(s2==0)//增加键确认被按下

{

while(!s2);//按键释放

di();//每当有按键释放蜂鸣器发出滴声

if(s1num==1)//若功能键第一次按下

{

miao++; //则调整秒加1

if(miao==60)//若满60后将清零

miao=0;

write_sfm(10,miao);//每调节一次送液晶显示一下

write_com(0x80+0x40+10);//显示位置重新回到调节处

write_add(1,miao); //数据改变立即存入24C02

}

if(s1num==2)//若功能键第二次按下

{

fen++;//则调整分钟加1

if(fen==60)//若满60后将清零

fen=0;

write_sfm(7,fen);//每调节一次送液晶显示一下

write_com(0x80+0x40+7);//显示位置重新回到调节处

write_add(2,fen);//数据改变立即存入24C02

}

if(s1num==3)//若功能键第三次按下

{

shi++;//则调整小时加1

if(shi==24)//若满24后将清零

shi=0;

write_sfm(4,shi);;//每调节一次送液晶显示一下

write_com(0x80+0x40+4);//显示位置重新回到调节处

write_add(3,shi);//数据改变立即存入24C02

}

}

}

if(s3==0)

{

delay(5);

if(s3==0)//确认减小键被按下

{

while(!s3);//按键释放

di();//每当有按键释放蜂鸣器发出滴声

if(s1num==1)//若功能键第一次按下

{

miao--;//则调整秒减1

if(miao==-1)//若减到负数则将其重新设置为59

miao=59;

write_sfm(10,miao);//每调节一次送液晶显示一下

write_com(0x80+0x40+10);//显示位置重新回到调节处

write_add(1,miao);//数据改变立即存入24C02

}

if(s1num==2)//若功能键第二次按下

{

fen--;//则调整分钟减1

if(fen==-1)//若减到负数则将其重新设置为59

fen=59;

write_sfm(7,fen);//每调节一次送液晶显示一下

write_com(0x80+0x40+7);//显示位置重新回到调节处

write_add(2,fen);//数据改变立即存入24C02

}

if(s1num==3)//若功能键第二次按下

{

shi--;//则调整小时减1

if(shi==-1)//若减到负数则将其重新设置为23

shi=23;

write_sfm(4,shi);//每调节一次送液晶显示一下

write_com(0x80+0x40+4);//显示位置重新回到调节处

write_add(3,shi);//数据改变立即存入24C02

}

}

}

}

}

void main()//主函数

{

init();//首先初始化各数据

while(1)//进入主程序大循环

{

keyscan();//不停的检测按键是否被按下

}

}

void timer0() interrupt 1//定时器0中断服务程序

{

TH0=(65536-50000)/256;//再次装定时器初值

TL0=(65536-50000)%6;

count++; //中断次数累加

if(count==20) //20次50毫秒为1秒

{

count=0;

miao++;

if(miao==60)//秒加到60则进位分钟

{

miao=0;//同时秒数清零

fen++;

if(fen==60)//分钟加到60则进位小时

{

fen=0;//同时分钟数清零

shi++;

if(shi==24)//小时加到24则小时清零

{

shi=0;

}

write_sfm(4,shi);//小时若变化则重新写入

write_add(3,shi);//数据改变立即存入24C02

}

write_sfm(7,fen);//分钟若变化则重新写入

write_add(2,fen);//数据改变立即存入24C02

}

write_sfm(10,miao);//秒若变化则重新写入

write_add(1,miao);//数据改变立即存入24C02

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top