ImageVerifierCode 换一换
格式:DOC , 页数:21 ,大小:253.31KB ,
资源ID:849993      下载积分:20 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 微信支付   
验证码:   换一换

加入VIP,免费下载资源
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.wodocx.com/d-849993.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(智能电子时钟的设计.doc)为本站会员(管**)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(发送邮件至2622162128@qq.com或直接QQ联系客服),我们立即给予删除!

智能电子时钟的设计.doc

1、微处理器综合设计实践报告题目: 智能电子时钟的设计 院系: 电子与信息工程学院 专业: 电子科学与技术 年级 姓名: 学号: 指导老师: 一、课程设计目的: 综合应用所学的微处理器原理,汇编语言及相关硬件知识,设计一个具有一定功能的电路。熟练掌握仿真器和编程器的使用。二、课程设计要求: 在面包板上搭建好硬件电路。以单片机为核心器件,组成一个电子时钟系统。系统显示用4位7段LED显示器,显示当前时间的小时和分。能够通过按键实现对当前时间的调整,系统时间到整点后能够通过蜂鸣器报时,时间为1s;能通过按键设置闹钟时间,闹钟时间到后,通过蜂鸣器报时。三、系统组成与工作原理: 1、电路原理图 2、工作原

2、理(1) 设计原理及思路本课程设计要求以AT89C52单片机为核心器件,组成一个电子时钟系统。我们可以利用单片机自带的定时器功能来进行定时,再通过一些软件编程来构造出一个时钟,同时也可以利用软件的编程来实现所要求的其他功能。通过四个按键开关来控制电子时钟的工作模式。KEY1、KEY2分别对应时钟的调时和调分。KEY3可以设置闹钟,进入闹钟模式后,KEY1、KEY2将转变成闹钟的调时和调分键。此外,当按下KEY4就可以进入秒表模式,进入秒表模式以后,KEY1可以控制秒表的开始于暂停,KEY2可以对秒表清零,再次按下KEY4键便退出秒表模式。程序运行时主程序一直在循环查询各按键的状态,并将当前时间

3、与闹钟设定时间不断进行比较,如果时间相同则响铃,同时通过动态显示的方式将相应的时间显示在数码管显示器上。与此同时,整个过程中时钟的时间都是由单片机的定时器进行计时的。单片机的P0口负责输出段码,P2.0P2.3对应四个数码管的位选端,分别为数码管1号、2号、3号、4号(由右至左编号);P1.0对应蜂鸣器;P2.4P2.7对应四个按键4、3、2、1(由上至下编号)。各个分电路:a. 蜂鸣器电路当P1.0为低电平时,三极管导通,蜂鸣器开始工作b. 上电复位电路在通电瞬间,电容C通过电阻R20充电,RST端出现正脉冲,用以复位。只要接通电源就完成了系统的复位初始化。c. 振荡电路此处晶振为12MHz

4、,提供单片机的时钟频率。晶振频率越高,单片机运行速度越快。d. 数码管显示电路P0口连接上拉电阻(排阻),用万用表测试得数码管为共阳极。当P2.3P2.0口输出低电平时,三极管导通,所对应的数码管显示;因为共阳极,所以P0口为低电平的端口所对应的段码显示。e. 按键电路当按键没有按下时,P2.4P2.7为高电平,若按下则变低电平。(2) 所用存储单元31H时钟分的个位 3AH时钟分的个位的段码32H时钟分的十位 3BH时钟分的十位的段码33H时钟时的个位 3CH时钟时的个位的段码34H时钟时的十位 3DH时钟时的十位的段码41H闹钟分的个位 4AH闹钟分的个位的段码42H闹钟分的十位 4BH闹

5、钟分的十位的段码43H闹钟时的个位 4CH闹钟时的个位的段码44H闹钟时的十位 4DH闹钟时的个位的段码51H54H 分别存放着秒表模式下14号管要显示的数字5AH5DH 分别存放着秒表模式下14号管要显示的数字的段码其中,1号管秒的十分位 2号管秒的个位 3号管秒的十位 4号管分的个位R7的初值为20,控制定时器T0的中断次数,T0中断1次定时50ms,20次定时1s;R0用来记录秒;(3) 总流程图开 始主程序初始化调用“当前时间调时”子程序KEY1YesK1是否按下?(P2.7=0?)NoYesK2是否按下?(P2.6=0?)调用“当前时间调分”子程序KEY2NoYesK3是否按下?(P

6、2.5=0?)调用“闹铃时间设置”子程序KEY3No调用“闹铃工作”子程序CLOCKYes调用“秒表”子程序KEY4K4是否按下?(P2.4=0?)数码管显示程序No(4)“当前时间调时”子程序流程图开 始时的个位增1No时的十位是2吗?YesNo时的个位是4吗?Yes时的个位和十位清零时的个位是10吗?NoYes时的个位清零,十位加一查表获取段码返回(5)“当前时间调分”子程序流程图开 始分的个位增1No分的个位是10吗?Yes分的个位清零,十位加1分的十位是6吗?NoYes分的十位清零查表获取段码返回(6)“闹钟时间设置”子程序流程图开始Yes完成闹钟设置了吗?No返回KEY1是否按下?Y

7、es闹钟调时NoKEY2是否按下?Yes闹钟调分No闹钟时间显示(7)“闹钟工作”子程序流程图开始当前时间和闹钟时间相同吗?蜂鸣器不工作蜂鸣器工作返回(8)“秒表”子程序流程图开始秒表初始化是否退出秒表?秒表开始/暂停秒表清零返回(9)“数码管显示”子程序流程图3号数码管导通开始1号数码管导通3号数码管赋值1号数码管赋值延时延时4号数码管导通2号数码管导通4号数码管赋值2号数码管赋值返回延时延时四、总结因为平时对于电路设计这方面的训练比较少,电路也是自己最薄弱的地方。因此,在第一天拿到器件以后完全没有方向,不知道从哪里开始设计。后来通过自己上网搜索资料,逐渐摸索出了思路,最终完成了电路的设计。

8、电路设计完之后,在面包板上搭建也让我犯了难。什么器件应该放在哪个位置,这么放插孔够不够用,这么放连线方不方便成了我一直头疼的问题。后来通过观察上一届学长的面包板和同学的讨论,终于搭好了板子。但是因为对于面包板不熟悉,搭小灯泡时,把它的两个引脚插在了联通的两个孔里,导致小灯泡一直不亮;插按键的时候也是,没有搞清楚按键和面包板的构造,把按键的两边引脚都插在联通的一排里,导致后面在验证的时候出现了数码管一直不亮的问题,后来经过老师的指导,解决了这个问题。软件的编写可能是最困难的一个部分了。虽然之前有做过单片机实验,写过代码,但是,实验的代码非常简短,实现的功能很简单。这次因为要实现很多功能,一开始我

9、想偷懒,直接写了代码。这样就导致了我的思路不成熟,运行下来有很多地方都是错误的。因此我才意识到,直接写代码是不可能的,要先画流程图理清思路。在我画完流程图以后,再会过去看我原来的代码,才知道有多么的混乱。后来经过我分模块的编写,最后把它们汇总到一起,构成了最后的代码,开始调试。首先,我先在WAVE软件里写了一个最小系统的代码,再通过wellon软件,烧制到AT89C52单片机上,对最小系统进行测试。测试时发现小灯和蜂鸣器都没有正常的工作。因为当时刚刚开始,并不知道该如何调试,就马上叫老师了,老师发现小灯的两个引脚插在了联通的两个孔里,才导致了不亮。当我把小灯的引脚插在其他地方时,灯就亮了。至于

10、蜂鸣器不响的问题,我用万用表测试了蜂鸣器周围的所有电路发现都是正确的,测试蜂鸣器两端的电压,发现也是有电压差的,我的代码又没有问题,一时不知道怎么办才好。后来,我又连接电源,让电路运行了一次,发现其实蜂鸣器是发出声音的,只是很微弱以至于我们都把它忽略了。然后我就想是不是因为蜂鸣器两端电压太小导致的。于是,我就把和蜂鸣器相连接的电阻拿掉了,终于蜂鸣器也响了。最小系统测试完成。后来,老师教我们使用了仿真器,这让整个调试过程变得方便了许多。当我把整个代码都编译到仿真器里面时,板子上的数码管没有任何反应,但是换成同学的板子就可以显示,这让我觉得很不可思议。当我又写了段测试数码管的程序,让它显示的时候,

11、数码管也是可以正确显示的。我实在想不出办法,决定单步运行,看看到底哪里出现了问题。但是我单步运行了几次,都没有发现哪里有问题,于是只能求助于老师。老师通过设断点的方法发现,我的按键完全没有实现它的功能,于是就询问我怎么安装的按键,这才找出了原因,原来我的按键的安装方向错了。在改正了之后,我的数码管就能正常的显示了。数码管显示之后,我发现我的闹钟到了指定时间不会响,然后我仔细再看了我的代码,发现虽然写了闹铃的子程序,但是在主程序里面并没有调用,这才导致了闹钟不响。在有加了一句调用语句以后,闹钟就能正常工作了。当我把前一天调试好的程序第二天再用仿真器进行测试时,发现蜂鸣器只要一通电就响了,完全不受

12、程序的控制。为什么我程序一点都没改过但是再次验证又失败了呢?我又拿了同学的板子做测试,发现她跟我是一样的问题,于是我就想会不会是仿真器的问题。于是,我又拿了另一个仿真器测试了一下,发现程序是正常运行的;我又把蜂鸣器接在了第一个仿真器的P3口进行实验,发现程序也是正常运行的。因此,我认为是第一个仿真器的P1口坏了。通过这次课程设计,我对单片机有了更加深刻的认识,体会到了单片机的强大。同时,从设计电路图到最后的验证成功,在这整个过程中遇到了很多的问题,当遇到问题时我认为最重要的还是冷静下来自己思考,仔细的检查。因为很多的问题的出现大部分程度上是因为自己的不仔细。一个地方的出错可能就导致了整个数码管

13、的不显示,整个程序的实现不了功能。当出现了问题时,应该自己默默地看代码,仔仔细细地观察,看看到底哪里出现了问题,因为自己的代码只有自己知道具体哪里是干什么的,自己检查出来错误才会有成就感。总之,通过这次课程设计,我学习到了很多,也意识到了自己在动手方面的不足,希望在以后的学习中能改正这一缺点。五、附程序清单ORG 0000H AJMP MAIN ORG 000BH LJMP TIME ;时钟程序 ORG 001BH LJMP IT1P ;IT1P用于秒表计时 ORG 0030H MAIN: MOV SP,#60H ;堆栈指针初始化 MOV IE,#8AH ;允许T0和T1中断 MOV TMOD

14、,#11H ;T0和T1均工作在方式1 MOV TL0,#0B0H ;给T0装初值,中断一次定时50ms MOV TH0,#3CH MOV R0,#0 ;用R0记录秒 MOV R7,#20 ;中断20次,定时1s MOV 31H,#00H ;时间初始化,显示器显示:00:00 MOV 32H,#00H MOV 33H,#00H MOV 34H,#00H MOV 3AH,#0C0H MOV 3BH,#0C0H MOV 3CH,#0C0H MOV 3DH,#0C0H MOV 41H,#00H ;闹钟初始化,定在00:00时刻 MOV 42H,#00H MOV 43H,#00H MOV 44H,#0

15、0H MOV 4AH,#0C0H MOV 4BH,#0C0H MOV 4CH,#0C0H MOV 4DH,#0C0H MOV DPTR,#TAB ;段码表首地址传给DPTR SETB P1.0 SETB TR0START1: JB P2.7,NEXT1 ;按键1调时 LCALL DEL1 ;调用延时程序,消除按键抖动 JB P2.7,NEXT1 JNB P2.7,$ ;等待按键弹开 LCALL KEY1 NEXT1: JB P2.6,NEXT2 ;按键2调分 LCALL DEL1 JB P2.6,NEXT2 JNB P2.6,$ LCALL KEY2 NEXT2: JB P2.5,NEXT3

16、;按键3设置闹钟 LCALL DEL1 JB P2.5,NEXT3 JNB P2.5,$ LCALL KEY3 NEXT3: LCALL NAOZHONG ;闹钟响铃程序,当前时间与闹钟时间相同则响铃 JB P2.4,DSPLY1 ;按键4秒表 LCALL DEL1 JB P2.4,DSPLY1 JNB P2.4,$ LCALL KEY4DSPLY1: ;显示时间 MOV P2,#0FEH ;1号管显示分的个位 MOV P0,3AH LCALL DEL2 MOV P2,#0FDH ;2号管显示分的十位 MOV P0,3BH LCALL DEL2 MOV P2,#0FBH ;3号管显示时的个位

17、MOV P0,3CH CLR P0.7 ;点亮3号管后的小数点,区别时和分 LCALL DEL2 MOV P2,#0F7H ;4号管显示时的十位 MOV P0,3DH LCALL DEL2 LJMP START1 TIME: ;时钟程序 DJNZ R7,LOOP1 MOV R7,#20 INC R0 CJNE R0,#60,LOOP1 MOV R0,#00H INC 31H MOV R1,31H CJNE R1,#10,TABLP1 MOV 31H,#00H INC 32H MOV R1,32H CJNE R1,#6,TABLP1 MOV 32H,#00H LCALL BAOSHI INC 3

18、3H MOV R1,33H MOV R2,34H CJNE R2,#2,LOOP2 ;判断时的十位是否为2,若不是跳转到LOOP2 CJNE R1,#4,TABLP1 ;接着判断时的个位是否为4,若不是查表获取段码 MOV 33H,#00H ;若为24时,则将时的个位和十位清零 MOV 34H,#00H SJMP TABLP1 LOOP2: CJNE R1,#10,TABLP1 MOV 33H,#00H INC 34HTABLP1: MOV A,31H MOVC A,A+DPTR MOV 3AH,A ;分的个位的段码 MOV A,32H MOVC A,A+DPTR MOV 3BH,A ;分的十

19、位的段码 MOV A,33H MOVC A,A+DPTR MOV 3CH,A ;时的个位的段码 MOV A,34H MOVC A,A+DPTR MOV 3DH,A ;时的十位的段码 LOOP1: MOV TL0,#0B0H ;给T0重装初值 MOV TH0,#3CH RETI DEL1: ;按键去抖延时程序(约10ms) MOV R6,#20 DEL11: MOV R5,#248 DJNZ R5,$ DJNZ R6,DEL11 RET DEL2: ;动态显示延时程序(约5ms) MOV 2CH,#10 DEL21: MOV 2BH,#248 DJNZ 2BH,$ DJNZ 2CH,DEL21

20、RET KEY2: ;调分程序 MOV R0,#0 ;秒清零,使校时更加精准 MOV R7,#20 INC 31H ;分的个位增1 MOV R1,31H CJNE R1,#10,TABLP2 MOV 31H,#00H INC 32H MOV R1,32H CJNE R1,#6,TABLP2 MOV 32H,#00HTABLP2: MOV A,31H MOVC A,A+DPTR MOV 3AH,A ;时钟分的个位的段码 MOV A,32H MOVC A,A+DPTR MOV 3BH,A ;时钟分的十位的段码 RET KEY1: ;调时程序 INC 33H ;时的个位增1 MOV R1,33H M

21、OV R2,34H CJNE R2,#2,LOOP3 CJNE R1,#4,TABLP3 MOV 33H,#00H MOV 34H,#00H AJMP TABLP3 LOOP3: CJNE R1,#10,TABLP3 MOV 33H,#00H INC 34HTABLP3: MOV A,33H MOVC A,A+DPTR MOV 3CH,A ;时的个位的段码 MOV A,34H MOVC A,A+DPTR MOV 3DH,A ;时的十位的段码 RET KEY3: ;闹钟设置程序START2: JB P2.5,NEXT4 ;判断是否完成闹钟设置 LCALL DEL1 JB P2.5,NEXT4 J

22、NB P2.5,$ LJMP EXIT1 NEXT4: JB P2.7,NEXT5 ;按键1闹钟调时 LCALL DEL1 JB P2.7,NEXT5 JNB P2.7,$ LCALL AKEY1 NEXT5: JB P2.6,DSPLY2 ;按键2闹钟调分 LCALL DEL1 JB P2.6,DSPLY2 JNB P2.6,$ LCALL AKEY2DSPLY2: MOV P2,#0FEH ;1号管显示闹钟分的个位 MOV P0,4AH CLR P0.7 ;点亮1号管后面的小数点,区分时钟和闹钟 LCALL DEL2 MOV P2,#0FDH ;2号管显示闹钟分的十位 MOV P0,4BH

23、 LCALL DEL2 MOV P2,#0FBH ;3号管显示闹钟时的个位 MOV P0,4CH CLR P0.7 ;点亮3号管后面的小数点,区别时和分 LCALL DEL2 MOV P2,#0F7H ;4号管显示闹钟时的十位 MOV P0,4DH LCALL DEL2 LJMP START2 EXIT1: RET AKEY2: ;闹钟调分程序 INC 41H MOV R3,41H CJNE R3,#10,TABLP4 MOV 41H,#00H INC 42H MOV R3,42H CJNE R3,#6,TABLP4 MOV 42H,#00HTABLP4: MOV A,41H MOVC A,A

24、+DPTR MOV 4AH,A ;闹钟分的个位的段码 MOV A,42H MOVC A,A+DPTR MOV 4BH,A ;闹钟分的十位的段码 RET AKEY1: ;闹钟调时程序 INC 43H MOV R3,43H MOV R4,44H CJNE R4,#2,LOOP4 CJNE R3,#4,TABLP5 MOV 43H,#00H MOV 44H,#00H AJMP TABLP5 LOOP4: CJNE R3,#10,TABLP5 MOV 43H,#00H INC 44HTABLP5: MOV A,43H MOVC A,A+DPTR MOV 4CH,A ;闹钟时的个位的段码 MOV A,4

25、4H MOVC A,A+DPTR MOV 4DH,A ;闹钟时的十位的段码 RETNAOZHONG: ;闹钟响铃程序 MOV A,31H ;当前时间与闹钟设定时间相同则响铃 CJNE A,41H,OFF MOV A,32H CJNE A,42H,OFF MOV A,33H CJNE A,43H,OFF MOV A,34H CJNE A,44H,OFF CLR P1.0 AJMP ON OFF: SETB P1.0 ON: RET KEY4: ;秒表程序 MOV 51H,#00H ;秒的十分位 MOV 52H,#00H ;秒的个位 MOV 53H,#00H ;秒的十位 MOV 54H,#00H

26、;分的个位 MOV 5AH,#0C0H ;秒表初始化,显示器显示:0:00.0 MOV 5BH,#0C0H MOV 5CH,#0C0H MOV 5DH,#0C0H MOV TL1,#0B0H ;T1装初值,中断一次计时50ms MOV TH1,#3CH MOV R4,#2 ;中断两次,定时0.1s SETB PT1 ;设T1为高优先级中断 CLR TR1START3: JB P2.4,NEXT6 ;判断是否退出秒表模式 LCALL DEL1 JB P2.4,NEXT6 JNB P2.4,$ LJMP EXIT2 NEXT6: JB P2.7,NEXT7 ;秒表开始/暂停 LCALL DEL1

27、JB P2.7,NEXT7 JNB P2.7,$ CPL TR1 NEXT7: JB P2.6,DSPLY3 ;秒表清零 LCALL DEL1 JB P2.6,DSPLY3 JNB P2.6,$ CLR TR1 MOV 51H,#00H MOV 52H,#00H MOV 53H,#00H MOV 54H,#00H MOV 5AH,#0C0H MOV 5BH,#0C0H MOV 5CH,#0C0H MOV 5DH,#0C0H MOV TL1,#0B0H MOV TH1,#3CH MOV R4,#2DSPLY3: MOV P2,#0FEH ;1号管显示秒的十分位 MOV P0,5AH LCALL

28、DEL2 MOV P2,#0FDH ;2号管显示秒的个位 MOV P0,5BH CLR P0.7 ;点亮2号管后面的小数点,区别秒的个位和十分位 LCALL DEL2 MOV P2,#0FBH ;3号管显示秒的十位 MOV P0,5CH LCALL DEL2 MOV P2,#0F7H ;4号管显示分的个位 MOV P0,5DH CLR P0.7 ;点亮4号管后面的小数点,区别分和秒 LCALL DEL2 LJMP START3 EXIT2: CLR PT1 RET IT1P: ;T1的中断服务子程序 DJNZ R4,NEXT8 MOV R4,#2 INC 51H ;秒的十分位增1 MOV R3

29、,51H CJNE R3,#10,TABLP6 MOV 51H,#00H INC 52H ;秒的个位增1 MOV R3,52H CJNE R3,#10,TABLP6 MOV 52H,#00H INC 53H ;秒的十位增1 MOV R3,53H CJNE R3,#6,TABLP6 MOV 53H,#00H INC 54H ;分的个位增1 MOV R3,54H CJNE R3,#10,TABLP6 MOV 54H,#00HTABLP6: MOV A,51H MOVC A,A+DPTR MOV 5AH,A ;秒的十分位的段码 MOV A,52H MOVC A,A+DPTR MOV 5BH,A ;秒

30、的个位的段码 MOV A,53H MOVC A,A+DPTR MOV 5CH,A ;秒的十位的段码 MOV A,54H MOVC A,A+DPTR MOV 5DH,A ;分的个位的段码 NEXT8: MOV TL1,#0B0H ;给T1重装初值 MOV TH1,#3CH EXIT3: RETIBAOSHI: ;整点报时程序 CLR P1.0 LCALL DEL1S SETB P1.0RETURN:RETDEL1S:MOV 2FH,#10DE1: MOV 2EH,#200DE2: MOV 2DH,#250 DJNZ 2DH,$ DJNZ 2EH,DE2 DJNZ 2FH,DE1 RET TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数字09的断码 END

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922