单片机数字时钟.docx
- 文档编号:7125436
- 上传时间:2023-01-20
- 格式:DOCX
- 页数:18
- 大小:462.27KB
单片机数字时钟.docx
《单片机数字时钟.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟.docx(18页珍藏版)》请在冰豆网上搜索。
单片机数字时钟
单片机数字时钟
单片机电子时钟设计
淮安信息职业技术学院电子工程系15077029李典
一.题目:
单片机电子时钟时钟
二.内容:
设计一个数字时钟,显示范围为00:
00:
00~23:
59:
59。
通过几个开关进行控制,其中开关K1用于切换时间设置(调节时钟)和时钟运行(正常运行)状态;开关K2用于切换修改时、分、秒数值;开关K3用于使相应数值加1调节;开关K4用于减1调节;开关K5用于设定闹钟,闹钟同样可以设定初值,并且设定好后到时间通过实验箱音频放出一段乐曲作为闹铃。
选做增加项目:
还可增加秒表功能(精确到0.01s)或年月日设定功能。
三.要求:
开关K3进行加1调节时,当加至最大值(时为24,分和秒均为60)时要能正常归零。
开关K4进行减1调节时,当减至最小值00时,均能再回到从相应最大值(时为23,分、秒均为59)。
闹钟乐曲自定。
四.电路及功能说明:
电路图如图所示:
图A
B.从P0.0输出一个信号使二极管发光,二极管在设置的闹钟时间到了时候发光,若有乐曲可以去驱动扬声器实现。
(图A是时钟运行状态,图B是闹钟运行状态,图C是秒表运行状态)
功能说明:
1.各个控制键的功能:
可对时间进行校准调节(只能加1);按下设置键数字时钟进入闹钟设置状态,设置闹钟的时间;时加1、分加1键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;按下秒切换键就可以进入秒表模式,同时秒表也开始计时,按下秒表暂停、复位键就暂停、归零,如果要重新对秒计时则可以按秒表开始、复位;清零键可以对闹钟清零。
2.AT89C51单片机,通过编写程序对数码显示进行控制。
3.八个7段数码管显示时钟和秒表信号。
五.实验程序流程图:
1.主程序流程图:
2.中断程序流程图
2.秒表中断程序流程图:
3.按键程序流程图:
第一图为时钟和闹钟的调节.
第二图为进入中断和清零
六.实验结果分析:
此时钟设计是利用protues仿真软件进行仿真。
基本上实现了要求的功能,该多功能数字钟实现的时钟显示、闹钟设置和秒表功能,校准时钟时只设计了时加键和分加键以及清零键,没有设置减分减时键。
可发通过循环调节得到正确的调节数值。
另外,要求有一段乐曲来作为闹钟,可这里只是用了一个二级管的发光来实现这个功能。
若用一个扬声器和一个乐曲能够实现。
七.程序清单:
#include
#defineucharunsignedchar
#defineuintunsignedint
#definedelay_time3
uchark,dat[]={0,0,0,0,0,0,0,0};
uinttcount,t,u;
uchardat1[]={0,0,0,0,0,0,0,0};
uchardat2[]={0,0,0,0,0,0,0,0};
ucharalarms[]={0,0,0,0,0,0,0,0};
uchardis_bit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsignedcharcodeSEG7[11]={0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
0xBF,/*-*/
};
sbitmiaobiao1=P1^0;
sbittminute=P1^1;
sbitthour=P1^2;
sbitmiaobiao2=P1^3;
sbitalarm=P1^4;
sbitP0_0=P0^0;
sbitP1_5=P1^5;
sbitP1_6=P1^6;
sbitP1_7=P1^7;
ucharms=0;
ucharflag=0;
ucharsec=0;
ucharminit=0;
structtime{ucharsecond;ucharminute;ucharhour;}time1;
ucharn,i;
voiddelay(n)
{
while(n--)
{
for(i=120;i>0;i--);
}
}
voidmodify(void)
{
EA=0;
if(thour==0)
{
if(flag==0)
{
dat1[6]++;delay(180);
if(dat1[6]>9)
{
dat1[6]=0;dat1[7]++;
if(dat1[7]>2)
{
dat1[7]=0;
}
}
}
if(flag==1)
{
alarms[6]++;delay(200);
if(alarms[6]>9)
{
alarms[6]=0;alarms[7]++;
if(alarms[7]>2)
{
alarms[7]=0;
}
}
dat[6]=alarms[6];
dat[7]=alarms[7];
}
}
if(tminute==0)
{
if(flag==0)
{
dat1[3]++;delay(180);
if(dat[3]>=10)
{
dat1[4]++;dat1[3]=0;
if(dat1[4]>5)
{
dat1[4]=0;
}
}
}
if(flag==1)
{
alarms[3]++;delay(200);
if(alarms[3]>9)
{
alarms[4]++;alarms[3]=0;
if(alarms[4]>5)
{
alarms[4]=0;
}
}
dat[3]=alarms[3];
dat[4]=alarms[4];
}
}
if(miaobiao1==0)
{
TR0=0;ET0=0;TR1=1;ET1=1;
}
if(miaobiao2==0)
{
TR0=1;ET0=1;TR1=0;ET1=0;
dat2[0]=0;
dat2[1]=0;
dat2[3]=0;
dat2[4]=0;
dat2[6]=0;
dat2[7]=0;
ms=0;
sec=0;
minit=0;
}
if(P1_5==0)
{
TR0=0;ET0=0;TR1=0;ET1=0;
}
if(alarm==0)
{
TR0=0;ET0=0;TR1=0;ET1=0;flag=1;
dat[0]=0;
dat[1]=0;
dat[2]=10;
dat[3]=0;
dat[4]=0;
dat[5]=10;
dat[6]=0;
dat[7]=0;
}
EA=1;
}
voidinit(void)
{
TMOD=0x11;
TH0=0xDB;
TL0=0xFF;
TH1=0xDB;
TL1=0xFF;
ET0=1;//10ms
ET1=1;
//TR1=1;
TR0=1;
tcount=0;
ms=0;
sec=0;
minit=0;
EA=1;
}
voidtest(void)
{
for(k=0;k<8;k++)
{
P3=dis_bit[k];P2=SEG7[dat[k]];delay
(1);P3=0X00;
}
}
voidmain()
{
init();
delay(10);
while
(1)
{
modify();
test();
}
}
voiddiplay()interrupt1
{
ET0=0;
TR0=0;
TH0=0xDB;
TL0=0xff;
TR0=1;
tcount++;
if(tcount==100)
{
time1.second++;
tcount=0;
dat1[0]=(time1.second)%10;
dat1[1]=(time1.second)/10;
}
if(time1.second==60)
{
time1.second=0;
time1.minute++;
dat1[3]=(time1.minute)%10;
dat1[4]=(time1.minute)/10;
}
if(time1.minute==60)
{
time1.minute=0;
time1.hour++;
dat1[6]=time1.hour%10;
dat1[7]=time1.hour/10;
}
if(time1.hour>23)
{
time1.hour=0;
}
dat[5]=10;
dat[2]=10;
dat[0]=dat1[0];
dat[1]=dat1[1];
dat[3]=dat1[3];
dat[4]=dat1[4];
dat[6]=dat1[6];
dat[7]=dat1[7];
flag=0;
P0=0x00;
if((alarms[7]==dat1[7])&&(alarms[6]==dat1[6])&&(alarms[4]==dat1[4])&&(alarms[3]==dat1[3]))
{
P0=0x01;
}
ET0=1;
}
voidtime_2(void)interrupt3
{
EA=0;
TR0=0;
TH1=0xDB;
TL1=0xFF;
TR1=1;
ms++;
dat2[0]=ms%10;
dat2[1]=ms/10;
if(ms>=100)
{
ms=0;
sec++;
dat2[3]=sec%10;
dat2[4]=sec/10;
if(sec>=60)
{
sec=0;
minit++;
dat2[6]=minit%10;
dat2[7]=minit/10;
}
}
dat[5]=10;
dat[2]=10;
dat[0]=dat2[0];
dat[1]=dat2[1];
dat[3]=dat2[3];
dat[4]=dat2[4];
dat[6]=dat2[6];
dat[7]=dat2[7];
EA=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字 时钟