数字钟电子稿.docx
- 文档编号:29337263
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:26
- 大小:231.18KB
数字钟电子稿.docx
《数字钟电子稿.docx》由会员分享,可在线阅读,更多相关《数字钟电子稿.docx(26页珍藏版)》请在冰豆网上搜索。
数字钟电子稿
摘要:
我们介绍了多功能数字钟的系统设计。
系统具有时间设置及显示、闹钟、温度显示等功能。
系统以AT89C52为核心,主要进行基于AT89C52低功耗MCU的字符型数字钟及其系统的研究。
系统带有数码管显示器,配合按键提供友好的用户界面,操作简单。
该数字钟能长期、连续、可靠、稳定的工作;同时还具有体积小、功耗低等特点,便于携带,使用方便。
系统软件设计包括单片机计算机两部分的编程。
计算机软件编程主要实现参数设置、串行口数据接收、指令发送以及数据的显示和存储,采用汇编语言编程。
单片机软件编程主要实现键盘、数码管显示等各模块的功能,采用汇编语言编程。
该系统通过定时计数器与计算机通信,计算机给单片机发指令实现数据采集及系统控制,并将数据实时地传回计算机。
关键词:
数字钟、数码管显示、定时计数器
Abstract:
Thispaperdescribesthedesignofamulti-functionddigitalclocksystem.Itasdisplayingandsettingtimeforclockandalarm,thissystemhasotherspecialfeaturessuchasdataprotectionatpowerfaillure.ThecorepartofthesystemisbasedonakingofadvancedMCU,AT89C52,thissystemmainlycarriesonlowpowerconsumeMCUthecharacterlisttypetheresearchofthedigitalclockanditssystemaccordingtotheAT89C52.Thesystemtakesliquidcrystaldisplay,matchingwithakeytoprovideamityofcustomerinterface,theoperationissimple,consecution,credibility,stablework;Stillhaveaphysicalvolumeinthemeantimesmall,thepowerconsumealowetc.characteristics,easytotake,theusageconvenience.Thesystemsoftwaredesignincludesasinglesliceaplaitdistancewithtwopartsofmachinecalculator.Thecalculatorsoftwareplaitdistancemainlycarriesoutaparameterconstitution,stringtogoapeople'sdatatoreceive,theinstructionsendoutanddataofmanifestationwithsaving,theadoptionVisualBasic.
Thatsystemgoesandcalculatorcorrespondencethroughastring,thecalculatorgivesingleslicemachinehairtheinstructioncarryoutadatatocollectandthesystemcontrol,andissolidthedatathegroundsendbackacalculator.
Keywords:
digitalclock,LCD,Alarm,
引言
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
目录
1方案论证6
1.1方案
(一)6
1.2方案
(二)6
2单片机设计的基本原理6
2.1软件时钟的基本原理6
2.2系统硬件电路的设计7
2.3.1主程序7
2.3.2数码管显示模块9
2.3.3定时计数器中断服务程序9
2.3.4按键处理模块9
3扩展功能9
4程序清单9
5元器件清单及功能介绍14
5.1元器件清单14
5.2元器件介绍15
6过程分析和结果15
6.1软件调试15
6.2硬件调试15
结束语16
1.对本课程的学习体会16
2.学习本课程后,希望增加的内容。
16
3.对代课老师的教学有何评价,并提出教学建议。
16
参考文献17
1方案论证
这次课程设计的题目是数字钟,对于这次课设,根据设计要求我们的方案有:
1.1方案
(一)
通过单片机内部的定时/计数器。
采用软件编程实现时钟计数,这种方法硬件线路简单,系统的功能与软件设计相关,通常用在对时间精度不高的的场合。
1.2方案
(二)
采用时钟芯片,它的功能强大,功能部件集成在芯片内部,自动产生时钟等相关功能。
硬件成本相当较高,软件编程简单。
通常用在对时间精度较高的的场合。
考虑到做出来的东西具有实用性,所用的集成片尽量少,成本尽可能的低,连接线路尽可能的简单,方便好用。
我们做的数字钟是采用方案一,采用C语言编程,主要采用集成片AT89C52和74LS08完成了此次设计。
2单片机设计的基本原理
2.1软件时钟的基本原理
软时钟是利用单片机内部的定时/计数器来实现的,它的处理过程如下:
首先设定单片机内部的一个定时/计数器工作于定时方式,对及其周期计数形成基准时间(若10ms),然后用另一个定时/计数器或软件计数的方法对基准时间计数形成秒(对10ms计数100次),秒计60次形成分,分计60次形成时,时计24次则计满一天。
然后通过数码管把它们的内容在相应的位置显示处理即可。
本设计数码管采用动态显示方法,线路相对简单,但需动态扫描,扫描频率要大于人眼视觉暂留频率(每秒24次),信息看起来才稳定。
译码方式可分为软件译码和硬件译码,软件译码通过译码程序查得显示信息的字段码;硬件译码通过硬件译码器得到显示信息的字段码,实际中通常采用软件译码。
在具体处理时,定时计数器采用中断方式工作,对时钟的形式在中断服务程序中实现。
在主程序中只需对定时计数器初始化、调用显示子程序和控制子程序。
另外,为了使用方便,设计了简单的按键,可以通过按键实现时、分的调整,这样在主程序中就加入了键盘设置子程序。
2.2系统硬件电路的设计
本系统的硬件主要包括单片机芯片、数码管显示、按键开关等电路,他的硬件电路如图2.1所示,单片机采用应用广泛的AT89C52,系统时钟采用12MHZ的晶振,3个数码管显示,采用共阳极七段式数码管,P0口为选码输出端,P2口为位选码输出端,按键开关设定了四个,通过P1口相连。
图2.1
2.3系统软件程序的设计
2.3.1主程序
主程序执行流程如图2.2所示,主程序先对显示单元和定时计数初始化,然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应的功能程序。
否
否
是
否
是
否
否是
是
图2.2主程序流程图图2.3定时/计数器T0中断服务程序流程图
2.3.2数码管显示模块
本系统共用6个数码管,从右到左依次显示秒个位,秒十位,分个位,分十位,时个位,时十位。
数码管显示的信息用6个内存单元存放,这6个内存单元称为显示缓冲区,其中秒个位和秒十位,分个位和分十位,时个位和时十位分别由秒数据,分数据和时数据分拆得到。
在本系统中数码管显示采用软件译码动态显示。
2.3.3定时计数器中断服务程序
定时计数器用于时间计时。
选择方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中,用一个定时计数器对50ms进行计数,计20次则对秒单元加一,秒单元加到60则对分单元加一,同时秒单元清零;分单元加为60则对时单元加一,同时分单元清零;时单元加到24则对时单元清零,标志一天时间计满。
在对各单元计数的同时,把他们的值放到存储单元的指定位置。
定时计数器T0中断服务程序如图2.3所示:
2.3.4按键处理模块
按键处理设置为:
没有按键时,时钟正常走时;当按下K0按键时,进入选择状态,时钟停止走时;按K1或K2按键可进行加一或减一操作;继续按K0键可分别进行时、分和秒的调整,最后按K3键将退出调整状态,时钟开始计时运行。
3扩展功能
该数字钟的扩展功能为整点报时,每到59分59秒时开始报时一声。
任意定一时间,到达所定时间发光二极管点亮。
4程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP1_3=P1^3;
sbitP1_7=P1^7;
sbitP1_6=P1^6;
typedefstruct
{ucharhour;
ucharminute;
ucharsecond;
}time;
timenow={0,0,0};
timedingshi={0,0,0};
ucharcodenum_tab1[]={0x80,0x40,0x20,0x10,0x08,0x04};
ucharcodenum_tab2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极显示
ucharstate=0;
ucharcount=100;
ucharflag=0;//调整时间/定时的标志
ucharrecount=0;
ucharrecount1=0;
voiddelay(uinttime1)//延时子程序
{
inti;
intk;
for(i=0;i for(k=0;k<100;k++); } voiddisplay(timedisnum)//显示子程序 { inthour_shi,hour_ge,min_shi,min_ge,sec_shi,sec_ge,i; intnum[6]={0,0,0,0,0,0}; hour_shi=disnum.hour/10; hour_ge=disnum.hour%10; min_shi=disnum.minute/10; min_ge=disnum.minute%10; sec_shi=disnum.second/10; sec_ge=disnum.second%10; num[0]=hour_shi; num[1]=hour_ge; num[2]=min_shi; num[3]=min_ge; num[4]=sec_shi; num[5]=sec_ge; for(i=0;i<6;i++) { P2=num_tab1[i]; P0=num_tab2[num[i]]; delay (1); } } voiddisplay_1(ucharwei,uchark)//显示子程序1 { ucharwei1,wei2; wei1=wei/10; wei2=wei%10; P2=num_tab1[k]; P0=num_tab2[wei1]; delay (1); P2=num_tab1[k+1]; P0=num_tab2[wei2]; delay (1); } voidinterrupt_init(void) { EA=0; TMOD=0x01; TH0=0xd8; TL0=0xf0; IT0=1; ET0=1; EX0=1; EA=1; TR0=1; } voidinterrup0(void)interrupt0using3 { uchari=0; delay (1); if(P1_0==0)//调时 { if(flag==1)//定时的调节 { state++; if(state==9) {state=0;} } else { TR0=0; state++; if(state==4) { state=0; TR0=1; } } } if(P1_1==0)//加 { switch(state) { case0: break; case1: { now.hour++; if(now.hour==24) now.hour=0; break; } case2: { now.minute++; if(now.minute==60) now.minute=0; break; } case3: { now.second++; if(now.second==60) now.second=0; break; } case4: break; case5: { dingshi.hour++; if(dingshi.hour==60) dingshi.hour=0; break; } case6: { dingshi.minute++; if(dingshi.minute==60) now.minute=0; break; } case7: { dingshi.second++; if(dingshi.second==60) dingshi.second=0; break; } case8: break; } } if(P1_2==0)//减 { switch(state) { case0: break; case1: { if(now.hour==0) now.hour=23; else now.hour--; break; } case2: { if(now.minute==0) now.minute=59; else now.minute--; break; } case3: { if(now.second==0) now.second=59; else now.second--; break; } case4: break; case5: { if(dingshi.hour==0) dingshi.hour=23; else dingshi.hour--; break; } case6: { if(dingshi.minute==0) now.minute=59; else dingshi.minute--; break; } case7: { if(dingshi.second==0) dingshi.second=59; else dingshi.second--; break; } case8: break; } } if(P1_3==0)//定时/取消定时 { if(flag==0)//定时 { flag=1; state=4; } else//取消定时 { flag=0; state=0; dingshi.hour=0; dingshi.minute=0; dingshi.second=0; } } } voidinterrup1(void)interrupt1using3 { TR0=0; TH0=0xd8; TL0=0xf0; TR0=1; if(count==0) { count=100; now.second++; if(now.second==60) { now.minute++; now.second=0; if(now.minute==60) { recount=(now.hour+1)*2;//整点提示 now.hour++; now.minute=0; if(now.hour==24) { now.hour=0; } } } if(flag==1) { if(dingshi.hour==now.hour&&dingshi.minute==now.minute&&dingshi.second==now.second) recount1=18; } if(recount! =0) { P1_7=~P1_7; recount--; } else {P1_7=0;} if(recount1! =0) { P1_6=~P1_6; recount1--; } else {P1_6=0;} } else { count--; } } voidmain(void) { ucharj=0; flag=0; interrupt_init();//中断初始化 P1_6=0; P1_7=0; while (1) { switch(state) { case0: display(now);break; case1: display_1(now.hour,0);break; case2: display_1(now.minute,2);break; case3: display_1(now.second,4);break; case4: display(dingshi);break;//显示定时初值00: 00: 00 case5: display_1(dingshi.hour,0);break; case6: display_1(dingshi.minute,2);break; case7: display_1(dingshi.second,4);break; case8: display(dingshi);break;//显示定时时间 } } } 5元器件清单及功能介绍 5.1元器件清单 序号 名称 数量 元器件说明 1 AT89C52单片机 1个 2 晶振 1个 12MHZ 3 数码管 6个 共阳极 4 电阻 6个 510Ω 5 电容 2个 30pf 6 开关 4个 7 发光二极管 1个 8 三极管 1个 NPN型 9 与门 3个 74LS08 5.2元器件介绍 AT89C52芯片的内部结构及引脚 (1)电源及时钟引脚(4个) VCC: 电源接入引脚; VSS: 接地引脚; XTAL1: 晶体振荡器接入的一个引脚(采用外部振荡时,此引脚接地) XTAL2: 晶体振荡器接入的另一个引脚(采用外部振荡时,此引脚作为外部振荡信号的输入端)。 (2)控制线引脚(4个) RST/VPD: 复位信号输入引脚/备用电源输入引脚 ALE/PROG: 地址锁存允许信号输出引脚/编程脉冲输入引脚; EA/VPP: 内外存储器选择引脚/片内EPROM(或FLASHROM)编程电压输入引脚; PSEN: 外部程序存储器选通信号输出引脚。 (3)并行I/O引脚(32个,分成4个8位口) P0.0—P0.7: 一般I/O口引脚或数据/低位地址总线复用引脚; P1.0—P1.7: 一般I/O口引脚; P2.0—P2.7: 一般I/O口引脚或高位地址总线引脚; P3.0—P3.7: 一般I/O口引脚或第二功能引脚。 6过程分析和结果 6.1软件调试 在调试中遇到了很多问题。 刚开始将程序输入后,无法执行。 发现很多处错误,而使程序无法执行。 改正后,重新执行程序。 可以正确的显示时间。 但当达到整点时,时钟不能正常报时。 按Ctrl+C退出后,检查程序。 经仔细分析,发现报时子程序出错;及时修改之后,程序调试正确。 在单片机仿真软件运行后,数码管从左至右按照“时: 分: 秒”的格式显示“XX: XX: XX”,并且秒位以每秒递增1的速度变化,即完成数字电子钟的正常显示。 并到达整点时进行长达1秒的报时;到达定时时间后发光二极管点亮。 6.2硬件调试 焊接电路完成后,将程序烧入AT89C52芯片中,插入5V电源后调试,无现象出现。 我们仔细检查电路后发现有几处电路连接错误,经重新接线后再次调试时间正常走时,扩展功能报时不能正常运行。 结束语 1.对本课程的学习体会 通过本次课程设计,我们进一步理解了所学的相关可编程芯片的原理、内部结构、使用方法等,学会了相关可编程芯片实际应用以及编程的方法。 在老师的指导帮助下,顺利完成了该硬件、软件的设计、调试等工作。 通过课程设计,我有了很大的收获。 在调试程序过程中,使我们的编程与调试程序的能力得到了锻炼,同时理解了汇编、计算机所组成原理以及接口技术这三门课程之间的联系与融合渗透,也使我体会到学习计算机接口技术的乐趣。 2.学习本课程后,希望增加的内容。 希望老师能给我们讲解更多有关单片机的知识,对各种片子的功能做更广泛的讲解,不要只讲它的少部分功能,在平时的课堂练习中对片子的功能测试应多样化,不该只测试单一的片子管脚接法。 在课堂上更多的涉及与当今社会有关的知识。 3.对代课老师的教学有何评价,并提出教学建议。 评价: 在平时的课堂上潘老师给了我们一堂又一堂的精彩讲解,不仅教给了我们许多书本上的知识,同时也教会了我们如何做人做事,在我们枯燥无味的学习生活中增添了不少乐趣。 潘老师的耐心也令人感动,一次不会讲两次,两次不会讲三次,从没有厌烦的表情。 教学建议: 建议老师不要太过相信我们的能力,毕竟我们都是刚接触这些实物性的东西,有很多问题都不太了解,希望老师应多指导一下课设类的题目,避免我
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电子
![提示](https://static.bdocx.com/images/bang_tan.gif)