目录第一章系统概述1.1 设计目的 (1)1.2 设计内容 (1)1.3 设计要求 (1)第二章系统方案 (2)2.1 总体方案 (2)2.2 方案组成 (2)第三章软件设计 (3)3.1 主程序设计 (3)3.1.1 倒计时模块 (4)3.1.2 键盘扫描模块 (4)3.1.3显示程序模块 (5)3.1.4 实施结果 (6)第四章总结体会 (6)4.1设计心得及体会 (6)4.2 参考文献 (7)附录程序清单.............................................. (8)倒计时第一章系统概述1.1 设计目的此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
通过解决实际问题,巩固和加深“单片微型计算机原理与接口技术”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
1.2设计内容(1)设计一个倒计时器,由单片机接收小键盘阵列设定倒计时时间,倒计时范围最大为00:00:00到23:59:59,由LED 显示时间,显示格式为XX(时):XX(分).:XX(秒)倒计时时间到,或超出范围,由指示灯发亮灯显示。
(2)画出程序流程图并编写程序实现上述功能。
1.3 设计要求1、能够实现时、分、秒的倒计时功能;2、倒计时结束,报警提示;3、通过按键能够设置倒计时表的初始值;4、具有“开始”、“暂停”、“继续”等功能按键;第二章系统方案2.1 总体方案设计时可采用模块化程序设计方法。
模块划分时应遵循下述原则:(1)每个模块应具有独立的功能,能产生一个明确的结果。
(2)模块之间的控制参数应尽量简单,数据参数应尽量少。
(3)根据模块的划分原则,将该程序划分成6个模块,如图2-2所示。
2.2 方案组成硬件部分由重设按钮、开始/暂停按钮、AT89C51单片机、一个6位共阴极LED显示器等组成。
软件部分主程序主要由系统初始化段、键盘识别、键值处理,以及6位共阴极LED显示器扫描显示子程序,T1中断。
第三章软件设计3.1 主程序设计所以主程序的设计一般包括:主程序的起始地址,中断服务程序的起始地址,有关内存单元及相关部件的初始化和一些子程序调用等等。
(1)程序的起始地址MCS-51系列单片机复位后,(PC)=0000H,而0003H~002BH分别为个中断源的入口地址。
所以,编程也应在0000H处写一跳转指令。
当CPU接受到中断请求信号并予以响应后,CPU把当前的PC内容压入栈中进行保护,然后转入响应的中断服务程序入口处执行。
一般在响应的中断服务程序入口处写一条跳转指令,并以跳转指令的目标地址作为中断服务程序的其始地址进行编程。
(2)主程序的初始化内容所谓初始化,是对用到的单片机内部部件或拓展芯片进行初始工作状态设定。
在本例中,使用了两个中断,即T1。
其中:1.T1中断:采用T1定时中断工作方式,完成倒计时。
(3在这里介绍几个主要的模块:3.1.1 倒计时模块设计(1)定时器T1计数初值T1计数初值为:TH1=(65536-700)/256;TL1=(65536-700)MOD 256工作方式TMOD=00000001H=01H(23.1.2 键盘扫描模块扫描按键情况,并显示在数码管的分数值位。
按键去抖动的处理。
由于机械触点的弹性作用,在闭合及断开的瞬间均伴随有一连串的抖动,抖动时间长短由按键的机械特性决定,一般为5~10ms。
而按键稳定闭合时间的长短则是由操作人员的按键动作决定的,一般为零点几秒至数秒。
键抖动会引起一次按键被误读多次,为了确保CPU对键的一次闭合仅做一次处理,键抖动可用硬件和软件两种方法消除。
本设计采用软件方法。
3.1.3显示程序模块由于该系统使用的是六位LED显示器显示倒计时,因此显示采用动态扫描显示方法,即由显示器扫描显示子程序控制显示器逐个循环从左至右依次点亮各个显示器。
这样虽然在任一时刻只要一个显示器点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮效果一样。
如下面的图所示:3.1.4 实施结果(1)首先开始找到主程序入口地址,运行程序;(2)输入倒计时初始值,按B键开始计时,如果设置的初始值不符合24小时制的常规值,红灯亮,不开始倒计时,如果设置的初始值符合24小时制的常规值,倒计时器正常工作,开始倒计时。
(3)倒计时过程中,可以按A键暂停计时,按B键恢复计时。
(4)倒计时过程中,可以按C键重新赋初值。
第四章总结体会4.1设计心得及体会该倒计时器是基于定时而设计的实现计时报警(指示灯亮)的装置。
由键盘扫描、动态LED显示电路、指示灯亮三大部分构成。
装置利用AT89S51单片机构成电路,以实现对计时时间的控制。
同时装置还用一个由电平控制的指示灯的亮灭装置,用以实现倒计时时间到时提示,以及错出现时候的提示。
本装置的最大特点是实时性强,可操作性好。
因为采用了矩阵式键盘控制,能够随时改变倒计时时间,所以装置能够应对不同的要求而做出相应的调整,以适应不同的环境。
看事物要辩证的看。
本装置也存在一些缺点值得注意。
如当按键开关出现问题时,系统会出现错误,出现指示灯亮的状态。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。
我在整个设计过程中懂得了许多东西,当遇到一不了的问题,跟同伴一起商量、合作,或许能收到事半功倍的效果。
不管学什么,一定要打好基础,并将其学好、学精,但空有知识也不一定就能说明什么,还得能为己所用;还有更重要的是培养了独立思考和设计的能力,树立了对知识应用的信心,相信会对今后的学习工作和生活有非常大的帮助,并且提高了自己的动手实践操作能力,使自己充分体会到了在设计过程中的成功喜悦。
虽然这个设计做的不是很完美,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益;最后,也是我感触比较深的一点,这次课程设计时为数不多的独立完成的一次,虽然过程中遇到很多困难,让自己犯愁过,彷徨过,急躁过,可当自己很快调整好心态,从跌倒的地方爬起来继续,最后取得成功,不止是成功后的喜悦,也是一次锻炼!本次课程设计总的来说是比较成功的,但在设计及操作过程中也遇到了不少的问题。
这个过程当然也就少不了老师和同学的帮助,所以我们要感谢给予我们帮助和支持的老师和同学。
在设计过程中,我们始终得到他们的悉心教导和认真指点,使得我们在理论知识和动手操作方面都有了很大的提高!通过这次课程设计使我们懂得了理论与实际结合是很重要的,只有理论知识是远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正服务于社会,从而提高自己的实际动手和独立思考的能力。
同时在设计的过程中我们也发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
通过这次课程设计之后,也把以前所学过的知识重新进行了温故。
它不仅锻炼了我们的实际操作能力,还与我们的专业零距离接触,更主要的是我们学到了书本上没有的知识,尤其感到自身对于书本知识的掌握太死板,并不能灵活运用。
这样就使我们的理论知识更加实践化了,让我们对书本上的知识也更加重视了,不再像以前那样盲目,同时通过这次设计,对以后的毕业设计也奠定了一定的基础,更为重要的是对我们自己的将来有了更为明确的奋斗目标。
4.2参考文献单片微型计算机原理与接口技术(第二版)高锋著附录程序:ORG 0000HAJMP MAINORG 001BHLJMP T1_PRGMAIN:MOV P1, #0FFHMOV A,#10HMOV 75H,AMOV 74H,AMOV 73H,AMOV 72H,AMOV 71H,AMOV 70H,AMOV R0,#75H ;位选,地址循环MOV R5,#0AHMOV TMOD ,#10HMOV TH1,#3CHMOV TL1,#0B0H ;50MSSETB TR1SETB EACLR ET1LOOP: ;调用键盘扫描程序LCALL KBSCJNE A,#10H,NEXT ;有按键则跳转LCALL DISP ;刷新显示SJMP LOOP ;无按键则重新判断NEXT:LCALL DELAY10MS ;软件去抖动LCALL KBSCJNE A,#10H,LOOP1 ;有按键则送显示SJMP LOOP ;无按键则继续扫描LOOP1:MOV @R0,A ;送入显示缓冲区WAIT:LCALL DISPLCALL KBSCJNE A,#10H,WAIT ;等待按键抬起DEC R0 ;数码管位地址减1CJNE R0,#6FH,LOOP ;判断是否到末位LCALL JUDGE ;RUN:JNB P1.0,MAINJNB P1.2,MAINLCALL KBSCJNE A,#10H,NEXTKLCALL TRANSLCALL DISPSJMP RUNNEXTK:LCALL DELAY10MSLCALL KBSCJNE A,#10H,LOOP2SJMP RUNLOOP2:CJNE A,#0AH, NEXTJ ;暂停键UPPAUSE:LCALL TRANSLCALL DISPLCALL KBSCJNE A,#10H,UPPAUSECLR ET1JMP RUNNEXTJ:CJNE A,#0BH,NEXTJ2 ;继续键UPCONT:LCALL TRANSLCALL DISPLCALL KBSCJNE A,#10H,UPCONTSETB ET1JMP RUNNEXTJ2:CJNE A,#0CH,RUN ;设初值UPEND:LCALL TRANSLCALL DISPLCALL KBSCJNE A,#10H,UPENDJMP MAINRETWAIT1:LCALL DISPLCALL KBSCJNE A,#10H,WAIT1RETORG 0300HJUDGE:MOV A,75HMOV B,#0AHMUL ABADD A,74HMOV 62H,AMOV A,73HMOV B,#0AHMUL ABADD A,72HMOV 61H,AMOV A,71HMOV B,#0AHMUL ABADD A,70HMOV 60H,AMOV A,62HSUBB A,#0CHJNB PSW.7,ERRMOV A,61HSUBB A,#3CHJNB PSW.7,ERRMOV A,60HSUBB A,#3CHJB PSW.7,RRTERR:CLR P1.0RRT:RETORG 2000HT1_PRG:MOV TH1,#3CHMOV TL1,#0B0H ;50MSDEC R5CJNE R5,#00H,LASTMOV R5,#0AHMOV A,60HCJNE A,#00H,ASMOV 60H,#3CHMOV A,61HCJNE A,#00H,AMMOV 61H,#3CHMOV A,62HCJNE A,#00H,AHCLR P1.2JMP LASTAH:DEC 62HAM:DEC 61HAS:DEC 60HLAST:RETITRANS:MOV A,62HMOV B,#0AHDIV ABMOV 75H,AMOV 74H,BMOV A,61HMOV B,#0AHDIV ABMOV 73H,AMOV 72H,BMOV A,60HMOV B,#0AHDIV ABMOV 71H,AMOV 70H,BRETDELAY10MS:MOV R7,#100LOOPDELAY:MOV R6,#250DJNZ R6,$DJNZ R7,LOOPDELAYRET;---------------------------键盘扫描子程序------------------------------------ ORG 8120H ;键盘扫描子程序KBS: MOV R2, #0DFH ;行指针MOV R3, #06H ;行数KB1: MOV DPTR, #0E400HMOV A, R2MOVX @DPTR, A ;输出一行MOV DPTR, #0E800HMOVX A, @DPTR ;读键盘CPL AANL A, #1FHJNZ KB2 ;有键按下转出MOV A, R2RR AMOV R2, ADJNZ R3, KB1CLR AKB2:RL ARL ARL AORL A, R3MOV R2,AMOV DPTR, #TABMOV R3, #1CHKB3: MOV A, R3 ;查表MOVC A, @A+DPTRCJNE A, 02H, KB4 ;未找到转走MOV A, R3 ;键值->ARETKB4: DJNZ R3, KB3MOV A, R3 ;:键值为#00HRETTAB: DB 81H,82H,42H,22H,83H,43H,23H,84H; 键值表DB 44H,24H,14H,13H,12H,11H,21H,41H;DB 00H,85H,45H,25H,15H,86H,46H,26H;DB 16H,0CH,0BH,0AH,09H;;------------------LED显示子程序------------------------------------------- ORG 80E0H ;;显示子程序;DISP:MOV R1,#75H ; ;首位地址MOV R2,#20H ;;位指针MOV A,R2DISP1:MOV DPTR,#0E400HMOVX @DPTR,A ;;输出字位MOV A,@R1 ; ;取显示缓冲区内容ADD A,#11HMOVC A,@A+PC ;;取字形DISP2:MOV DPTR,#0E000HMOVX @DPTR,A ; ;输出字形MOV R3,#00H ; ;延时时间常数DJNZ R3,$CLR AMOVX @DPTR,A ;; ;关显示DEC R1 ;;修改缓冲区地址MOV A,R2RRC A ; ;修改位地址MOV R2,AJNC DISP1 ;;未完待续RET;------------------LED字模-------------------------------------------- DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H;(字形表)DB 7FH,6FH,77H,7CH,39H,5EH,79H,7EH;DB 00H,76H,40H,73H,3EH,3DH,5CH,38H,50H;END。