单片机数字时钟.docx

上传人:b****2 文档编号:16881061 上传时间:2023-07-19 格式:DOCX 页数:18 大小:647.20KB
下载 相关 举报
单片机数字时钟.docx_第1页
第1页 / 共18页
单片机数字时钟.docx_第2页
第2页 / 共18页
单片机数字时钟.docx_第3页
第3页 / 共18页
单片机数字时钟.docx_第4页
第4页 / 共18页
单片机数字时钟.docx_第5页
第5页 / 共18页
单片机数字时钟.docx_第6页
第6页 / 共18页
单片机数字时钟.docx_第7页
第7页 / 共18页
单片机数字时钟.docx_第8页
第8页 / 共18页
单片机数字时钟.docx_第9页
第9页 / 共18页
单片机数字时钟.docx_第10页
第10页 / 共18页
单片机数字时钟.docx_第11页
第11页 / 共18页
单片机数字时钟.docx_第12页
第12页 / 共18页
单片机数字时钟.docx_第13页
第13页 / 共18页
单片机数字时钟.docx_第14页
第14页 / 共18页
单片机数字时钟.docx_第15页
第15页 / 共18页
单片机数字时钟.docx_第16页
第16页 / 共18页
单片机数字时钟.docx_第17页
第17页 / 共18页
单片机数字时钟.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机数字时钟.docx

《单片机数字时钟.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟.docx(18页珍藏版)》请在冰点文库上搜索。

单片机数字时钟.docx

单片机数字时钟

单片机数字时钟

单片机电子时钟设计

淮安信息职业技术学院电子工程系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

图C

该数字钟是用一片AT89C51A单片机通过编程去驱动8个数码管实现的。

通过6个开关控制,从上到下6个开关KEY1~KEY6的功能分别为:

KEY1,切换至秒表;KEY2,调节时间,每调一次时加1;KEY3,调节时间,每调一次分加1;KEY4,从其它状态切换至时钟状态;KEY5,切换至闹钟设置状态,也可以对秒表清零;KEY6,秒表暂停.控制键分别与P1.0~P1.5口连接.其中:

A.通过P2口和P3口去控制数码管的显示如图所示P2口接数码管的a——g端,是控制输出编码,P3口接数码管的1——8端,是控制动态扫描输出.

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;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2