通过51单片机实现电子时钟功能并通过LCD1602显示
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
}
}
51单片机电子时钟LCD1602显 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)