八路数字抢答器 微机原理及接口技术课程设计Word格式文档下载.docx
《八路数字抢答器 微机原理及接口技术课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《八路数字抢答器 微机原理及接口技术课程设计Word格式文档下载.docx(35页珍藏版)》请在冰豆网上搜索。
进入下次抢答计时。
4、如果主持人未按"
键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下"
键为止。
5、P3.0为开始抢答,P3.1为停止,p1.0-p1.7为八路抢答输入数码管段选P0口,位选P2口低3位,蜂鸣器输出为P3.6口。
P3.2抢答时间调整结,P3.3回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。
二.抢答器总体设计
1.1抢答器的工作原理
抢答器的工作原理是利用单片机的定时器T0、T1中断完成,其余状态循环调用显示子程序,用4个共阴极LED数码管来显示,用P0口作为数码管的八个段选,用P2口中的P2.0、P2.1、P2.2、作为4个数码管其中3个位选,P1口接8个按键,提供选手抢答,P3.0-P3.5四个接四个按键,提供开始、结束、答题时间调整、枪答时间调整,加1、减1调整之用。
1.2抢答器的总体设计
倒计时方案方面利用MCS-51的内部的定时/计时器进行中断计时,配合软件延时实现倒计时。
该方案节省硬件成本,并且能够在定时器/计数器的使用、中断及程序设计方案方面得到锻炼与提高,显示方面采用穿行传输实现动态显示,该方案的硬件连接简单,但动态扫描的显示方式需占用CPU较多的时间,适用于单片机没有太多实时测控的任务场合
三.抢答器硬件电路设计
3.1芯片统计
名称
型号
数量
芯片
89C51
1
数码管
7SEG-MPX4-CC
按钮
BUTTON
15
电容
CAP
2
电解电容
CAP-ELEC
晶振
CRYSTAL
电阻
RES
8
喇叭
SPEAKER(DEVICE)
3.2硬件介绍
3.2.1芯片89C51
【1】
【2】
3.2.2数码管
其中DP为小数点【3】
数码管分共阳极和共阴极,都需要上拉电阻,以增加负载驱动能力。
共阳极则每位低电平有效,共阴极则每位高电平有效
单片机中共阳极段代码:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H0~7
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH8~F
单片机中共阴极段代码:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H0~7
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H8~F
3.3电路设计
XTAL1、XTAL2分别为反相放大器的输入端和输出端,外接定时反馈元件组成振荡器(内部时钟方式),产生时钟送至单片机内部各元件。
RST连接复位电路
P0口控制数码管段代码
P2口的低三位,控制数码管位选
P3口:
P3.0接开始按钮
P3.1接停止按钮
P3.2接抢答时间调整
P3.3接回答时间调整
P3.4接加1
P3.5接减1
P3.6接喇叭
3.3.1芯片电路
芯片电路如图3.1
图3.1
3.3.2复位电路
复位电路如图3.2
图3.2
该复位电路采用上电自动复位和手动复位两种复位方式,图中网络标号所指9连接到单片机的复位引脚。
要实现复位只需在,51系列单片机的RESET引脚上加上5ms的高电平就可以了。
上电复位是利用电容的充电来实现的,即上电瞬间RESET端的电位与Vcc相同,随着电容上储能增加,电容电压也逐渐增大,充电电流减小,RESET端的电位。
这样就会建立一个脉冲电压,调节电容与电阻的大小可对脉冲的持续时间进行调节。
通常若采用12MHz的晶振时,复位元件参数为22μF的电解电容和10kΩ的电阻。
按钮复位电路是通过按下复位按钮时,电源对RESET端维持两个机器周期的高电平实现复位的。
3.3.3晶振电路
晶振电路设计如图3.3
图3.3
MSC-51单片机的定时控制功能是用时钟电路和振荡器完成的,而根据硬件电路的不同,连接方式分为内部时钟方式和外部时钟方式。
本设计中采用内部时钟方式。
单片机内部有一个反相放大器,XTAL1、XTAL2分别为反相放大器的输入端和输出端,外接定时反馈元件组成振荡器(内部时钟方式),产生时钟送至单片机内部各元件。
时钟频率越高,单片机控制器的控制节拍就越快,运算速度也就越快。
一般来说单片机内部有一个带反馈的线性反相放大器,外界晶振(或接陶瓷振荡器)和电容就可组成振荡器,如图2-2所示。
加电以后延时一段时间(约10ms)振荡器产生时钟,不受软件控制,图中Y1为晶振,震荡产生的时钟频率主要由Y1确定。
电容C1,C2的作用有两个:
一是帮助振荡器起振,二是对振荡器的频率起微调作用,典型值为30pF。
3.3.4数码管电路
数码管电路如图3.4
图3.4
四.抢答器软件设计
4.1主程序设计
此程序的及时采用定时器T0和T1中断完成,其余状态循环调用显示子程序。
程序:
START:
MOVR5,#0BH
MOVR4,#0BH
MOVR3,#0BH
ACALLDISPLAY;
未开始抢答时候显示FFF
JBP3.0,NEXT
ACALLDELAY
JBP3.0,NEXT;
去抖动,如果“开始”按下就向下执行,否则跳到非法抢答查询
ACALLBARK;
按键发声
MOVA,R1
MOVR6,A;
送R1->
R6,因为R1中保存了抢答时间
SETBOK;
抢答标志位,勇于COUNT程序中半段是否查询抢答
MOVR7,#01H;
读抢答键数据信号标志,这里表示只读一次有用信号
MOVR3,#0AH;
抢答只显示计时,灭号数
AJMPCOUNT;
进入倒计时程序,“查询有效抢答的程序”在COUNT里面
4.2显示子程序的设计
由于采用软件动态扫描实现数据显示,显示用十进制BCD码的数据对应段码存放在ROM表中。
显示时,先取出70H~75H某一地址中的数据,然后查得对应的显示段码从P0口输出。
P2口将对应的数码管选中,就能显示该地址单元的数据值。
DISPLAY:
MOVDPTR,#DAT1;
查表显示程序,利用P0口做段选码输出/P2低三位做位选吗输出
MOVA,R3
MOVCA,@A+DPTR
MOVP2,#0FEH
MOVP0,A
ACALLDELAY2
MOVDPTR,#DAT2
MOVA,R5
MOVP2,#0FDH
MOVA,R4
MOVP2,#0FBH
RET
DAT1:
DB00H,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H;
灭、1、2、3、4、5、6、7、8、9、灭、F
DAT2:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H;
0、1、2、3、4、5、6、7、8、9、灭、F
4.3定时器T0、T1中断服务程序的设计
定时器T0用于响铃程序,定时器T1用于计时程序。
当答题剩余5秒种时P3.6口不断取反使喇叭发出一定频率的声音,提示选手
如图4.2
图4.2
程序
T0INT:
MOVTH0,#0ECH
MOVTL0,#0FFH
JNBRING,OUT
CPLP3.6;
RING标志位为1时P3.6口不短取反使喇叭发出一定频率的声音
OUT:
RETI
;
=====T1溢出中断(计时程序)======
T1INT:
MOVTH1,#3CH
MOVTL1,#0B0H
INCR0
INT0SUB:
MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
现在两个时间LED上显示R1
JNBP3.4,INC0;
P3.4为+1S键,如按下跳到INC0
JNBP3.5,DEC0;
P3.5为-1s键,如按下跳到DEC0
JNBP3.1,BACK0;
P3.1为确定键,如按下跳到BACK0
AJMPINT0SUB
INC0:
CJNEA,#63H,ADD0;
如果不是99,R2加1,如果加到99,R1就置0,重新加起
MOVR1,#00H
ACALLDELAY1
ADD0:
INCR1
DEC0:
JZSETR1;
如果R1为0,R1就置99
DECR1
SETR1:
MOVR1,#63H
BACK0:
=====INT1(回答时间R2调整程序)=====
INT1SUB:
MOVA,R2
MOVR5,A
ACALLDISPLAY
JNBP3.4,INC1
JNBP3.5,DEC1
JNBP3.1,BACK1
AJMPINT1SUB
INC1:
CJNEA,#63H,ADD1
MOVR2,#00H
ADD1:
INCR2
DEC1:
JZSETR2
DECR2
SETR2:
MOVR2,#63H
BACK1:
4.4抢答处理程序的设计
当有选手第一个按下抢答器按扭时数码管显示选手号码,开始倒计时,并锁定抢答。
当在此选手之后再有选手按下按扭时无效,数码管不变。
REPEAT:
MOVA,R2;
使用锦囊时重新计时
MOVR6,A
CLRRING
COUNT:
MOVR0,#00H;
重置定时器中断次数
MOVTH1,#3CH
MOVTL1,#0B0H;
重置定时器
RECOUNT:
MOVA,R6;
R6保存了倒计时间,之前应先将抢答或答题时间给R6
DIVAB;
除十分出个位/十位
MOV30H,A;
十位存于(30H)
MOV31H,B;
个位存于(31H)
MOVR5,30H;
取十位
MOVR4,31H;
取个位
MOVA,R6
SUBBA,#07H
JNCLARGER;
大于5s调到LARGER,小于等于5s会提醒
MOVA,R0
CJNEA,#0AH,FULL;
1s中0.5s向下运行
AJMPCHECK
FULL:
CJNEA,#14H,CHECK;
下面是1s的情况,响并显示号数并请R0,重新计数
SETBRING
JZQUIT;
计时完毕
MOVR0,#00H
DECR6;
一秒标志减1
LARGER:
MOVA,R0
CJNEA,#14H,CHECK;
如果1s向下运行,否则跳到查“停/显示”
计时一秒R6自动减1
CHECK:
JNBP3.1,QUIT;
如按下停止键退出
JNBOK,CHECKK;
只在回答倒计时才有效
AJMPNEXTT
CHECKK:
JNBP3.0,REPEAT;
判断是否使用锦囊
NEXTT:
ACALLDISPLAY
JBOK,ACOUNT;
如果是抢答倒计时,如是则查询抢答,否则跳过查询继续倒数(这里起到锁抢答作用)
AJMPRECOUNT
ACOUNT:
MOVA,36H
JNBACC.0,TRUE1
JNBACC.1,TRUE2
JNBACC.2,TRUE3
JNBACC.3,TRUE4
JNBACC.4,TRUE5
JNBACC.5,TRUE6
JNBACC.6,TZ1
JNBACC.7,TZ2
TZ1:
JMPTRUE7
TZ2:
JMPTRUE8
QUIT:
CLROK;
如果按下了“停止”执行的程序
AJMPSTART
=====正常抢答处理程序=======
TRUE1:
ACALLBARK
MOVA,R2
抢答时间R2送R6
MOVR3,#01H
CLROK;
因为答题的计时不在查询抢答,所以就锁了抢答
AJMPCOUNT
TRUE2:
MOVR3,#02H
CLROK
TRUE3:
MOVR3,#03H
TRUE4:
MOVR3,#04H
TRUE5:
MOVR3,#05H
TRUE6:
MOVR3,#06H
TRUE7:
MOVR3,#07H
TRUE8:
MOVR3,#08H
=====犯规抢答程序=========
ERROR:
MOVR0,#00H
MOV34H,R3;
犯规号数暂存与(34H)
HERE:
CJNEA,#06H,FLASH;
0.3s向下运行->
灭并停响
MOVR4,#0AH
MOVR5,#0AH;
三灯全灭
AJMPCHECK1
FLASH:
CJNEA,#0CH,CHECK1;
下面是0.8s的情况,响并显示号数并清R0,重新计
MOVR3,34H;
取回号数
MOVR5,#0BH
MOVR4,#0BH;
显示FF和号数
CHECK1:
JNBP3.1,QUIT
AJMPHERE
QUIT1:
CLRRING
五.实验结果
5.1非法抢答
图5.1
如图5.1所示,1号非法抢答,被锁定,数码管显示1号号码,并且一亮一暗的跳动,并伴有警告声。
5.2抢答或回答时间时间修改
如下图5.2所示,程序运行后点击“抢答时间调整”或“回答时间调整”,数码管显示初始倒计时时间30s,然后点击“加1”或者“减1”按钮,可根据自己需求调整抢答或回答时间。
图5.2
5.3正常倒计时
图5.3
如图5.3所示,调整抢答时间为26s后,先按停止键,使数码管显示初始状态,接着按下“确定”键,这是会有蜂鸣声出现。
抢答倒计时从26s开始,在26s内需要开始抢答,在最后5秒的时候,会发出警报声。
若在26s内无人抢答,则如图5.4所示,回到初始状态。
图5.4
5.4回答时间
若有人抢答,在抢答键按下时,也会有蜂鸣声。
则在数码管的第一位显示抢答者的号码,而且最后两位显示答题时间倒计时,如图5.5
图5.5
此时,抢答区按键被锁,无人可以抢答。
回答时间完结后,又出现如图5.4的现象。
5.5复位
按下复位键后,程序恢复初始状态。
六.程序的优缺点
优点:
此程序,较为简单明了,电路连接也不复杂,元器件使用也少,在硬件方面节省了材料。
缺点:
此程序较过简洁,若有时间可以更加拓展一下,而且,动态扫描的显示方式需占用CPU较多的时间,适用于单片机没有太多实时测控的任务场合。
七.收获和体会
通过此次课程设计,更加加深了对于单片机的了解,包括功能,芯片实现方式、结构,有哪些特殊规定。
而且也明白了,虽然单片机的汇编语言虽然与微机很相似,但是也不尽相同,比如,微机中有比较代码CMP,而单片机中没有,又如寻址方式中,立即寻址方式,微机中如:
MOVA,10H而在单片机中为:
MOVA,#10H。
也知道了,复位电路,晶振电路的模样,且对CPU的89C51芯片有了更为深入的理解。
也明白了,根据情况的不同,数码管可分为共阴极和共阳极,不同情况编写段代码也是不同的。
还有一点就是,我知道了将C语言如何导入到单片机中,虽然此次实验,我并没有用到,但是在设计之初也有过尝试。
步骤如下:
1.下载KEIL软件,然后再下载VDM51.dll插件,使得keilC51文件夹中Bin文件夹中出现此文件,然后再粘贴到PROTEUS文件夹下的MODELS文件夹下。
2.然后打开keil软件,project->
newproject,建立工程在PROTEUS所产生的DSN文件的同一个文件夹下,然后选择自己在PROTEUS中所选用的芯片
3.新建->
保存为.C格式。
右击如图所示中的SOURCEGROUP,选ADDFILESTOGROUP‘sourcegroup’,,然后打开所设立的C文件,编辑后,用PROJECT->
BUILD进行调制。
然后打开project->
option……,点击target,改变晶振大小,然后点击output,选中CreateHEXfile
4.然后点击
中的第一第二个图标,生成.hex文件。
5.然后双击proteus中的芯片,从
中导入。
八.创新部分
在抢答还未开始的时候,若是抢答键按下,则锁定,并有蜂鸣声
还可以对抢答时间或者回答时间进行调整。
按下复位键后,所有的都恢复到初始状态
九.参考文献
1.《89C51引脚图及功能》窝中【狼】
2.《89C51》广州周立功单片机发展有限公司(从CSDN上下载下来)
3.《led数码管介绍》
4.《微机原理与接口技术》刘永华,王成端;
清华大学出版社;
2006年出版
5.《微机原理及应用课程设计指导书》陈秋妹,黄静;
浙江理工大学信息电子学院2009年12月
6.《单片机原理及应用》李全利,仲伟峰,许军;
2006年2月第一版
附录一
附录二
OKEQU20H
RINGEQU22H
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT0SUB
ORG000BH
AJMPT0INT
ORG0013H
AJMPINT1SUB
ORG001BH
AJMPT1INT
ORG0040H
MAIN:
MOVR1,#30;
初设抢答时间为30s
MOVR2,#60;
初设答题时间为60s
MOVTMOD,#11H;
设置定时器工作于方式1
MOVTH0,#0FH
MOVTL0,#0B1H;
越高发声频率越高,越尖
50ms为一次溢出中断
SETBEA
SETBET0
SETBET1
SETBEX0
SETBEX1;
允许4个中断,T0/T1/INT0/INT1
SETBTR1
SETBTR0;
一开始就运行定时器,以开始显示FFF,若要重新计数,重置TH1/TL1就行
=====查询程序=======