单片机课程设计(最终版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
天津机电职业技术学院《单片机原理及应用》课程设计
专业电气自动化
班级09级电气自动化(二)班
姓名刘瑞
学号200912056
2011年6月
目录
摘要及关键词 (1)
一、方案设计与论证 (2)
二、设计思路 (3)
三、总体设计 (3)
3.1功能介绍 (7)
3.2抢答器的工作原理 (4)
四、单元设计 (5)
4.1硬件模块 (6)
4.2各模块方案选择 (6)
五、系统软件设计 (9)
5.1主程序系统结构图 (9)
5.2程序流程图 (10)
5.3系统程序 (11)
5.4调试过程(Proteus仿真调试) (22)
六、心得体会 (25)
七、参考文献 (25)
附:设计总图 (26)
单片机控制抢答器
摘要
抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。
但抢答器的使用频率较低,且有的要么制作复杂,要么可靠性低。
作为一个单位,如果专门购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展,因此设计了本抢答器。
本设计是以四路抢答为基本理念。
考虑到依需设定限时回答的功能,利用AT89C52
单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。
用开关做键盘输出,扬声器发生提示。
同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-99s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。
【关键词】抢答器单片机独立式键盘proteus LED数码显示器
一、方案设计与论证
方案一:系统各部分采用中小规模集成数字电路,用机械开关按钮作为控制开关,完成抢答输入信号的触发。
该方案的特点是中小规模集成电路应用技术成熟,性能可靠,能方便地完成选手抢答的基本功能,但是由于系统功能要求较高,所以电路连接集成电路相对较多,而且过于复杂,并且制作过程工序比较烦琐,使用不太方便。
方案二:该系统采用51系列单片机AT89C52作为
控制核心,该系统可以完成运算控制、信号识别以及
显示功能的实现。
由于用了单片机,使其技术比较成
熟,应用起来方便、简单并且单片机周围的辅助电路
也比较少,便于控制和实现。
整个系统具有极其灵活
的可编程性,能方便地对系统进行功能的扩张和更
改。
MCS-51单片机特点如下:
<1>可靠性好:单片机按照工业控制要求设计,
抵抗工业噪声干扰优于一般的CPU,程序指令和数
据都可以写在ROM里,许多信号通道都在同一芯
片,因此可靠性高,易扩充。
<2>单片机有一般电脑所必须的器件,如三态双
向总线,串并行的输入及输出引脚,可扩充为各种规
模的微电脑系统。
<3>控制功能强:单片机指令除了输入输出指
令,逻辑判断指令外还有更丰富的条件分支跳跃指
令。
方案比较及其选用依据,显然方案二比方案一简
单的多,不但从性能上优于方案一,而且在使用上及
其功能的实现上都较方案一简洁,并且由于单片机具有优越的高集成电路性,使其工作速度更快、效率更高。
另外89C52单片机采用12MHz的晶振,提高了信号的测量精度,并且使该系统可以通过软件改进来扩张功能。
而方案一采用了中小规模集成电路,有其复杂
的电路性能,从而可能会使信号的输入输出产生延时及不必要的误差。
依此依据选择方案二比较适合。
二、设计思路
系统设计主要包括硬件和软件两大部分,依据控制系统的工作原理和技术性能,将硬件和软件分开设计。
硬件设计部分包括电路原理图、合理选择元器件、绘制线路图,然后对硬件进行调试、测试,以达到设计要求。
软件设计部分,首先在总体设计中完成系统总框图和各模块的功能设计,拟定详细的工作计划;然后进行具体设计,包括各模块的流程图,选择合适的编程语言和工具,进行代码设计等;最后是对软件进行调试、测试,达到所需功能要求。
在系统设计中设计方法的选用是系统设计能否成功的关键。
硬件电路是采用结构化系统设计方法,该方法保证设计电路的标准化、模块化。
硬件电路的设计最重要的选择用于控制的单片机,并确定与之配套的外围芯片,使所设计的系统既经济又高性能。
硬件电路设计还包括输入输出接口设计,画出详细电路图,标出芯片的型号、器件参数值,根据电路图在仿真机上进行调试,发现设计不当及时修改,最终达到设计目的。
软件设计的方法与开发环境的选取有着直接的关系,本系统由于是采用51系列单片机,使用汇编语言进行开发。
此编程工具相比汇编语言具有结构化、适用范围大、可移植性好等特点。
本系统软件设计采用模块化系统设计方法,先编写各个功能模块子程序,然后进行组合与调整,经过调试后,达到设计功能要求。
三、总体设计
3.1功能介绍
1)如果想调节抢答时间或答题时间,按"抢答时间调节"键或"答题时间调节"键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下"加1s"键,如果想减一秒按一下"-1s"键,时间LED上会显示改变后的时间,调整范围为0s~99s,0s时再减1s
会跳到99,99s时再加1s会变到0s。
2)主持人按"抢答开始"键,会有提示音,并立刻进入抢答倒计时(预设15s抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设10s抢答时间),
不进行抢答查询,所以只有第一个按抢答的选手有效。
倒数时间到小于5s会每秒响一下提示音。
3)如倒计时期间,主持人想停止倒计时可以随时按"停止"按键,系统会自动进入准备状态,等待主持人按"抢答开始"进入下次抢答计时。
4)如果主持人未按"抢答开始"键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF和犯规号数并响个不停,直到按下"停止"键为止。
3.2抢答器的工作原理
抢答器的工作原理是利用单片机的定时器T0、T1中断完成,其余状态循环调用显示子程序,用4个共阳极LED数码管以及四个LED发光二极管来显示,用P0口作为数码管的八个段选,用P2口中的P2.0、P2.1、P2.2、P2.3作为4个数码管其中4个位选,P1口接4个按键,提供选手抢答,P3.0-P3.5四个接四个按键,提供开始、结束、答题时间调整、抢答时间调整,加1、减1调整之用。
1)抢答功能:
通过八路按键配合程序来实现抢答功能。
当主持人按下抢答键开始抢答后,此时任一路按下按钮均闭锁其它各路,由程序对键盘译码并显示最先按下抢答键的路数及其当前时间。
2)抢答限时:
主持人按下抢答键后,设置15秒为抢答时间(此时间可在1-99秒之间修改)。
若15秒内无人抢答,倒计时为0时发出报警,说明该抢答题目作废。
此时闭锁所有抢答按键,只有当主持人再次按下抢答键开始下一次抢答方可抢答。
3)答题限时:
当选手按下按钮时,启动倒计时(此倒计时时间可在1~99秒之间修改),倒计时为0时发出报警,说明答题时间到。
四、单元设计
4.1硬件模块
硬件框图:
4.2各模块方案选择:
4.2.1键盘方式的选择
方案一:独立式键盘
键盘接口中使用多少根I/O 线,键盘中就有几个按键,
键盘接口使用了8根I/O 口线,该键盘就有8个按键,这种
类型的键盘,其按键比较少,且键盘中各按键的工作互不干
扰。
因此可以根据实际需要对键盘中的按键灵活的编码。
如
图。
最简单的编码方式就是根据I/O 输入口所直接反映的
相应按键,按下的状态进行编码,称按键直接状态码,对于
这样编码的独立式键盘,CPU 可以通过直接读取I/O 口的单片机八
路
抢
答
按
控
制
按三个数码管
蜂鸣
器
时间调整
复位电路P101234567
独立式键盘
状态来获取按键的直接状态编码值,根据这个值直接进行按键识别,这样形式的键盘结构简单,按键识别容易。
独立式键盘的缺点是需要占用比较多的I/O 口线,当单片机应用系统键盘中需要的按键比较少或I/O 口线比较富余时,可以采用这样类型的键盘。
方案二:行列式键盘
行列式键盘是用N 条I/O 线作为行
线,M 条I/O 线作为列线组成的键盘,在
行线和列线的每个交叉点上,设置一个按
键中按键的个数是M*N 个。
这种形式的
键盘结构,能够有效的提高单片机系统中
I/O 的利用率,列线接P1.0~P1.3行线接
P1.4~P1.7,行列适用于按键输入多的情
况。
CPU 对键盘的扫描可以采用取程序控制的随机方式,即只有在CPU 空闲是时才去扫描键盘,响应操作人员的键盘输入,但CPU 在执行应用程序的过程中,不能响应键盘输入,对键盘的扫描可以采用定时方式,即利用单片机内部定时器每隔一定时间对键盘扫描一次,这样控制方式,不管键盘上有无键闭合,CPU 总是定时的关心键盘状态。
在大多数情况下,CPU 对键盘可能进行空扫描。
为了提高CPU 的效率而又能及时响应键盘输入,可以采用中断方式,既CPU 平时不必扫描键盘,只要当键盘上有键盘闭合时就产生中断请求,向CPU 申请中断后,立即对键盘上有键盘进性扫描,识别闭合键,并做相应的处理。
根据以上的论述,采用方案一,在本系统中采用了独立式键盘,其按键比较少,且键盘中各个按键的工作互不干扰。
其次就是消除在按键过程中产生的“毛刺”现象。
这里采用最常用的方法,即延时重复扫描法,重复法的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms ,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。
注意,以上两种键盘接入方式都需要运用软件来进行消抖,一般用软件延时10~20ms 。
4.2.2显示模块1数码管显示
行列式键盘
LED数码管是一种有LED发光二极管组合显示字符的显示器件。
它使用了8个LED发光二极管,其中7个用于显示字符,一个用于显示小数点,故通常称之为8段发光二极管数码器。
其内部结构如下图所示:
LED数码显示器有如下两种连接方法:
a.共阳极接法:把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。
b.共阴极接法:把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。
每个发光二极管的阳极通过电阻与输入端相连。
经比较,本次设计采用第一种接法。
显示方式:
方案一:显示部分采用静态显示
所谓静态显示,就是每一个显示器都要占用一个独立的具有锁存功能的接口用于存储字形码。
这样单片机只要把要显示的字形代码发送到接口电路,从而输送至各数码管显示。
被显示的数据只要输出一次,直到要显示新的数据时,再发送新的字形码。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
方案二:显示部分采用动态显示
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
动态显示是利用人眼视觉暂留特性来实现显示的。
事实上,显示器上任何时刻只有一个数码管有显示。
由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因此看到的是连续显示的现象。
为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。
本设计可采用P0口直接驱动七段数码管显示。
此方案成本低,而且单片机的I/O口占用较少,可以节约单片机接口资源,而且功耗更低。
根据以上论证,采用方案二。
2LED发光二极管显示
发光二极管同数码管一样,也有两种接法:共阳极与共阴极,本设计采用的是共阳极接法。
4.2.3复位模块
该复位电路采用上电自动复位和手动复位两种复位方
式,图中网络标号所指9连接到单片机的复位引脚。
要实现
复位只需在,51系列单片机的RESET引脚上加上5ms的高电平就可以了。
上电复位是利用电容的充电来实现的,即上电瞬间RESET端的电位与Vcc相同,随着电容上储能增加,
C4
10u R15
10k
电容电压也逐渐增大,充电电流减小,RESET 端的电位。
这样就会建立一个脉冲电压,调节电容与电阻的大小可对脉冲的持续时间进行调节。
通常若采用12MHz 的晶振时,复位元件参数为10μF 的电解电容和10k Ω的电阻。
按钮复位电路是通过按下复位按钮时,电源对RESET 端维持两个机器周期的高电平实现复位的。
4.2.4时钟频率模块
单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms 后振荡器起振,在XTAL2引脚产生幅度为3V 左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:一是帮助振荡器起振;
二是对振荡器的频率进行微调。
C1,C2的典型值为30PF 。
单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。
其大小是时钟信号频率的倒数,常用fosc 表示。
如时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs 。
五、系统软件设计5.1主程序系统结构图
软件系统结构图
18
193031
29
912345678U1
AT89C52
X1
CRYSTAL
C1
30pF
C2
30pF
5.2程序流程图
在本设计中包括了以下八个主要的程序:主程序;非法抢答序;抢答时间调整程序;回答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。
主流程图如2-6所示:
图2-6程序设计流程图
5.3系统程序
定时器T1时间初值:
设50ms时间初值为Z,Z的计算方法为
(216-Z)×12=12×50×103,结果Z=15536D=3CB0H
输出点的设置
输出点功能
P0显示器的字形码
P1.0~P1.3选手抢答指示灯
P1.4~P1.7选手抢答器输入
P2.0~P2.3显示器的位控端
P3.0开始键
P3.1停止键
P3.2抢答时间调整键
P3.3回答时间调整键
P3.4时间加一键
P3.5时间减一键
P3.6开始抢答指示灯
P3.7蜂鸣器
内存设置
单元名称地址初值
抢答时间30H0FH
答题时间31H0AH
选手编号32H0BH
显示缓存区(个位)33H0BH
显示缓冲区(十位)34H0BH 计数值35H00H
位控码40H0F7H
OK EQU20H;抢答开始标志位
RING EQU22H;响铃标志位
ORG0000H
AJMP MAIN
ORG0003H
AJMP INT0SUB;转到抢答时间调整程序
ORG000BH
AJMP T0INT;转到响铃程序
ORG0013H
AJMP INT1SUB;转到回答时间调整程序
ORG001BH
AJMP T1INT;转到计时程序
ORG0040H
MAIN:MOV30H,#0FH;初设抢答时间为15s
MOV31H,#0AH;初设回答时间为10s
MOV TMOD,#11H;设置定时器T0、T1方式定时
MOV TH0,#0F0H
MOV TL0,#0FFH;越高发声频率越高,越尖
MOV TH1,#3CH
MOV TL1,#0B0H;50ms为一次溢出中断
SETB EA
SETB ET0
SETB ET1
SETB EX0
SETB EX1;允许四个中断,T0\T1\INT0\INT1
CLR OK;抢答开始标志位清零,禁止抢答
CLR RING;响铃标志位清零,铃不响
SETB TR1
SETB TR0;一开始就运行定时器,一开始显示FFF。
如果想重新计数,
重置TH1\TL1就行了
;######查询程序######
START:MOV P1,#0FFH
MOV34H,#0BH;显示缓冲区(十位)赋初值“F”
MOV33H,#0BH;显示缓冲区(个位)赋初值“F”
MOV32H,#0BH;选手编号赋初值“F”
ACALL DISPLAY;调显示,未开始抢答时显示“F-FF”
JB P3.0,NEXT;检测“开始键”是否按下
ACALL DELAY;去抖动,调延时
JB P3.0,NEXT;如果“开始键”按下就向下执行,否则跳到非法抢答查询ACALL BARK;按键发声
CLR P3.6;抢答标志灯亮起
MOV R1,30H;将30H的内容送到R1里面去,因为30H中放的是抢答时间SETB OK;抢答标志位,用于COUNT子程序中判断是否查询抢答
MOV32H,#0AH;抢答时只显示计时,不显示选手编号
AJMP COUNT;进入倒计时程序,“查询有效抢答的程序”在COUNT里面NEXT:JNB P1.4,FALSE1
JNB P1.5,FALSE2
JNB P1.6,FALSE3
JNB P1.7,FALSE4;如果选手在主持人未按下“开始键”时就抢答器,跳转到
非法抢答处理程序
AJMP START
;######非法抢答处理程序######
FALSE1:ACALL BARK;按键发声
MOV32H,#01H
AJMP ERROR
FALSE2:ACALL BARK
MOV32H,#02H
AJMP ERROR
FALSE3:ACALL BARK
MOV32H,#03H
AJMP ERROR
FALSE4:ACALL BARK
MOV32H,#04H
AJMP ERROR
;######INT0(抢答时间30H调整程序)######
INT0SUB:MOV A,30H
MOV B,#0AH
DIV AB
MOV34H,A
MOV33H,B
MOV32H,#0AH
ACALL DISPLAY;先在两个时间LED上显示30H
JNB P3.4,INC0;P3.4为+1s键,如按下跳到INT0
JNB P3.5,DEC0;P3.5为-1s键,如按下跳到DEC0
JNB P3.1,BACK0;P3.1为确定键,如按下跳到BACK0
AJMP INT0SUB
INC0:MOV A,30H
CJNE A,#63H,ADD0;如果不是99,30H内容加1,如果加到99了,30H就
置0,重新加起
MOV30H,#00H
ACALL DELAY1
AJMP INT0SUB
ADD0:INC30H
ACALL DELAY1
AJMP INT0SUB
DEC0:MOV A,30H
JZ SETR1;如果30H的内容为0,30H就置99
DEC30H
ACALL DELAY1
AJMP INT0SUB
SETR1:MOV30H,#63H
ACALL DELAY1
AJMP INT0SUB
BACK0:RETI
;######INT1(回答时间31H调整程序)######
INT1SUB:MOV A,31H
MOV B,#0AH
DIV AB
MOV34H,A
MOV33H,B
MOV32H,#0AH
ACALL DISPLAY;先在两个时间LED上显示31H
JNB P3.4,INC1;P3.4为+1s键,如按下跳到INT1
JNB P3.5,DEC1;P3.5为-1s键,如按下跳到DEC1
JNB P3.1,BACK1;P3.1为确定键,如按下跳到BACK1
AJMP INT1SUB
INC1:MOV A,31H
CJNE A,#63H,ADD1;如果不是99,30H内容加1,如果加到99了,30H就
置0,重新加起
MOV31,#00H
ACALL DELAY1
AJMP INT1SUB
ADD1:INC31H
ACALL DELAY1
AJMP INT1SUB
DEC1:MOV A,31H
JZ SETR2;如果30H的内容为0,30H就置99
DEC31H
ACALL DELAY1
AJMP INT1SUB
SETR2:MOV31H,#63H
ACALL DELAY1
AJMP INT1SUB
BACK1:RETI
;######倒计时程序(抢答倒计时和回答倒计时都跳到该程序)######
COUNT:MOV35H,#00H;重置定时器中断次数
MOV TH1,3CH
MOV TL1,0B0H;重置定时器
RECOUNT:MOV A,R1;R1保存了倒计时的时间,之前先将抢答时间或回
答时间给R1
MOV B,#0AH
DIV AB;除十分出个位\十位
MOV34H,A;十位存于(34H)
MOV33H,B;个位存于(33H)
MOV A,R1
SUBB A,#05H
JNC LARGER;大于5s跳到LARGER,小于等于5s会提醒
MOV A,35H
CJNE A,#0AH,FULL;1s中0.5s向下运行
CLR RING
AJMP CHECK
FULL:CJNE A,#14H,CHECK;下面是1s的情况,响并显示号数,R0清零,重
新计时
SETB RING
MOV A,R1
JZ QUIT;计时完毕
MOV35H,#00H
DEC R1;一秒标志位减1
AJMP CHECK
LARGER:MOV A,35H
CJNE A,#14H,CHECK;如果1s向下运行,否则跳到“停\显示”
DEC R1;计时一秒R1自动减1
MOV35H,#00H
CHECK:JNB P3.1,QUIT;如按下停止键退出
ACALL DISPLAY
JB OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否则跳过查询
继续倒数(这里起到锁抢答作用)
AJMP RECOUNT
ACCOUT:JNB P1.4,TRUE1
JNB P1.5,TRUE2
JNB P1.6,TRUE3
JNB P1.7,TRUE4
AJMP RECOUNT
QUIT:CLR OK;如果按下了“停止键”执行的程序CLR RING
SETB P3.6
AJMP START
;######正常抢答处理程序######
TRUE1:ACALL BARK;按键发声
MOV R1,31H;答题时间(31H)送R1
MOV32H,#01H
CLR OK;因为答题的计时不再查询抢答,所以就锁了抢答
SETB P3.6
MOV P1,#0FEH
AJMP COUNT
TRUE2:ACALL BARK
MOV R1,31H
MOV32H,#02H
CLR OK
SETB P3.6
MOV P1,#0FDH
AJMP COUNT
TRUE3:ACALL BARK
MOV R1,31H
MOV32H,#03H
CLR OK
SETB P3.6
MOV P1,#0FBH
AJMP COUNT
TRUE4:ACALL BARK
MOV R1,31H
MOV32H,#04H
CLR OK
SETB P3.6
MOV P1,#0F7H
AJMP COUNT
;######犯规抢答程序######
ERROR:MOV35H,#00H
MOV TH1,#3CH
MOV TL1,0B0H
MOV R2,32H;犯规号数暂存于R2 HERE:MOV A,35H
CJNE A,#0AH,FLASH;0.5s向下运行,灭并停响
CLR RING
MOV32H,#0AH
MOV33H,#0AH
MOV34H,#0AH;三灯全灭
AJMP CHECK1
FLASH:CJNE A,#14H,CHECK1;下面是1s的情况,响并显示号数,R0清零重新计时SETB RING
MOV35H,#00H
MOV32H,R2;取回号数
MOV34H,#0BH
MOV33H,#0BH;显示FF和号数
AJMP CHECK1
CHECK1:JNB P3.1,QUIT1
ACALL DISPLAY
AJMP HERE
QUIT1:CLR RING
CLR OK
AJMP START
;######显示程序######
DISPLAY:MOV DPTR,#TAB;字形表首地址
MOV40H,#0F7H;从最右端LED开始显示
MOV P2,40H;取位选控制字
MOV A,33H;秒数个位内容送A
MOVC A,@A+DPTR;查表取字形码
MOV P0,A;字形码送P0口
LCALL DELAY2;调延时
MOV P0,#0FFH;P0口清零
MOV A,40H;位选送A
RR A;位选移位
MOV40H,A;保存位选控制字
MOV P2,40H;显示下一位
MOV A,34H;秒数十位内容送A
MOVC A,@A+DPTR;查表取字形码
MOV P0,A;字形码送P0口
LCALL DELAY2;调延时
MOV P0,#0FFH;P0口清零
MOV A,40H;位选送A
RR A;位选移位
MOV40H,A;保存位选控制字
MOV P2,40H
MOV P0,#0BFH
LCALL DELAY2
MOV P0,#0FFH
MOV A,40H
RR A
MOV40H,A
MOV P2,40H;显示下一位
MOV A,32H;选手编号送A
MOVC A,@A+DPTR;查表取字形码
MOV P0,A;字形码送P0口
LCALL DELAY2;调延时
RET
TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H
DB82H,0F8H,80H,90H,0FFH,8EH
;######加减时间延时(起到不会按下就加N个数)######
DELAY1:MOV R7,#08H
LOOP0:ACALL DISPLAY
DJNZ R7,LOOP0
RET
;######去抖动延时(10ms)######
DELAY:MOV R6,#20H
LOOP:MOV R5,#00H
LOOP1:DJNZ R5,LOOP1
DJNZ R6,LOOP
RET
;#######显示延时(1ms)######
DELAY2:MOV R4,#10H
DD2:MOV R3,#50H
DJNZ R3,$
DJNZ R4,DD2
RET
;#######发声程序######
BARK:SETB RING
ACALL DELAY1
ACALL DELAY1
CLR RING;按键发声
RET
;#######T0溢出中断(响铃程序)######
T0INT:MOV TH0,#0ECH
MOV TL0,#0FFH
JNB RING,OUT
CPL P3.7;RING标志位为一时P3.7口不断取反使喇叭发出一定频率的声音OUT:RETI
;#######T1溢出中断(计时程序)######
T1INT:MOV TH1,#3CH
MOV TL1,#0B0H
INC35H
RETI
END
5.4调试过程(Proteus仿真调试):
(1)上电后的初始界面:
(2)主持人未按“抢答开始”键而有人按了抢答键,犯规抢答:
(3)抢答时间调整:
(4)回答时间调整:
(5)有人抢答后开始倒计时且显示抢答号码:
六、课程设计的心得体会
这次课程设计老师给我们安排了一个星期的时间,可以说是比较充裕的,但也因为刚好是碰到复习周,所以又很多事要做。
虽然如此,我还是很用心的做设计。
在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。
特别是Proteus仿真软件的使用,不知是由于电脑的问题还是怎么,这个软件的安装就花了我很长的时间,好不容易安装好了,又对软件的使用一点都不熟悉,要从头开始学起,对着老师发给我们的芯片原理进行仿真画图,刚刚开始时候真的很难下手,因为是英文版的软件,很多东西都看不太明白,都是通过自己一个个来慢慢琢磨,才把仿真图画了出来,然后把写好的程序导入芯片,进行仿真,当看到程序正常运行的那一刻,心中真是有几分的喜悦。
生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
虽然这只是一次的较简单的课程制作(抢答器),可是平心而论,也耗费了我不少的心血。
七、参考文献
[1]吴晓苏张中明.单片机原理与接口技术.北京:人民邮电出版社,2009
[2]丁元杰.单片微机原理及应用.3版.北京:机械工业出版社,2006
[3]严天峰.单片机应用系统设计与仿真调试.北京:北京航空航天大学出版社,2005
[4]杨振江.流行单片实用子程序及应用实例.西安:电子科技大学出版社,2002
[5]周润景.Proteus入门实用教程.北京:机械工业出版社,2007
附:抢答器总图。