电子与电气工程学院课程设计报告课程名称电子技术课程设计设计题目计分器专业名称电子科学与技术班级 13级 2班学号2013210825学生姓名唐前昆指导教师王欢2015年06 月02日目录第1章系统概述 (1)1.1 功能简述 (1)1.2 按钮设置 (1)第2章总体方案设计 (2)2.1 系统框图 (2)2.2 软件总体设计 (2)第3章系统硬件设计 (3)3.1 80C51单片机 (3)3.2 3×4矩阵式键盘 (3)3.3 8段数码管显示器 (3)3.4 系统原理图 (3)第4章软件设计 (4)4.1 主函数设计 (4)4.2按键码获取,按键处理函数 (5)4.3显示子函数 (6)4.4延时子函数 (7)第5章系统的安装调试说明 (8)5.1 软件调试 (8)5.2 软硬联调 (8)总结 (9)参考文献 (10)附录A 系统原理图 (11)附录B 源程序清单 (12)第1章系统概述1.1 功能简述本设计内容为比赛计分器,主要用于各种体育比赛记录分数。
采用矩阵式键盘作为输入,用户可分别对两队比分进行加1、加2和减1减2操作,其加减1,2分可以通过加减1分、2分的切换按钮实现,并通过指示灯显示其每次按下加减分键所加减的分值。
可以实现预置分。
比分通过4个8段数码管显示器进行显示,每队比分显示2位,1.2 按钮设置计分器应该有7个按键分别标注于原理图,见图1-1。
图1-1按钮功能图其中1/2分切换由发光二极管指示,加1减1分别对应。
预置分是事先设定分数可以分别设定甲乙两队的初始分数。
按下清零后,显示的分数清零。
第2章总体方案设计2.1 系统框图系统框图,见图2-1。
图2-1 系统框图本设计用80C51单片机为核心,利用4个8段数码管显示器.采用动态显示输出比分,用户信息输入则采用3×4矩阵式键盘。
89C52单片机有32根I/O线,所以不用扩展I/O口。
用一片单片机即可满足本设计的输入输出。
2.2 软件总体设计软件设计主要分为3个部分:信息输入、信息处理、显示输出。
主要包括:显示函数,按键获取函数,按键处理函数,进制转换函数。
信息输入时采用矩阵式键盘来实现,所以需要检测键盘有无按键的子程序;信息处理需要对用户通过键盘输入的不同信息进行辨别并执行相应的处理;显示输出考虑到成本和电路体积,决定采用动态输出。
第3章系统硬件设计3.1 80C51单片机因为我们上课时学的是MCS-51,所以就选择了STC89C52单片机,因为它与INTEI MCS-51 兼容,并且它们都具有相同的CPU和指令系统,引脚功能兼容,容易掌握和使用。
3.2 3×4矩阵式键盘根据设计共需要7个按键,可采用3×3矩阵式键盘,但考虑到常用键盘为3×4矩阵式键盘,而且方便以后功能的扩展和方便硬件的连接,所以最终决定采用3×4矩阵式键盘作为输入。
3.3.1 数码管显示器数量选择两个队,每队2位比分,每个显示器只能显示一位,则至少需要采用4个8段数码管显示器。
段数码管显示器采用动态显示输出比分。
3.3.2 数码管共阴共阳接法的选择51单片机I/O口输出高电平时输出的电流很小,数码管不会太亮;因为本设计采用动态显示,单片机I/O口直接接数码管,所以决定采用共阳数码管。
3.3.3 数码管驱动的选择为了使数码管亮度达到要求,数码管的位选端需要驱动,因为单片机I/O口的高电平输出的电流很小,需要驱动电路驱动,从而增加显示亮度。
最简单便宜的驱动就是使用三极管,为低电平时开通,所以选择PNP型三极管。
3. 4系统原理图(见附录)第4章软件设计4.1主函数设计主函数程序代码:MAIN: MOV NUMA,#0MOV NUMB,#0 ;分数清零MOV TEMP,#1 ;起始时的分数加1MOV P1,#0DFHACALL TRANM0: ACALL DISP ;调用显示函数ACALL KEYSCAN ;调用按键获取函数SJMP M0 ;首先初始化将储存甲乙两对分数的内存单元清零,起始时TEMP置1,并使LED5点亮,调用进制转换函数,调用显示函数,调用按键获取函数,之后重复调用显示函数,调用按键获取函数.。
函数间的调用关系,见图4-1。
图4-1函数关系调用图4.2按键获取,按键处理函数按键获取,按键处理函数流程图,见图4-2。
图4-2按键获取,按键处理函数流程图说明:由于图纸大小有限,还有B加分键处理,B减分键处理,以及按下无关键时显示不变。
未在图纸中表示出来。
4.3显示子程序本程序是采用动态显示,用这种方法的好处在于每次刷新显示的时间相同,每个数码管显示的时间也相同,这样就可以让数码管清晰而且稳定的显示数据。
显示子程序流程图,见图4-3。
图4-3 显示子程序流程图4.4 延时子程序延时子程序就是通过执行一Array些没用但又占用时间的指令的集合。
这个子程序可以用于很多延时的地方因为它延时的时间可以通过R7进行改变,所以通用性好,可以将几个延时子程序合为一个,只用在调用前给R7赋值,即可根据用户的需要延时,流程图见图4-4。
图4-4 延时子程序流程图第5章系统的安装调试说明5.1 软件调试软件调试主要是在仿真软件完成的。
在写好源程序,画出原理图之后,在电脑上进行软件仿真。
系统原理图附后。
5.2 软硬联调首先将编译成功程序载入单片机系统开发板。
通电后,LED5,电源指示灯点亮,数码管显示“0000”.。
对应的“4”键为甲加分按钮,当LED5亮时,每次按下“4”键,甲队分数加1;当LED6亮时,每次按下“4”键,甲队分数加2;当LED7亮时,每次按下“4”键,甲队分数加3;其中LED5,LED6,LED7的点亮与熄灭是通过对应的“1”键来控制,可以通过按“1”键来实现LED5,LED6,LED7之间的切换。
对应的“8”键为甲队减分键,当LED5亮时,每次按下“8”键,甲队分数减1;当LED6亮时,每次按下“8”键,甲队分数减2;当LED7亮时,每次按下“4”键,甲队分数减3;“7”键为乙加分键,“B”键为乙队减分键,其实现功能与甲队一样。
对应的“0”键为预置分按钮,按下“0”键之后,通过按甲乙队加、减分按钮配合分数切换键实现快速预置分。
”RESET”为复位键,按下可以实现复位。
数码管显示甲乙队当前分数,复位后,数码管显示“0000”。
总结这次课程设计虽然只有不到两周的时间,但我受益匪浅。
刚开始时觉得自己的课题无处入手,但通过老师的讲解和查询资料,开始有了自己的思路,整理出了总体方案,然后设计出硬件原理图,源程序等。
在这次设计中困难最大的就是调试,收获最多的也是调试,因为调试的时候你必须对程序相当的熟悉,对每一条指令相当了解,并且硬件的连接也要清晰的印在脑海里,只有这样你才能让软件和硬件结合在一起,实现预期功能。
在编程结束时需要编写END指令,这也是初学者编程时经常忘记的。
当然也有值得高兴的地方,我的设计通过加减分键和分数切换键配合实现加减1,2,-1(-2)分只用了3个键,而两队分别设置加减1,2,-1(-2)分就需6个键。
我认为这样的设计更科学。
总之,在课程设计中遇到了不少的困难,在老师的细心讲解和辅导下,最终完成了本次设计。
在此,由衷感谢王欢老师的指导和帮助。
参考文献[1] 、《微型计算机原理及应用》许立梓编机械工业出版社 2002[2]、《微型计算机接口技术及应用》刘乐善编华中理工大学出版社 2000[3]、《计算机硬件技术基础试验教程》邹逢兴编高等教育出版社 2000[4]、《16位微型计算机原理接口及其应用》周佩玲编中国科学技术大学出版社2000[5]、《微型计算机原理与接口技术》吴秀清编中国科学技术出版社 2001[6]、《微型计算机接口技术》邓亚平编清华大学出版社 2001[7]、《单片机原理及及应用》王迎旭编机械工业出版社 2001[8]、《单片机应用程序设计技术》周航慈著北京航空航天大学出版社 2002[9]、《单片机实用技术问答》谢宜仁主编人民邮电出版社 2002附录附录A系统原理图:附录B源程序清单:NUMA EQU 30HNUMB EQU 31H ;甲乙两队的分数D1 EQU 32H ;显示缓存区32h—35hD2 EQU 33HD3 EQU 34HD4 EQU 35HDUAN EQU P0 ;段显示端口WEI1 EQU P2.4 ;位选端口P2.4---P2.7 WEI2 EQU P2.5WEI3 EQU P2.6WEI4 EQU P2.7TEMP EQU 36H ;存放切换的加减分数1/2/3 KEYDATE EQU 37H ;存放按键值ORG 0000HMAIN:MOV NUMA,#0MOV NUMB,#0 ;分数清零MOV TEMP,#1 ;起始时的分数加1MOV P1,#0DFHACALL TRANM0: ACALL DISP ;调用显示函数ACALL KEYSCAN ;调用按键获取函数SJMP M0 ;;******************************************************** KEYSCAN:MOV P2,#0FFH ;采用反转法读取按键值MOV P2,#0F0HMOV A,P2ANL A,#0F0HCJNE A,#0F0H,K0SJMP K4K0: MOV R5,#5K1: ACALL DELAY2MS ;10ms延时去抖动DJNZ R5,K1MOV A,P2ANL A,#0F0HCJNE A,#0F0H,K2SJMP K4 ;是抖动返回K2: MOV KEYDATE,A ;存储按键值MOV P2,#0FHMOV A,P2ANL A,#07HORL A,KEYDATE ;取得键值存放在KEYDATE中MOV KEYDATE,AK3: MOV A,P2ANL A,#07HCJNE A,#07H,K3 ;等待按键松开ACALL CHULI ;调用按键处理函数ACALL TRANK4: RET;******************************************************** CHULI: MOV A,KEYDATECJNE A,#0E6H,C0MOV NUMA,#0MOV NUMB,#0MOV TEMP,#1 ;按下清零键,A,B队分数清零,加分为1MOV P1,#0DFHRETC0: CJNE A,#0D6H,C2INC TEMP ;按下分值切换键,按一下分值加1, MOV P1,#0BFHMOV A,TEMPCJNE A,#3,C01MOV P1,#7FHC01: CJNE A,#4,C1MOV TEMP,#1 ;分值循环1- 2- 3- 1MOV P1,#0DFHC1: RETC2: CJNE A,#0E5H,C4MOV A,NUMA ;按下A队加分按键,A队加分ADD A,TEMP ;分值相加CJNE A,#99,C3 ;MOV A,#0C3: MOV NUMA,ARETC4: CJNE A,#75H,C6MOV A,NUMB ;按下B队加分按键,A队加分ADD A,TEMP ;分值相加CJNE A,#99,C5 ;MOV A,#0C5: MOV NUMB,ARETC6: CJNE A,#0E3H,C9MOV A,NUMA ;按下A队减分按键,A队减分SUBB A,TEMP ;分值相减CJNE A,#0FCH,C7RETC7: JC C8MOV A,#99C8: MOV NUMA,ARETC9: CJNE A,#073H,C12MOV A,NUMB ;按下B队加减按键,A队减分SUBB A,TEMP ;分值相减CJNE A,#0FCH,C10RETC10: JC C11MOV A,#99C11: MOV NUMB,AC12: RET;*********************************************************** TRAN: MOV A,NUMA ;进制转换将10进制分数转化成2进制,然后显示 MOV B,#10DIV ABMOV D1,AMOV D2,BMOV A,NUMBMOV B,#10DIV ABMOV D3,AMOV D4,BRET;*********************************************************** DISP: MOV DPTR,#TAB ;显示函数,CLR WEI1 ;位选通MOV A,D1 ;MOVC A,@A+DPTR ;取段码MOV DUAN, A ;送段码ACALL DELAY2MS ;SETB WEI1 ;关位选CLR WEI2MOV A,D2MOVC A,@A+DPTRMOV DUAN, AACALL DELAY2MSSETB WEI2CLR WEI3MOV A,D3MOVC A,@A+DPTRMOV DUAN, AACALL DELAY2MSSETB WEI3CLR WEI4MOV A,D4MOVC A,@A+DPTRMOV DUAN, AACALL DELAY2MSSETB WEI4MOV DUAN,#0FFH;RET;************************************************************ DELAY2MS:MOV R6,#5D0: MOV R7,#248DJNZ R7,$DJNZ R6,D0RETTAB:DB 28H ; 0DB 0EBH ; 1DB 32H ; 2DB 0A2H ; 3DB 0E1H ; 4DB 0A4H ; 5DB 24H ; 6DB 0EAH ; 7 DB 20H ; 8 DB 0A0H ; 9 DB 60H ; A DB 25H ; B DB 3CH ; C DB 23H ; D DB 34H ; E DB 74H ; F DB 0D7H ; -.DB 0F7H ; - DB 61H ; H DB 70H ; P DB 0DFH ; . DB 27H ; O DB 0FFH ; 全黑END电气学院电子技术课程设计指导老师评价表。