您的位置 首页 国产IC

用定时器中止规划时钟,用1602液晶显示

本时钟有些功能还未完全实现,仅实现一部分功能,年月日星期功能还未实现还可以加上整点报时和断电记忆的功能includereg52h>defineuc

时钟有些功用还未彻底完成,仅完成一部分功用,年月日星期功用还未完成 还能够加上整点报时和断电回忆的功用

#include

#defineucharunsignedchar

sbit rd=P2^6;

sbit wr=P2^5;

sbit lcde=P2^7;

sbit k1=P1^0;

sbit k2=P1^1;

sbit k4=P1^3;

sbit k8=P1^7;

uchar code table1[]=” 2011-10-01SAT”;

uchar code table2[]=”00:00:00″;

uchar t,s1num;

charshi,fen,miao;

voiddelay(uchar z)//推迟zms函数

{

uchar x,y;

for(x=z;x>0;x–)

for(y=110;y>0;y–);

}

voidwrite_com(uchar com)//液晶写指令操作

{

rd=0;

wr=0;

delay(5);

lcde=1;

P0=com;

lcde=0;

}

voidwrite_date(uchar date)//液晶写数据操作

{

rd=1;

wr=0;

delay(5);

lcde=1;

P0=date;

lcde=0;

}

voidwrite_sfm(uchar add,uchar date)//更新时分秒

{

uchar shi,ge;

shi=date/10;

ge=date;

write_com(0x80+0x40+add);

write_date(0x30+shi);

write_date(0x30+ge);

}

voidinit()//初始化函数

{

uchar i;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80+0x00);

for(i=0;i<15;i++)

write_date(table1[i]);

write_com(0x80+0x46);

for(i=0;i<8;i++)

write_date(table2[i]);

TMOD=0x01;//定时器工作方式

TH0=(65536-50000)/256;//设定定时器初值

TL0=(65536-50000)%6;//12M晶振时ms数为

EA=1;

ET0=1;

TR0=1;

}

voidkeyscan()//键盘扫描函数

{

if(k1==0)//按下k1键确定调时分秒

{

delay(5);

if(k1==0)

{

s1num++;

while(!k1)

;

delay(5);

while(!k1);

if(s1num==1)

{

TR0=0;//暂停计时器

write_com(0x80+0x4d);//光标在秒的方位闪耀

write_com(0x0f);

}

if(s1num==2)//光标在分的方位

{

TR0=0;

write_com(0x80+0x4a);

write_com(0x0f);

}

if(s1num==3)

{

TR0=0;

write_com(0x80+0x47);

write_com(0x0f);

}

if(s1num==4)//按下第四下时接着走时

{

s1num=0;

write_com(0x0c);

TR0=1;

}

}

}

if(s1num!=0)

{

if(s1num==1)

{

if(k2==0)//按k2键秒加

{

delay(5);

if(k2==0)

{

while(!k2);

delay(5);

while(!k2);

miao++;

if(miao==60)

miao=0;

write_sfm(0x0c,miao);

write_com(0x80+0x4d);

}

}

}

if(s1num==2)

{

if(k2==0)//分加

{

delay(5);

if(k2==0)

{

while(!k2);

delay(5);

while(!k2);

fen++;

if(fen==60)

fen=0;

write_sfm(0x09,fen);

write_com(0x80+0x4a);

}

}

}

if(s1num==3)

{

if(k2==0)//时加

{

delay(5);

if(k2==0)

{

while(!k2);

delay(5);

while(!k2);

shi++;

if(shi==24)

shi=0;

write_sfm(0x06,shi);

write_com(0x80+0x47);

}

}

}

if(k4==0)//判别k3是否被按下

{

delay(5);

if(k4==0)

{

while(!k4);

delay(5);

while(!k4);

if(s1num==1)

{

miao–;//秒减

if(miao==-1)

miao=59;

write_sfm(0x0c,miao);

write_com(0x80+0x4d);

}

if(s1num==2)

{

fen–;//分减

if(fen==-1)

fen=59;

write_sfm(0x09,fen);

write_com(0x80+0x4a);

}

if(s1num==3)

{

shi–;//时减

if(shi==-1)

shi=23;

write_sfm(0x06,shi);

write_com(0x80+0x47);

}

}

}

}

if(k8==0)//按下k8退出调时

{

delay(5);

if(k8==0)

{

while(!k8);

delay(5);

while(!k8);

s1num=0;

write_com(0x0c);

TR0=1;

}

}

}

voidmain()

{

init();

while(1)

{

keyscan();

}

}

voidtimer0() interrupt 1//中止服务程序

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;//从头设定定时器初值

t++;

if(t==20)//定时器中止次为秒

{

t=0;

miao++;

if(miao==60)

{

miao=0;

fen++;

if(fen==60)

{

fen=0;

shi++;

if(shi==24)

{

shi=0;

}

write_sfm(0x06,shi);//显现时

}

write_sfm(0x09,fen);//显现分

}

write_sfm(0x0c,miao);//显现秒

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/256237.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部