单片机电子时钟_第1页
单片机电子时钟_第2页
单片机电子时钟_第3页
单片机电子时钟_第4页
单片机电子时钟_第5页
已阅读5页,还剩15页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理与应用课程设计课题名称:数字时钟的设计与实现班级:08电子信息工程学号:指导教师:華戎;H衣和畸馅信息工程系题目:数字时钟的设计与实现一. 功能要求:1. 用单片机和6位LED数码管显示时、分、秒,实现从00时00分00秒23时59分59秒循环运行。2. 用按键实现时、分、秒的调整。3. 整点提醒:0、1、223和短蜂鸣。4. 省电功能:关闭显示。5. 定时设定提醒:时间到时发出五次蜂鸣声6. 秒表功能:显示XX分XX秒XX按“复位”键:显示00分00秒00;按“启动”键:从00分00秒00开始计时按“停止”键:显示实际计时XX分XX秒XX。二. 硬件设计要求:1. 用伟福6000实

2、验装置上8255的A 口作显示段码锁存器,B 口 作位码锁存器,利用发的实验器材6位LED数码管显示时、分、秒。2. 利用伟福6000实验装置上8255的B 口的6根位码输出线和 8255C 口中的PC0作按键的输入口线,实现最多6个按键的识别,作 为实现上述功能要求的硬件保证。3. 伟福6000实验装置上提供给该课题的硬件是:AT89C51单片 机(包括P1 口、P3 口)、8位可编程並行I/O 口 8255 (包括A 口、B 口、CD)、地址译码电路、蜂码器及直流电源。4. 本次设计提供给各组的器材有:(1) 印刷电路板一块(2) 7406集成电路3片(3) LED数码管6个(4) 1K排

3、阻2个,4.7K电阻一个。(5) 40芯IC插座2个、14芯IC插座3个(6) 按键6个(7) 焊锡、导线若干。三. 软件设计(仅供参考):1. 主程序流桎图主程序流程2. 显示子程序的设计:(1) 采用十进制BCD(2) 显示缓冲区的分配(3) 要显示的数据送显示缓冲区(4) 把显示的数据置换出段码(5) 送段码和位码,进行显示(6)延时1Y显示子程序流程图3. 定时中断服务子程序的设计(1) 利用定时器TO定时10毫秒,累计到1秒时秒计数加1,累 计到60秒时分计数加1,累计到60分时时计数加1,累计到24小时 从头开始。(2) 注意保护现场和恢复现场(3) 注意设置毫秒、秒、分、时的存放

4、单元四、软件仿真仿真部分由Protues实现。Protues可以嵌入单片机的二进制代码,便于程序调试。本 次仿真的电路图如下所示:其中,按键为输入电路,为行列式设计,行线接入8255芯片的PC0 口,列线分别对应 接入8255芯片的PB0B3 口,与数码管的位选线共享端口。数码管为输出电路。本次实验一共要使用6个数码管,以动态显示方式轮番输出字符, 6个数码管的段码线相互并联后接入8255芯片的PA端口,a、b、c、d、e、f、g端口分别 连接PA0PA6端口,在8255芯片引脚和段码线之间分别一一串联7406芯片、并联一个排阻 以提供激励,使数码管发亮。位选线则以数码管的接地线组成,从时十位

5、、时个位、分十位、 分个位、秒十位、秒个位分别接入8255芯片的PB0PB5端口,其中PB0PB3这四个端口分 别并联上四个按键。同理,每个引脚和8255芯片之间都一一串联上7406芯片和并联上排阻。 位选线负责选取某一时间片要显示哪一个数码管,显示间隔由源程序决定。五、焊接本次实验由于没有提供8051芯片、8255芯片。上述芯片均由伟福实验箱提供,焊接的 时候需要在万用板上面预留PA、PB接线口。另外,万用板上面同时需要预留电源的正负极、 PC0 口接线,共计17个接线口。由于万用板的大小的限制及芯片引脚定义的影响,实际上的电路图不会和仿真软件的 电路图完全一致,不过大体上还是一样的。还有,

6、本次焊接实际上需要比较多的电线,尤其是数码管部分,由于相邻引脚非常贴 近,在焊接的时候要非常留心,谨防相邻两点短路。在焊接完成后,由于背板上面线路众多,需要用胶纸固定整理,防止导线脱落。焊接完成后,万用板上面已经有相应的接线,于是进行硬件实现部分。六、硬件实现本次硬件实现部分由伟福Lab6000实验箱提供8051芯片和8255芯片,分别连接万用 板相应的接线。由伟福的Wave6000软件向实验箱上面的8051芯片烧入时钟的程序。另外, 电源的正负极也是由Lab6000提供。电路板中有6个按键,不过实际上使用的有4个,就是离PA、PB连接端口较远的4个 起作用,离PA、PB连接端口较近的两个没有

7、定义。从远离端口的按键开始依次编号KI、K2、 K3、K4,每个按键都有如下功能:1)当先按K1的时候,系统就进入调节时间状态,数码管上就显示时钟。K2、K3、K4 的功能依次为选择调整的单元(时、分、秒),单元数值加1,退出调整状态,单元 数值减1;2)当先按K2的时候,系统不作出任何反应,等待用户按KI、K3、K4;3)当先按K3的时候,系统就进入省电模式,数码管熄灭,然后按KI、K2、K3、K4任 意一键即可点亮数码管并还原到上次的显示状态;4)当先按K4的时候,系统就进入秒表状态,数码管上面就显示秒表。KI、K2、K3、 K4的功能依次为切换至时钟、显示暂停变化(部继续计时)或者数码管

8、继续变化、 复位清零、暂停计时。七. 程序ORG0000HAJMPMAINORGOOOBH:TO的中断入口AJMPI TOPMAIN :MOVSP.#7OH:设置堆栈MOV36H.#00H;秒MOV37H.#00H;分MOV38H.#00H;时MOV43H冲99H;给闹钟一个初值MOVA.#89H;工作方式MOVDPTR,#0FF7FHMOVXDPTR.A;工作方式MOVTM()D,#O1II:设T0为方式1MOV39H.S100;装入中断次数SETBETO;允许TO申请中断SETBEA:总中断允许MOVTH0.S0D8H;给T0装入计数初值MOVTLO.ttOFOHSTART:SETBTRO

9、:启动T0MOV3AH.#36H;给数据处理一个初值所有程序如下所示初始状态LCALLDATAT:数据处理LCALLDISPLAY:显示MOVA.38H,判断阑钟的时CJNEA.43H.KEYI:不相等就跳MOVA.37H:判断闹钟的分CJNEA.42H.KEYIMOVA.36H:判断阑钟的秒CJNEAt41HtKEYICLRP1.0:启动蜂呜KEY I: LCALLKS1,判断有没键按下判断键按下?JZLK1:有按下,是抖动?LJMPSTART:回主程序LK1:LCALLDIR;停一下防抖动LCALLDIRLCALLKS1:再检查有没钱按下JZLK2:有按下则扫描并处理LJMPSTART回主

10、程序LK2:ACALLLK扫描镀扫描MOV4OH.#OOH:按镀次数LK3:LCALLKS1:是否松手松手检测JZLK3MOVA.3DH:扫描得来的键位Acc.O.CHTIMEI;从左到右数键1调时主菜单Acc. 1.CLOCKI闹钟Acc.2.SAVEI省电Acc.3.WATCHI秒表LJMPSTARTCHTIMELLJMPCUTIME;调时入口地址CLOCKI :LJMPCLOCK:阑钟入口地址SAVEI :LJMPSAVE:省电入口地址WATCHI :LJMPWATCH;秒表入口地址CUTIME: CLRTRO:暂停时钟时钟调时功能MOV3AH.#36H:给数据处理一个初值LCALLDA

11、TAT;数据处理LCALLDISPLAY:显示LCALLKS1:判断有没镀按下判断縫按下?JZLK4:有按下,是抖动?LJMPCUTIME:返回调时LK4:LCALLDIR;停一下调时防抖动LCALLDIRLCALLKS1:再检查有没键按下JZLJMPLK6CUTIME:有按下则扫描并处理:返回调时LK6:LCALLLK;扫描键LK5:LCALLKS1;是否松手JZLK5MOVA.3DH;扫描得来的镇位Acc.O.XUANW :从左到右数铁1选位调时菜单Acc.1.ADDBCD ;加1Acc.2.OUT;退出Acc.3.SUBCD ;减1LJMPCUTIME;返回调时XUANW:MOVA.83

12、6H:选位的初值调时选位INC4OH:累加偏務量ADDA. 4011CJNEAt#39H.CHTIME:判断是否选位过度OUT:LJMPSTART:回主程序调时退出ADDBCD:MOVA.836H;操行位初值调时加1ADDA.40H:求出操作位MOVRO. AINCRO;+1LJMPCUTIME;返回调时SUBCD:MOVA.836H:操行位初值调时减1ADDA.40H:求出操作位MOVRO. ADECRO;-1LJMPCUTIME:返回调时CLOCK:MOV41H冲OOH:阑钟初值闹钟功能MOV42H,#00HMOV43H.#00HCLOCK1:MOV3AH,#41H:给数据处理一个初值LC

13、ALLDATAT;数据处理LCALLDISPLAY:显示LCALLKS1:判断有没键按下判断縫按下?JZLK14:有按下,是抖动?LJMPCLOCK1:返回阑钟LK14:LCALLDIR;停一下闹钟防抖动LCALLDIRLCALLKS1;再检查有没镀按下JZLK16;有按下则扫描并处理LJMPCLOCK1:返回闹钟LK16:LCALLLK;扫描键LK15:LCALLKS1;是否松手JZLK15MOVA.3DH:扫描得来的钺位Acc.O.XUANWl ;从左到右数皱1选位闹钟菜单Acc.1.ADDBCD1 ;加1Acc.2.OUTl;退出Acc.3.SUBCD1;减1LJMPCLOCK1:返回阑

14、钟XUANW1:MOVA.#41H:选位的初值闹钟选位INC4OH:累加偏移量ADDA. 4011:判断是否选位过度CJNEA.#44H.CLOCK1:返回闹钟0UT1:LJMPSTART;回主程序闹钟退出ADDBCD1:MOVAt#41H;操行位初值闹钟加1ADDA.40H;求出操作位MOVRO. AINCRO;+1LJMPCLOCK1:返回阑钟SUBCD1:MOVA.#41H;操行位初值调时减1ADDA.40H:求出操作位MOVRO. ADECRO;-1LJMPCLOCK1:返回阑钟SAVE:MOVA,#0FFH:段码置1省电功能MOVDPTR#0FF7CHMOVXDPTR.A黑屏省电LC

15、ALLKS1;判断有没键按下判断键按下?JZLK24:有按下,是抖动?LJMPSAVE:返回省电LK24:LCALLDIR:停一下省电防抖动LCALLDIRLCALLKS1:再检查有没键按下JZLK25:有按下则扫描并处理LJMPSAVE:返回省电LK25:LCALLKS1:是否松手松手检测JZLK25LJMPSTART:回主程序省电退出WATCH:MOV44H冲OOH秒表初值秒表功能MOV45H.#00HMOV46H.#00HGOO:MOVA.45H继点和暂停的保存MOV49H.AMOVA.46HMOV4 AH. AMOVA.44HMOV48H.ACJNEA.#100.STOP是否到1秒,未

16、到则返回MOV44H.#00H脉动淸0INC45H增加秒MOVA.45HCJNEA.#60.STOP是否到60秒,未到则返回MOV45H.#00H秒单元清0INC46H增加分STOP:MOV3AH冲44H给数据处理一个初值LCALLDATAT数据处理LCALLDISPLAY显示LCALLKS1判断有没键按下判断键按下?JZLK34有按下,是抖动?LJMPGOO返回秒表LK34:LCALLDIR停一下防抖动LCALLDIRLCALLKS1再检查有没镀按下JZLK36有按下则扫描并处理LJMPGOO返回秒表LK36:LCALLLK扫描键LK35:LCALLKS1是否松手JZLK35MOVA.3DH

17、扫描得来的镀位Acc. 1J10LD0N ;从左到右数皱2继点秒表菓单Acc.2.WATCH ;秒表复位Acc.3.STOP! ;连续晳停OUT3:LJMPSTART回主程序秒表退出GOON1:MOV3AH冲44H给数据处理一个初值秒表连续LCALLDATAT数据处理MOVA.45H继点和连续暂停的保存MOV49H.AMOVA.46HMOV4 AH. AMOVMOVA.44H48H.AST0P1:MOVA.14H秒表暂停CJNEA.ttlOO.GOON:是否到1秒,未到则返回MOV44H,tM)0H;屎动清0INC45H;增秒MOVA.45HCJNEA. MO. GOON;是否到60秒,未到则

18、返回MOV45H.800H;秒单元清0INC46H;增分GOON:LCALLDISPLAY;显示LCALLKS1;判断有没键按下判断键按下?JZLK44;有按下,是抖动?LJMPSTOP I:返回秒表暂停LK44:LCALLDIR;停一下防抖动LCALLDIRLCALLKS1:再检查有没镀按下JZLK46;有按下则扫描并处理LJMPSTOP!;返回秒表暂停LK16:LCALLLK;扫描键LK45:LCALLKS1:是否松手JZLK45MOVA.3DH;扫描得来的镀位Acc. LHOLDON从左到右M2继点(秒表之连续暂停菜单)Acc.2.WATCHl复位Acc.3.GOON1连续皙停之连续暂停

19、LJMPSTART退出WATCH1:LJMPWATCH:连续暂停的秒表复位HOLDON:MOVA.48H:把保存值放回秒表秒表继点MOV44H.AMOVA.49HMOV45H.AMOVA. 4 AHMOV46H.ALJMPGOO;返回秒表KS1:MOVDPTR.#0FF7DH:给PB送0;子程序之测键按下否MOVA.#03FHMOVXDPTR.AINCDPTR;到 PC 口MOVXA.DPTR;取PC值ANLRETA.#01H:只取第一位;返回LK:MOVA.820H;给初始位选码;子程序之扫描键LK9:MOV3DH.A:保存位选码MOVDPTR.#0FF7DHMOVXDPTR.A;位选码给P

20、B 口INCDPTR;到 PC 口MOVXA.DPTR;把PC给AJNBAcc_0.LK8;扫到纔就跳MOVA.3DH;恢复位码RRA:右移CJNEA.#7FHLK9;扫了 6次?LK8:MOVA.3DH:恢复位选码RET:返回DATAT:MOVRO.3AH;子程序之数据处理MOVA. ROMOVB.#1ODIVABMOV30H.BMOV31H.AINC3AHMOVRO.3AHMOVA. ROMOVB.#1ODIVABMOV32H.BMOV33H.AINC3AHMOVRO.3AHMOVA. ROMOVB.#1ODIVABMOV34H.BMOV35H.AI) I SPLAY: MOVA.#20H

21、;初始化;子程序之显示MOVRO.H3OH:昱示初地址ldO:MOV3BH.A;保存位选MOVDPTR#0FF7DHMOVXDPTR.A;位选码给PB 口MOVA. ROMOVDPTR.ttTAB:取表地址MOVCMOVMOVXMOVA.A+DPTRDPTR#0FF7CHDPTR,A3CH.#OFFH;查表;段选给PA;显示的延时dell:DJNZ3CH,dellINCROMOVA.3BH:恢复位选RRAJNBAcc.7.1dO;判断是否显示了 6次RET:返回DIR:MOV3EH冲OAH;子程序之廷时DIRl:MOV3FH,#0F0HDIR2:DJNZ3FH.DIR2DJNZ3EH.DIR1

22、RET:返回TAB:DB0C0H.0F9H.OA4H,0B0H.99H;LED的宇模I)B92H.82H.0F8H.80H.90H;01234567891T0P :PUSHA;保存A;时钟中断MOVTH0.S0D8H:重装初值MOVTL0.30F0HINC44H溉动DJNZ39H.RETURN;1秒未到返回MOV39H.#100:重置中断次数INC36H:增加秒MOVA. 3611CJNEA.#60.RETURN;是否到60秒,未到则返回MOV36H.#00H:秒单元清0SETBP1.0:停蜂呜INC37H;增加分MOVA.37HCJNEA.#60.RETURN;是否到60分.未到则返回MOV

23、37H.t;00ll:分单元清0CLRP1.0;整点蜂呜INC38H;增加时MOVA.38H:恢复A中的时CJNEA.#24.RETURN:是否到24时,未到则返回MOV38H.S00II:时单元清0RETURN:POPA:恢复ARET I:中断返回END八、心得感想XXI (电路图):电路图的时候其实也并非简单,为了焊接方便,在了解了电路原理以后,我 需要多次重新排版,一次次地连线,然后将每次重新排版的电路图保存 下来比较,最后才得出最简单的连接图。XX2 (焊接):我觉得焊接最首先要做的就是了解芯片的用途,引脚,把电路图看明白,大体 回路怎样连线有个谱,怎样编排电路元件才使焊接最容易,这都

24、要对引脚 的接法熟悉才行,在焊接时每一步都很重要,我都先会把芯片和数码管的 反面图画出来,先找引脚,然后用线连起来,焊接时我最怕两条回路的焊 锡连在一起,焊接时我经常把锡焊的太大块以至产生不少错误,不过一熟 悉了就会比较快了,不过一焊久了,就会感到烦,特别是焊错时,所以我 觉得焊接时心态很重要,这也让我明白做事要认真,特别是我们这个专业, 耐心要很好,哪怕错了都要慢慢找,直到纠正过来,虽然过程很辛苦,但 焊好那一刻真的感到很满意,因为毕竟是自己做的。XX3 (焊接):做了焊接以后,我发现动手能力完全不同于平时的课本学习体验的,是一种实 践。有助于对理论知识的理解。而在操作过程中,熟悉了就能生巧

25、。XX杰(软件):一程序的基础程序的基础很重要。程序的基础是指程序中所包含的子程序和中断程序。写一个程序通 常要从基本的做起然后不断地累加上去。每加一层,都要以之前的为基础。所以如果之前的 是正确的,但现在不正确,那就容易显现出问題,方便修改。如先写显示,再写显示时钟, 接着写按键测量和扫描,最后才是功能的实现。每更加一种,我都会确保之前的为正确。所 以程序的基础很重要。这个程序的基础包括有数据处理,显示程序,按键检测,按键扫描,延时程序还有时钟 的中断。虽然程序中防抖动和松手检测没有写成子程序,但也是程序的基础。数据的处理。这个我先后重写了 3次。每次都以不同方式来处理数据。当然,每一次的

26、重写,我都产生了新的处理方法,而且简化了处理,重点是处理要的是灵活性和通用性。处 理数据的程序不是固定只处理几个存单元。处理数据的程序具有相当的灵活性。它可以随着 给出初值的不同,而改变所要处理的区域,从而得出不同而又所需的数据。这对后来秒表的 数据处理和秒表部功能影响很大。所以数据处理的方式是整个程序的核心。显示程序。显示程序与数据处理的原理很不同。显示程序要的是固定的存单元才具有通 用性。而在固定的存单元中体验出灵活性就需要数据处理的带动。数据处理完了,就会绐固 定的单元传送数值。显示程序通过对数值的识别,进而显示出不同的数字。通常检查一般的 错误,就从LED的显示中得出,从而再进行相应的

27、措施。所以显示程序是整个程序的基础。按键检测是一个调用得最频繁的子程序。是判断是否有键按下的子程序。所以也是一个 相当基础和重要的程序。这是按键扫描前提,是防抖动和松手检测的重要组成部分。按键扫描是判断按了哪个键,从而选择进入不同功能的操作。它是控制程序流向的关键。 所以它所找出的值都要用一个存单元来存敖,防止丢失。延时程序是用来敖在防抖动当中的,为了区别抖动与按下的重要手段。防抖动是由两个按键检测和一个延时程序来实现的(当然少不了包括跳转)。防抖动是 在现实环境中必需的,所以也必需写上去。松手检测只是一个按键检测(当然少不了包括跳转)。它是判断按了几次的重要部件。 没有它,程序根本没法判断是

28、按了几次,更不能判断应该跳到哪个程序入口。时钟的中断是时钟和秒表的动力”。是数据的来源。是开始的开始。二程序具用的功能程序的主体功能有整点蜂鸣,调时,闹钟,省电,秒表。整点蜂鸣这个是在整个程序中占用语句最少的一个功能。它主要实现的是到整点时蜂 鸣。那么我顺着它的意思,把它寄放在时钟中断中。当时加一时,蜂鸣自动启动,当过一分 钟蜂鸣自动消除。调时。是第一个要通过按键来实现的功能。所以要想实现调时,前提是程序的基础必需 正确。而调时所包括的分功能有选位,加1,退出,减1。它是通过调整存储时间的存单元 的值来实现的。它是K1键。1选位。进入调时功能后,选位键才被激活。它和调时一样都是K1键、当进入调

29、时时, 默认是改变秒的位。如果选位键被按下一次,就会变为改变分的位;按下两次,就会变为 改变时的位;按下三次就默认完成凋时并退出调时返回主程序。这是由40H单元来存放按了 几次,并相应求出要选位的存单元。2加进入调时功能后,加1键才被激活。它是K2键,它是使选中的位相应加1。3退出。进入调时功能后,退出键才被激活。它是K3键,它是从调时中快速返回到主 程序的出口。换句话说就是可以调整到一半就可以返回主程序,不必等选位完成。4减1。进入调时功能后,减1键才被激活。它是K4键。它是使选中的位相应减1。闹钟。闹钟原理与调时原理相似。都是改变某些存单元的值。不同的是,这些被改变 的值是固定用来和时钟的值作比较的。当数值相同时就激发蜂鸣。可以通过调整闹钟设定的 秒数来控制蜂鸣时间的长短。而闹钟所包括的分功能有选位,加1,退出,减lo它是K2 键1透位。进入闹钟功能后,选位键才被激活。它是K1键、当进入闹钟时,默认是改变 秒的位。如果选位键被按下一次,就会变为改变分的位;按下两次,就会变为改变时的位; 按下三次就默认完成闹钟并退出闹钟返回主程序。这也是由40H单元来存放按了几次,并相 应求出要选位的存单元。2加1。进入闹钟功能后,加1键才被激活。它是K2键,它是使选中的位相应加1。3退

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论