比赛计分器课程设计改.docx
《比赛计分器课程设计改.docx》由会员分享,可在线阅读,更多相关《比赛计分器课程设计改.docx(21页珍藏版)》请在冰豆网上搜索。
比赛计分器课程设计改
微机原理课程设计报告
实验名称:
计算机比赛计分器
姓名:
黄秀满
学号:
201217010222
专业班级:
计科12102班
指导教师:
杨红杰
实验日期:
2015年上学期第十八周
评阅意见:
评定成绩:
指导老师签名:
年月日
目录
一、系统概述1
1.1功能简述1
1.2按钮设置1
二、总体方案设计2
2.1系统框图2
2.2软件总体设计3
三、系统硬件设计3
3.180C51单片机3
3.23×4矩阵式键盘3
3.3.1数码管显示器数量选择4
3.3.2数码管共阴共阳接法的选择4
3.3.3数码管驱动的选择4
3.4系统原理图5
四、系统软件设计6
4.1主函数设计6
4.2按键获取,按键处理函数7
4.3显示子程序8
4.4延时子程序9
五、系统的安装调试说明10
5.1软件调试10
5.2软硬联调10
六、源程序清单:
11
总结18
参考文献18
一、系统概述
1.1功能简述
本设计内容为比赛计分器,主要用于各种体育比赛记录分数。
采用矩阵式键盘作为输入,用户可分别对两队比分进行加1、加2、加3和减1减2、减3操作,其加减1,2,3分可以通过加减1分、2分和3分的切换按钮实现,并通过指示灯显示其每次按下加减分键所加减的分值。
可以实现预置分。
比分通过4个8段数码管显示器进行显示,每队比分显示2位,
1.2按钮设置
计分器应该有7个按键分别标注于原理图,见图1.1。
图1.1按钮功能图
其中1/2/3分切换由发光二极管指示,加1减1分别对应。
预置分是事先设定分数可以分别设定甲乙两队的初始分数。
按下清零后,显示的分数清零。
二、总体方案设计
2.1系统框图
系统框图,见图2.1。
图2.1系统框图
本设计用80C51单片机为核心,利用4个8段数码管显示器.采用动态显示输出比分,用户信息输入则采用3×4矩阵式键盘。
89C52单片机有32根I/O线,所以不用扩展I/O口。
用一片单片机即可满足本设计的输入输出。
2.2软件总体设计
软件设计主要分为3个部分:
信息输入、信息处理、显示输出。
主要包括:
显示函数,按键获取函数,按键处理函数,进制转换函数。
信息输入时采用矩阵式键盘来实现,所以需要检测键盘有无按键的子程序;信息处理需要对用户通过键盘输入的不同信息进行辨别并执行相应的处理;显示输出考虑到成本和电路体积,决定采用动态输出。
三、系统硬件设计
3.180C51单片机
因为我们上课时学的是MCS-51,所以就选择了STC89C52单片机,因为它与INTEI MCS-51 兼容,并且它们都具有相同的CPU和指令系统,引脚功能兼容,容易掌握和使用。
3.23×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.1主函数设计
主函数程序代码:
MAIN:
MOVNUMA,#0
MOVNUMB,#0;分数清零
MOVTEMP,#1;起始时的分数加1
MOVP1,#0DFH
ACALLTRAN
M0:
ACALLDISP;调用显示函数
ACALLKEYSCAN;调用按键获取函数
SJMPM0;
首先初始化将储存甲乙两对分数的内存单元清零,起始时TEMP置1,并使LED5点亮,调用进制转换函数,调用显示函数,调用按键获取函数,之后重复调用显示函数,调用按键获取函数.。
函数间的调用关系,见图4.1。
图4.1函数关系调用图
4.2按键获取,按键处理函数
按键获取,按键处理函数流程图,见图4.2。
图4.2按键获取,按键处理函数流程图
说明:
由于图纸大小有限,还有B加分键处理,B减分键处理,以及按下无关键时显示不变。
未在图纸中表示出来。
4.3显示子程序
本程序是采用动态显示,用这种方法的好处在于每次刷新显示的时间相同,每个数码管显示的时间也相同,这样就可以让数码管清晰而且稳定的显示数据。
显示子程序流程图,见图4.3。
图4.3显示子程序流程图
4.4延时子程序
延时子程序就是通过执行一些没用但又占用时间的指令的集合。
这个子程序可以用于很多延时的地方因为它延时的时间可以通过R7进行改变,所以通用性好,可以将几个延时子程序合为一个,只用在调用前给R7赋值,即可根据用户的需要延时,流程图见图4.4。
五、系统的安装调试说明
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”。
六、源程序清单:
NUMAEQU30H
NUMBEQU31H;甲乙两队的分数
D1EQU32H;显示缓存区32h—35h
D2EQU33H
D3EQU34H
D4EQU35H
DUANEQUP0;段显示端口
WEI1EQUP2.4;位选端口P2.4---P2.7
WEI2EQUP2.5
WEI3EQUP2.6
WEI4EQUP2.7
TEMPEQU36H;存放切换的加减分数1/2/3
KEYDATEEQU37H;存放按键值
ORG0000H
MAIN:
MOVNUMA,#0
MOVNUMB,#0;分数清零
MOVTEMP,#1;起始时的分数加1
MOVP1,#0DFH
ACALLTRAN
M0:
ACALLDISP;调用显示函数
ACALLKEYSCAN;调用按键获取函数
SJMPM0;
;********************************************************
KEYSCAN:
MOVP2,#0FFH;采用反转法读取按键值
MOVP2,#0F0H
MOVA,P2
ANLA,#0F0H
CJNEA,#0F0H,K0
SJMPK4
K0:
MOVR5,#5
K1:
ACALLDELAY2MS;10ms延时去抖动
DJNZR5,K1
MOVA,P2
ANLA,#0F0H
CJNEA,#0F0H,K2
SJMPK4;是抖动返回
K2:
MOVKEYDATE,A;存储按键值
MOVP2,#0FH
MOVA,P2
ANLA,#07H
ORLA,KEYDATE;取得键值存放在KEYDATE中
MOVKEYDATE,A
K3:
MOVA,P2
ANLA,#07H
CJNEA,#07H,K3;等待按键松开
ACALLCHULI;调用按键处理函数
ACALLTRAN
K4:
RET
;********************************************************
CHULI:
MOVA,KEYDATE
CJNEA,#0E6H,C0
MOVNUMA,#0
MOVNUMB,#0
MOVTEMP,#1;按下清零键,A,B队分数清零,加分为1
MOVP1,#0DFH
RET
C0:
CJNEA,#0D6H,C2
INCTEMP;按下分值切换键,按一下分值加1,
MOVP1,#0BFH
MOVA,TEMP
CJNEA,#3,C01
MOVP1,#7FH
C01:
CJNEA,#4,C1
MOVTEMP,#1;分值循环1-2-3-1
MOVP1,#0DFH
C1:
RET
C2:
CJNEA,#0E5H,C4
MOVA,NUMA;按下A队加分按键,A队加分
ADDA,TEMP;分值相加
CJNEA,#99,C3;
MOVA,#0
C3:
MOVNUMA,A
RET
C4:
CJNEA,#75H,C6
MOVA,NUMB;按下B队加分按键,A队加分
ADDA,TEMP;分值相加
CJNEA,#99,C5;
MOVA,#0
C5:
MOVNUMB,A
RET
C6:
CJNEA,#0E3H,C9
MOVA,NUMA;按下A队减分按键,A队减分
SUBBA,TEMP;分值相减
CJNEA,#0FCH,C7
RET
C7:
JCC8
MOVA,#99
C8:
MOVNUMA,A
RET
C9:
CJNEA,#073H,C12
MOVA,NUMB;按下B队加减按键,A队减分
SUBBA,TEMP;分值相减
CJNEA,#0FCH,C10
RET
C10:
JCC11
MOVA,#99
C11:
MOVNUMB,A
C12:
RET
;***********************************************************
TRAN:
MOVA,NUMA;进制转换将10进制分数转化成
2进制,然后显示
MOVB,#10
DIVAB
MOVD1,A
MOVD2,B
MOVA,NUMB
MOVB,#10
DIVAB
MOVD3,A
MOVD4,B
RET
;***********************************************************
DISP:
MOVDPTR,#TAB;显示函数,
CLRWEI1;位选通
MOVA,D1;
MOVCA,@A+DPTR;取段码
MOVDUAN,A;送段码
ACALLDELAY2MS;
SETBWEI1;关位选
CLRWEI2
MOVA,D2
MOVCA,@A+DPTR
MOVDUAN,A
ACALLDELAY2MS
SETBWEI2
CLRWEI3
MOVA,D3
MOVCA,@A+DPTR
MOVDUAN,A
ACALLDELAY2MS
SETBWEI3
CLRWEI4
MOVA,D4
MOVCA,@A+DPTR
MOVDUAN,A
ACALLDELAY2MS
SETBWEI4
MOVDUAN,#0FFH;
RET
;************************************************************
DELAY2MS:
MOVR6,#5
D0:
MOVR7,#248
DJNZR7,$
DJNZR6,D0
RET
TAB:
DB28H;0
DB0EBH;1
DB32H;2
DB0A2H;3
DB0E1H;4
DB0A4H;5
DB24H;6
DB0EAH;7
DB20H;8
DB0A0H;9
DB60H;A
DB25H;B
DB3CH;C
DB23H;D
DB34H;E
DB74H;F
DB0D7H;-.
DB0F7H;-
DB61H;H
DB70H;P
DB0DFH;.
DB27H;O
DB0FFH;全黑
END
总结
这次课程设计虽然只有短短的两周时间,但我受益匪浅。
刚开始拿到课题时,觉得自己无处入手,但通过老师的讲解和查询资料,开始有自己的思路,整理出了总体方案,然后设计出硬件原理图,源程序等。
在这次设计中困难最大的就是调试,收获最多的也是调试,因为调试的时候你必须对程序相当的熟悉,对每一条指令相当了解,并且硬件的连接也要清晰的印在脑海里,只有这样你才能让软件和硬件结合在一起,实现预期功能。
在编程结束时需要编写END指令,这也是初学者编程时经常忘记的。
当然也有值得高兴的地方,我的设计通过加减分键和分数切换键配合实现加减1,2,3分只用了3个键,而两队分别设置加减1,2,3分就需6个键。
我认为这样的设计更合理。
总之,在课程设计中遇到了不少的困难,在老师的细心讲解和辅导下,最终完成了本次设计。
参考文献
[1]周明德.微型计算机系统原理及应用.2007.清华大学出版社
[2]刘乐善.微型计算机接口技术及应用.2000.华中理工大学出版社
[3]邹逢兴.计算机硬件技术基础试验教程.2000.高等教育出版社
[4]周佩玲.16位微型计算机原理接口及其应用.2000.中国科学技术大学出版社
[5]周向红.51系列单片机应用与实践教程.2008.北京航空航天大学出版社