基于单片机的8路抢答器的设计说明Word文档格式.docx
- 文档编号:16261323
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:16
- 大小:125.13KB
基于单片机的8路抢答器的设计说明Word文档格式.docx
《基于单片机的8路抢答器的设计说明Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的8路抢答器的设计说明Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
图3-2外部振荡电路
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:
一是帮助振荡器起振;
二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
3.3复位电路的设计
单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图4所示:
图3-3复位电路
在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。
软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。
3.1.4显示电路的设计
显示电路使用了七段数码管7SEG-MPX4-CC,它是共阴极的,由高电平点亮。
图3-4阴极七段数码管
4.1.5按钮输入电路的设计
抢答器的输入按钮使用常开开关,
图3-5抢答按键
这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”
现象就可以了。
这里采用最常用的方法即延时法,其的原理为:
因为“毛刺”脉冲一般持续时间短,约为几ms,而按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
3.1.6发声
这里能利用程序来控制单片机P3.6口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。
第四章系统软件设计
4.1程序系统结构图
硬件电路确定后,软件的编程要与硬件相匹配,软硬件才能结合完成所要实现的功能。
由功能分析得到以下的软件结构图:
图4-1软件系统结构图
4.2程序流程图
整个程序主要由定时器T0、定时器T1、外部中断0和主程序构成。
定时器T0用于使扬声器发声,当需要响铃时,把响铃标志位置一,每次中断都对P3.7取反,扬声器发声,改变定时器初值,可改变扬声器频率。
定时器程流程图如下:
图4-2响铃程序流程图
定时器T1用于倒计时,每次中断为50ms,当计数标志为20时即为一秒,显示数字减一。
其流程图如下:
图4-3倒计时中断流程图
外部中断0用于调整倒计时时间,流程图如下:
图4-4调整抢答时间流程图
主程序协调三个中断一起工作,实现抢答功能,其流程图如下:
图4-5主程序流程图
附录:
程序代码:
P3.0为开始抢答,P3.1为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2的低三位口,蜂鸣器输出为P3.6口。
ORG0000H
AJMPMAIN
ORG0003H
AJMPINT0SUB
ORG000BH
AJMPT0INT
ORG001BH
AJMPT1INT
OKEQU20H;
抢答开始标志位
RINGEQU22H;
响铃标志位
ORG0040H
MAIN:
MOVR1,#0FH;
初设抢答时间为15s
MOVR2,#0AH;
初设答题时间为10s
MOVTMOD,#11H;
设置未定时器/模式1
MOVTH0,#0F0H
MOVTL0,#0FFH;
越高发声频率越高,越尖
MOVTH1,#3CH
MOVTL1,#0B0H;
50ms为一次溢出中断
SETBEA
SETBET0
SETBET1
SETBEX0
SETBEX1;
允许四个中断,T0/T1/INT0/INT1
CLROK
CLRRING
SETBTR1
SETBTR0;
一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了
查询程序:
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只程序中判断是否查询抢答
MOVR3,#0AH;
抢答只显示计时,灭号数
AJMPCOUNT;
进入倒计时程序,"
查询有效抢答的程序"
在COUNT里面
NEXT:
JNBP1.0,FALSE1
JNBP1.1,FALSE2
JNBP1.2,FALSE3
JNBP1.3,FALSE4
JNBP1.4,FALSE5
JNBP1.5,FALSE6
JNBP1.6,FALSE7
JNBP1.7,FALSE8
AJMPSTART
非法抢答处理程序:
FALSE1:
按键发声
MOVR3,#01H
AJMPERROR
FALSE2:
ACALLBARK
MOVR3,#02H
FALSE3:
MOVR3,#03H
FALSE4:
MOVR3,#04H
FALSE5:
MOVR3,#05H
FALSE6:
MOVR3,#06H
FALSE7:
MOVR3,#07H
FALSE8:
MOVR3,#08H
倒计时程序(包括有效抢答程序):
COUNT:
MOVR0,#00H;
重置定时器中断次数
MOVTH1,#3CH
MOVTL1,#0B0H;
重置定时器
RECOUNT:
MOVA,R6;
R6保存了倒计时的时间
MOVB,#0AH
DIVAB;
除十分出个位/十位
MOV30H,A;
十位存于(30H)
MOV31H,B;
个位存于(31H)
MOVR5,30H;
取十位
MOVR4,31H;
取个位
MOVA,R6
CLRC
SUBBA,#07H
JNCLARGER;
大于5s跳到LARGER,小于等于5s会提醒
MOVA,R0
CJNEA,#0AH,FULL;
1s中0.5s向下运行
CLRRING
AJMPCHECK
FULL:
CJNEA,#14H,CHECK;
1s时,响并显示号数并清R0,重新计时
SETBRING
MOVA,R6
JZQUIT;
计时完毕
MOVR0,#00H
DECR6;
一秒标志减1
LARGER:
MOVA,R0
如果1s向下运行,否者跳到查"
停/显示"
DECR6;
计时一秒R6自动减1
CHECK:
JNBP3.1,QUIT;
如按下停止键退出
ACALLDISPLAY
JNBP1.0,TRUE1
JNBP1.1,TRUE2
JNBP1.2,TRUE3
JNBP1.3,TRUE4
JNBP1.4,TRUE5
JNBP1.5,TRUE6
JNBP1.6,TRUE7
JNBP1.7,TRUE8
AJMPRECOUNT
QUIT:
CLROK;
如果按下了"
停止键"
重新回到开始
ACALLBARK
AJMPSTART
正常抢答处理程序:
TRUE1:
MOVA,R2
MOVR6,A;
抢答时间R2送R6
CLROK;
AJMPLOOP2
TRUE2:
ACALLBARK;
MOVA,R2
MOVR6,A
MOVR3,#02H
CLROK
AJMPLOOP2
TRUE3:
MOVR3,#03H
TRUE4:
MOVA,R2
MOVR3,#04H
CLROK
TRUE5:
ACALLBARK;
MOVR6,A
TRUE6:
TRUE7:
TRUE8:
LOOP2:
AJMPDISPLAY;
抢答后停止计时,等待返回
SETBRING
JNBP3.1QUIT
犯规抢答程序:
ERROR:
SETBRING;
犯规响铃
MOVR4,#0BH;
显示FF和犯规号数
LOOP3:
ACALLDISPLAY
JNBP3.1QUIT1;
等待“停止”键按下
AJMPLOOP3
QUIT1:
AJMPSTART
显示程序:
DISPLAY:
MOVDPTR,#DAT1;
查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出
MOVA,R5
MOVCA,A+DPTR
MOVP2,#01H
MOVP0,A
ACALLDELAY
MOVDPTR,#DAT2
MOVA,R4
MOVCA,A+DPTR
MOVP2,#02H
MOVP0,A
MOVA,R3
MOVCA,A+DPTR
MOVP2,#04H
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
DELAY1:
MOV35H,#08H
LOOP0:
ACALLDISPLAY
DJNZ35H,LOOP0
延时(显示和去抖动用到):
DELAY:
MOV32H,#12H
LOOP:
MOV33H,#0AFH
LOOP1:
DJNZ33H,LOOP1
DJNZ32H,LOOP
发声程序:
BARK:
SETBRING
ACALLDELAY1
CLRRING;
RET
INT0(抢答时间R1调整程序):
INT0SUB:
MOVA,R1
MOVB,#0AH
DIVAB
MOVR5,A
MOVR4,B
MOVR3,#0AH
ACALLDISPLAY;
先在两个时间LED上显示R1
JNBP3.2,INC0;
P3.2为+1s键,如按下跳到INCO
JNBP3.3,DEC0;
P3.3为-1s键,如按下跳到DECO
JNBP3.4,BACK0;
P3.4为确定键,如按下跳到BACKO
INC0:
CJNEA,#63H,ADD0;
如果不是99,R2加1,如果加到99了,R1就置0,重新加起
MOVR1,#00H
AJMPINT0SUB
ADD0:
INCR1
DEC0:
JZSETR1;
如果R1为0,R1就置99,
DECR1
SETR1:
MOVR1,#63H
BACK0:
RETI
TO溢出中断(响铃程序):
T0INT:
MOVTH0,#0ECH
MOVTL0,#0FFH
JNBRING,OUT
CPLP3.6;
RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音
OUT:
T1溢出中断(计时程序):
T1INT:
MOVTL1,#0B0H
INCR0
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 抢答 设计 说明