
单片机,亦称单片微电脑或单片微型计算机。它是把处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。计算机的产生加快了人类改造世界的步伐,但是它毕竟体积大。微计算机(单片机)在这种情况下诞生了,它为我们改变了什么?纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子 宠物等,这些都离不开单片机。
本设计是篮球计时计分器,主要在篮球比赛中用于记录整个赛程的比赛时间和显示甲、乙两队在比赛过程中的比分情况。该计时计分器有部分组成:一部分用来实现计时功能,其基本原理和定时闹相似;另一部分用来实现计分功能,其基本原理和计数器相似,只不过所要记录和显示的对象是按键按下的次数,每按下一次计数值加一。
主控芯片采用ATC51,采用汇编语言进行编程,编程后利用Keil uVision3来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能是否能够正常实现。
该设计能够实现计时和计分功能,采用共阴极数码管进行动态显示,加分的部分用按键来完成,每按一次发送一个计数脉冲,计数值加一。但是效果病不是很完美,计时显示部分有时候会出现不稳定的情况,通过对晶振和电容值调整后仍然没有改变效果,而且该设计最大遗憾是没有实现中场时交换比分和结束时进行报警的功能。
1 概述
1.1发展背景
体育比赛计时记分系统是对体育比赛过程中所产生的时间、比分等数据进行快速采集记录、加工处理、传递利用的信息系统。根据不同运动项目的不同比赛规则要求, 体育比赛的计时记分系统包括测量类、评分类、命中类、制胜类、得分类等多种类型。
篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的, 因此, 足球比赛的计时记分系统是一种得分类型的系统。篮球比赛的计时记分系统由计时器、记分器等多种电子设备组成。同时, 根据目前高水平足球比赛要求, 完善的足球比赛计时记分系统设备应该能够与现场成绩处理、现场大屏幕、电视转播车等多种设备相联, 以便实现提高比赛现场感、表演娱乐观众等功能。
1.2系统的功能
随着科技的迅猛发展,单片机在计算机应用领域中起到了越来越重要的作用. 单片机体积小,功能强,集成了微型机的各部件,大大缩短了系统内信号传送的距离,从而提高了系统的可靠性及运行速度。
该系统主要是线以下两种功能:
计分:能同时显示甲、乙两队比分,最大计分数为99。能分别对甲、乙两队比分进行加分。
计时:从比赛开始时启动计时工作方式,初始时间为00,最大计时为99 分钟,经过修改后应该还能实施计时暂停,还能设定为倒计时。
哨音提示:设定的比赛时间到了,能自动哨音提示比赛结束.
2系统总体方案及硬件设计
2.1系统组成
篮球比赛计分的准确性和计时的精确度是要求很高的,而单片机在这方面有着出色的表现。本系统采用频率为12 MHz 的芯片,整个系统由按键、计时显示、计分显示等部分组成:该系统组成方框图如图1 所示:
图1:系统原理框图
单片机是该系统电路的核心组成部分,系统的各种功能都是在单片机内通过编程来实现。 单片机选用ATMEL 公司的AT C51. ATC51 是一个内含4 K 字节FLASH RAM (闪速存储器) 、128 字节RAM 和32 条I/ O 口线的8 位单片微处理器。ATC51 的的X1 (19 脚) 和X2 (18 脚) 外接6MHZ 晶振,为单片机提供时钟信号。晶振两引脚各串一个瓷片电容,容值为20P~50P ,用于提高晶振频率的稳定性。
2.2系统定时控制部件设计
定时控制部件是在规定的时刻发出各种操作所需的全部内部和外部控制信号,使各功能元件协调工作,完成指令所规定的功能。主要任务是产生一个工作时序,其工作需要时钟电路提供一个工作频率。
MCS-51内部有一个用于构成震荡器的高增益反向放大器,此放大器的输入端和输出端分别是XTAL1和XTAL2,在XTAL1和XTAL2上外接时钟源可构成时钟电路。单片机的生产工艺不同,时钟的产生方式也不同有内部和外部时钟产生两种时钟方式。
图2 内部时钟产生方式
本系统采用的是内部时钟产生方式,如图2所示:在XTAL1和XTAL2两端跨接晶体或陶瓷谐振器,于内部反向器构成稳定的自激振荡器。其发出的脉冲直接送入片内的定时控制部件。
2.3系统的复位电路设计
图3 上电加按钮电平复位
MCS-51单片机通常采用上电复位、按钮电平复位、外部脉冲复位、上电加按钮电平复位、程序运行监视复位等方式。
我采用的是上电加按钮电平复位,电路图如图所示,是上电自动复位与按钮电平复位的组合。上电复位利用电容充电来实现,即上电瞬间RST/Vpd端的电位与Vcc相同,随着充电电流的减少, RST/Vpd的电位下降,最后被钳位在0伏,按钮电平复位,当按钮按下后,电源Vcc同过电阻施加在单片机复位端RST/Vpd上,实现单片机的复位。
2.4显示系统的设计
根据系统设计要求,为了显示比赛的时间及比分,采用了8个7段LED显示器,其中4个用于显示比赛时间,其余4个用于显示主队和客队的分数.
图4 显示部分电路图
8位动态LED显示器由2个8位并行的控制端口(PA72PA0,PB72PB0)进行控
制,其中一个控制段选码,一个控制位选码。由于所有位的段选皆由一个I/O口控
制,因此,在任一瞬间;8位LED显示器要么全部或多位显示同一个字符,要么只
在一个指定位上显示该字符,这取决于位选控制I/O端口的状态。可使显示器和各
位轮流依次显示一瞬间,在此瞬间,从段选口送出该位的段选码,如此循环反复,只要保证每秒钟对所有位的循环在20次以上,由于人眼的视觉暂留效应,就会看到显示器的各位“同时”显示各自的内容。
3软件设计
3.1程序流程图
3.2 计时部分设计
MAIN: LCALL FLASH1
LCALL FLASH2
主程序采用长条转指令进入计时部分,第一步跳转将所有计数初值清零,再一次跳转进入计时循环。
FLASH1: SETB IT0
SETB EA
MOV ONE, #00
MOV TWO,#00
MOV THREE, #00
MOV FIVE,#00
MOV SIX,#00
RET
DAY:MOV A, ONE
MOV B, #10
DIV AB
MOV 11H,A;将商放在11H中
MOV A,B
MOV 12H,A
LCALL DSP ;调显示子程序
INC ONE
MOV A, ONE
CJNE A,#60,DAY;当累计到60时,进一位
此程序为显示计时秒部分,首先对缓存区ONE清零,然后采用DIV指令,将其拆分成分别显示的十位与个位,并分别将两个内容送入不同缓存去,通过长跳转指令进入显示部分,当显示过后,再一次将显示秒的缓存区加一,然后与60相比,判断是否相等,当相等时程序顺序执行,程序进入显示分部分,若不等,程序返回,再次对秒位进行判断控制,实现循环。
MOV ONE,#00
MOV A,ONE
MOV A,#00
CLR A
INC TWO
MOV A,TWO
MOV B,#10
DIV AB
MOV 21H,A;显示分计数的十位
MOV A,B
MOV 22H,A
LCALL DSP;调显示子程序
MOV A,TWO
CJNE A,#59,DAY1;当分累计到60时向时进位
此段为显示分的部分,通过秒的进位进行判断控制,当秒每累计到60次时,程序通过CJNE指令顺序执行,对分进行操作,同样通过除指令,分别送入不同缓存去,进行显示,并与60相比,若相等程序顺序执行进入显示小时部分,若不等,程序跳转返回到秒位显示部分,继须等待60次。
MOV TWO,#00
INC THREE
MOV A,THREE
MOV B,#10
DIV AB
MOV 31H,A
MOV A,B
MOV 32H,A
LCALL DSP ;调显示子程序
MOV A,THREE
CJNE A,#24,DAY2;当时累计到24时,进入循环
MOV ONE,#00
MOV TWO,#00
MOV THREE,#00
AJMP MAIN
RET
此段程序为计时部分显示小时的部分,当分位累计到60次时,程序顺序执行,对小时位进行操作,同样通过跳转进入显示程序,并与24相比,若不等,程序跳回显示秒位,等待其进位,从而等待分进位,再次判断与60关系,进入小时部分,从而进行循环,若相等,程序将所有秒,分,时的缓存区清零。并返回主程序。
3.3 加分部分设计
CCTV: LCALL DISPLAY
JNB SET1,S1
JNB SET2,S2
S1:LCALL DELAY
JB SET1,RETUNE
INC FIVE
LJMP DISPLAY
S2:LCALL DELAY
JB SET2,RETUNE
INC SIX
LJMP DISPLAY
J0: JB SET1,RETUNE
LCALL DISPLAY
J1:JB SET2,RETUNE
LCALL DISPLAY
RETUNE: RET
加分部分,首先同过主程序部分的清零,对初值进行显示,并为零,然后通过JNB指令,判断是否有键按下,若有责跳转到指定部分,通过JB指令判断是否松开从而进行操作,若没有,程序将要显示加分的队的缓存区内容加一。并通过长跳转指令返回到显示子程序。
3.4显示子程序设计
DSP: MOV A,11H
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P1.0
MOV P0,A;显示妙计数的十位
LCALL DELAY;调延时子程序
SETB P1.0
MOV A,12H
MOVC A,@A+DPTR
CLR P1.1
MOV P0,A;显示妙计数的个位
LCALL DELAY1;延时子程序
SETB P1.1
MOV A,21H
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P1.2
MOV P0,A;显示分计数的十位
LCALL DELAY2;调延时子程序
SETB P1.2
MOV A,22H
MOVC A,@A+DPTR
CLR P1.3
MOV P0,A;显示分计数的个位
LCALL DELAY3;延时子程序
SETB P1.3
MOV A,31H
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P1.4
MOV P0,A;显示时计数的十位
LCALL DELAY4;调延时子程序
SETB P1.4
MOV A,32H
MOVC A,@A+DPTR
CLR P1.5
MOV P0,A;显示时计数的个位
LCALL DELAY5;延时子程序
SETB P1.5
LCALL CCTV
RET
显示部分通过P0口外加上拉电阻进行显示,数码管采用7段共阴极数码管,通过查表指令进行显示,首先将要显示的缓存单元,送入累加器中,通过累加器进行查表,将要显示的数值存储起来,然后通过位选信号,将要显示的位的数码管打开,进行现实。并通过延时子程序进行延时,使其显示的数值稳定下来。然后再通过位选信号,将显示的数值关断,从而显示下一个数值。但当显示完一圈后程序跳出,等待下一个跳进来的指令,再次进行现实。
3.5延时子程序设计
DELAY: MOV R1,#0EFH ;延时子程序
TT: MOV A,R1
MOV R0,#0FEH
AA: DEC R0
DJNZ R0,AA
DEC R1
CJNE A,#00,TT
RET
延时子程序采用DJNZ指令实现循环,首先对两个缓存单元送入不同数值,此处设计时老是跳不出,经常出现死循环,后与同学一起商量,终于发现原来是跳转标志位出错了。程序中首先对其中一个缓存单元的数值减一,直到其减到零为止,程序进行下一步操作,对另一个缓存单元减一,并与0相比,若不等则返回,继续将第一个缓存单元送入数值,然后重复上一次操作,直到第二个缓存单元与零相等,延时程序跳出。
4 Proteus软件仿真
4.1不工作状态仿真图
4.2计时、计分工作状态仿真图
5课程设计体会
经过将近两周的单片机课程设计,终于完成了我的足球计时计分器的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计做了出来,高兴之余不得不深思呀!
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。
我做的是篮球比赛计时计分器,电路中RP1上拉电阻的目的是让计时显示器变得更亮,没有rp1计时显示器不能点亮。而RP2上拉电阻是让计分显示器变得更亮,当去掉它时也可以,只是变得不太清楚而已,单片机的频率必须是12MHz。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
参考文献
[1]余发山.单片机原理及应用技术.徐州:中国矿业大学出版社,2003.
[2]佟云峰,等.单片机原理及其应用.重庆:重庆大学出版社,2004,1.
[3]吴金戌,等.8051单片机实践与应用.北京:清华大学出版社,2001,8.
[4]刘瑞新.单片机原理及应用教程.北京:机械工业出版社,2005.
[5]聂毅.宏汇编语言程序设计教程.北京:电子工业出版社,1998.
[6]周航慈.单片机应用程序设计技术.北京:北京航空航天大学出版社,2002.
附1 生成机器代码
:03000000020006F5
:1000030002016312000C120020D288D2AF751000D7
:1000130075200075300075400075500022E510759D
:10002300F00A84F511E5F0F512120082120163055E
:1000330010E510B43CE7751000E5107400E40520EA
:10004300E52075F00A84F521E5F0F522120082120D
:100053000163E520B43BC67520000530E53075F03B
:100063000A84F531E5F0F532120082120163E530BE
:10007300B417AA751000752000753000010622E53B
:100083001190018F93C290F580120113D290E51263
:1000930093C291F580120122D291E52190018F93B1
:1000A300C292F58012012FD292E52293C293F5807A
:1000B30012013CD293E53190018F93C294F58012E3
:1000C3000149D294E53293C295F580120156D29537
:1000D30022E54075F00A8493C2A0F5B0120113D251
:1000E300A0E5F093C2A1F5B012011312012212018F
:1000F3002FD2A1E55075F00A8493C2A2F5B0120184
:1001030013D2A2E5F093C2A3F5B0120113D2A32236
:1001130079EFE978FE7FFE18D8FD19B400F422794F
:10012300FFE978A018D8FD19B400F62279EFE97831
:0801330018D8FD19B400F6B0
:10013B002279EFE978FE18D8FD19B400F62279EF91
:10014B00E978FE18D8FD19B400F62279EFE978FEAC
:10015B0018D8FD19B400F6221200D430960330974C
:10016B000B12011320961C05400200D41201132020
:10017B00971105500200D42096091200D420970342
:0E018B001200D4223F065B4F666D7D077F6F2A
:00000001FF
附2 源程序代码
SET1 BIT P1.6
SET2 BIT P1.7
ONE EQU 10H
TWO EQU 20H
THREE EQU 30H
FIVE EQU 40H ;计分控制
SIX EQU 50H ;计分控制
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP CCTV
MAIN: LCALL FLASH1
LCALL FLASH2
FLASH1: SETB IT0
SETB EA
MOV ONE, #00
MOV TWO,#00
MOV THREE, #00
MOV FIVE,#00
MOV SIX,#00
RET
FLASH2:
DAY1:
DAY2:
DAY:MOV A, ONE
MOV B, #10
DIV AB
MOV 11H,A;将商放在11中
MOV A,B
MOV 12H,A
LCALL DSP ;调显示子程序
INC ONE
MOV A, ONE
CJNE A,#60,DAY;当累计到60时,进一位
MOV ONE,#00
MOV A,ONE
MOV A,#00
CLR A
INC TWO
MOV A,TWO
MOV B,#10
DIV AB
MOV 21H,A;显示分计数的十位
MOV A,B
MOV 22H,A
LCALL DSP;调显示子程序
MOV A,TWO
CJNE A,#59,DAY1;当分累计到60时向时进位
MOV TWO,#00
INC THREE
MOV A,THREE
MOV B,#10
DIV AB
MOV 31H,A
MOV A,B
MOV 32H,A
LCALL DSP ;调显示子程序
MOV A,THREE
CJNE A,#23,DAY2;当时累计到24时,进入循环
MOV ONE,#00
MOV TWO,#00
MOV THREE,#00
AJMP MAIN
RET
DSP:MOV A,11H
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P1.0
MOV P0,A;显示妙计数的十位
LCALL DELAY;调延时子程序
SETB P1.0
MOV A,12H
MOVC A,@A+DPTR
CLR P1.1
MOV P0,A;显示妙计数的个位
LCALL DELAY1;延时子程序
SETB P1.1
MOV A,21H
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P1.2
MOV P0,A;显示分计数的十位
LCALL DELAY2;调延时子程序
SETB P1.2
MOV A,22H
MOVC A,@A+DPTR
CLR P1.3
MOV P0,A;显示分计数的个位
LCALL DELAY3;延时子程序
SETB P1.3
MOV A,31H
MOV DPTR,#TAB
MOVC A,@A+DPTR
CLR P1.4
MOV P0,A;显示时计数的十位
LCALL DELAY4;调延时子程序
SETB P1.4
MOV A,32H
MOVC A,@A+DPTR
CLR P1.5
MOV P0,A;显示时计数的个位
LCALL DELAY5;延时子程序
SETB P1.5
LCALL CCTV
RET
DISPLAY:MOV A,FIVE ;显示红队计分
MOV B,#10
DIV AB
MOVC A,@A+DPTR
CLR P2.0
MOV P3,A
LCALL DELAY
LCALL DELAY1
LCALL DELAY2
SETB P2.0
MOV A,B
MOVC A,@A+DPTR
CLR P2.1
MOV P3,A
LCALL DELAY
LCALL DELAY1
LCALL DELAY2
SETB P2.1
MOV A,SIX ;显示蓝队计分
MOV B,#10
DIV AB
MOVC A,@A+DPTR
CLR P2.2
MOV P3,A
LCALL DELAY
LCALL DELAY1
LCALL DELAY2
SETB P2.2
MOV A,B
MOVC A,@A+DPTR
CLR P2.3
MOV P3,A
LCALL DELAY
LCALL DELAY1
LCALL DELAY2
SETB P2.3
RET
DELAY: MOV R1,#0EFH ;延时子程序
TT: MOV A,R1
MOV R0,#0FEH
MOV R7,#0FEH
AA: DEC R0
DJNZ R0,AA
DEC R1
CJNE A,#00,TT
RET
DELAY1: MOV R1,#0EFFFH ;延时子程序
BB: MOV A,R1
MOV R0,#100000
CC: DEC R0
DJNZ R0,CC
DEC R1
CJNE A,#00,BB
RET
DELAY2: MOV R1,#0EFFFH ;延时子程序
DD: MOV A,R1
MOV R0,#100000
EE: DEC R0
DJNZ R0,EE
DEC R1
CJNE A,#00,DD
RET
DELAY3: MOV R1,#0EFH ;延时子程序
FF: MOV A,R1
MOV R0,#0FEH
GG: DEC R0
DJNZ R0,GG
DEC R1
CJNE A,#00,FF
RET
DELAY4: MOV R1,#0EFH ;延时子程序
HH: MOV A,R1
MOV R0,#0FEH
II:DEC R0
DJNZ R0,II
DEC R1
CJNE A,#00,HH
RET
DELAY5: MOV R1,#0EFH ;延时子程序
LL: MOV A,R1
MOV R0,#0FEH
MM:DEC R0
DJNZ R0, MM
DEC R1
CJNE A,#00,LL
RET
CCTV: LCALL DISPLAY
JNB SET1,S1
JNB SET2,S2
S1:LCALL DELAY
JB SET1,RETUNE
INC FIVE
LJMP DISPLAY
S2:LCALL DELAY
JB SET2,RETUNE
INC SIX
LJMP DISPLAY
J0: JB SET1,RETUNE
LCALL DISPLAY
J1:JB SET2,RETUNE
LCALL DISPLAY
RETUNE: RET
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
附3 系统原理图:
