简单的51单片机时钟程序.docx
- 文档编号:6874917
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:9
- 大小:15.88KB
简单的51单片机时钟程序.docx
《简单的51单片机时钟程序.docx》由会员分享,可在线阅读,更多相关《简单的51单片机时钟程序.docx(9页珍藏版)》请在冰豆网上搜索。
简单的51单片机时钟程序
简单的51单片机时钟程序,可以通过按键来设置时间,按键可以自己更改。
#include
#defineuintunsignedint
#defineucharunsignedchar
#definett46080//设置时间间隔,对应11.0592MHZ的晶振
ucharcodetable[]="Happyeveryday!
";
ucharcodetable1[]="00:
00:
00";
ucharnum,hh,mm,ss,t,s1num=0;
sbiten=P3^4;
sbitrs=P3^5;
sbitrw=P3^6;
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>0;y--);//大约是1ms,因为单片机的时钟周期为11.0592mhz。
}
voidwrite_com(ucharcom)
{
rs=0;//指令
P0=com;//写指令函数
delay
(1);
en=1;
delay
(1);
en=0;
}
voidwrite_data(uchardat)
{
rs=1;//数据
P0=dat;//写指令函数
delay
(1);
en=1;
delay
(1);
en=0;
}
voidinit()
{
en=0;//初始时使能为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);
for(num=0;num<8;num++)
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
write_com(0x0f);
}
if(s1num==3)
{
write_com(0xc4);//指针指向hh
write_com(0x0f);
}
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);
}
}
}
}
if(s1num!
=0)//s1按下的前提才起作用
{
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!
s3);
if(s1num==1)
{
ss--;
if(ss==-1)
ss=59;
shuanxin(6,ss);
write_com(0xca);
}
if(s1num==2)
{
mm--;
if(mm==-1)
mm=59;
shuanxin(3,mm);
write_com(0xc7);
}
if(s1num==3)
{
hh--;
if(hh==-1)
hh=23;
shuanxin(0,hh);
write_com(0xc4);
}
}
}
}
if(s1num!
=0)//s1按下的前提才起作用
{
if(s4==0)
{
delay(5);
if(s4==0)
{
while(!
s4);
if(s1num==1)
{
ss=0;
shuanxin(6,ss);
write_com(0xca);
}
if(s1num==2)
{
mm=0;
shuanxin(3,mm);
write_com(0xc7);
}
if(s1num==3)
{
hh=0;
shuanxin(0,hh);
write_com(0xc4);
}
}
}
}
}
voidmain()
{
init();
dingshi();
while
(1)
{
keyscan();
if(t==20)
{
P1=P1-1;
t=0;
ss++;
if(ss==60)
{
ss=0;
mm++;
if(mm==60)
{
mm=0;
hh++;
if(hh==24)
{
hh=0;
}
shuanxin(0,hh);
}
shuanxin(3,mm);
}
shuanxin(6,ss);
}
}
}
voidtime0()interrupt1
{
TH0=(65536-tt)/256;//不赋值时默认其值是0
TL0=(65536-tt)%256;
t++;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 51 单片机 时钟 程序