简单的51单片机时钟程序Word格式.docx
《简单的51单片机时钟程序Word格式.docx》由会员分享,可在线阅读,更多相关《简单的51单片机时钟程序Word格式.docx(9页珍藏版)》请在冰豆网上搜索。
sbits1=P3^0;
sbits2=P3^1;
sbits3=P3^2;
//按键所用的端口
sbits4=P3^3;
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
//大约是1ms,因为单片机的时钟周期为11.0592mhz。
}
voidwrite_com(ucharcom)
rs=0;
//指令
P0=com;
//写指令函数
delay
(1);
en=1;
en=0;
voidwrite_data(uchardat)
rs=1;
//数据
P0=dat;
//写指令函数
voidinit()
//初始时使能为0
rw=0;
write_com(0x38);
//显示屏模式设置为1602方案
write_com(0x0c);
write_com(0x06);
//显示开关/光标设置
write_com(0x01);
//清屏
write_com(0x80);
//指针置零
for(num=0;
num<
16;
num++)
write_data(table[num]);
write_com(0xc3);
8;
write_data(table1[num]);
voiddingshi()
TMOD=0x01;
//确定定时器工作模式(定时模式)
TH0=(65536-tt)/256;
//赋初值为tt微秒
TL0=(65536-tt)%256;
//不赋值时默认其值是0
EA=1;
//开总中断
ET0=1;
//开定时器0中断
//IE=0x82;
//总线写法
TR0=1;
//启动定时器0总线TCON=0x10;
voidshuanxin(ucharadd,uchardate)
ucharshi,ge;
write_com(0xc3+add);
//指针指向
shi=date/10;
ge=date%10;
write_data(0x30+shi);
write_data(0x30+ge);
//指针自动后移,故不必再写指针位置
/***************借助蜂鸣器接地起作用***************/
voidkeyscan()
if(s1==0)
{
delay(5);
if(s1==0)
{
s1num++;
while(!
s1);
if(s1num==1)
{
TR0=0;
//时钟停止运行
write_com(0xca);
//指针指向ss
write_com(0x0f);
//光标闪烁
}
if(s1num==2)
write_com(0xc7);
//指针指向mm
if(s1num==3)
write_com(0xc4);
//指针指向hh
if(s1num==4)
s1num=0;
TR0=1;
//时钟运行
write_com(0x0c);
//取消闪烁
}
}
/***************调节时间****************/
if(s1num!
=0)//目的是使s1按下的前提才起作用
if(s2==0)
delay(5);
if(s2==0)
while(!
s2);
//松手检测,松手后方可向下执行
if(s1num==1)
{
ss++;
if(ss==60)
ss=0;
shuanxin(6,ss);
write_com(0xca);
}
if(s1num==2)
mm++;
if(mm==60)
mm=0;
shuanxin(3,mm);
write_com(0xc7);
if(s1num==3)
hh++;
if(hh==24)
hh=0;
shuanxin(0,hh);
write_com(0xc4);
=0)//s1按下的前提才起作用
if(s3==0)
if(s3==0)
s3);
ss--;
if(ss==-1)
ss=59;
mm--;
if(mm==-1)
mm=59;
hh--;
if(hh==-1)
hh=23;
if(s4==0)
if(s4==0)
s4);
ss=0;
mm=0;
hh=0;
voidmain()
init();
dingshi();
while
(1)
{
keyscan();
if(t==20)
P1=P1-1;
t=0;
ss++;
if(ss==60)
ss=0;
mm++;
if(mm==60)
{
}
}
shuanxin(3,mm);
shuanxin(6,ss);
voidtime0()interrupt1
t++;