基于单片机竞赛抢答器系统设计
3 系统程序设计
3.1 主程序
任何控制系统开始正常工作前都必须要进行初始化,本设计抢答器正常工作时,对系统初始化,扫描P3.0口,判断是否有低电平,即开始按键是否按下。如果“开始”键没有被按下,那么在扫描选手键是否被按下。如果有选手按下,就是非法抢答需要使用非法抢答子程序。如果“开始”键按下后,选手键才被按下,那么就是正常抢答,此时就是执行正常抢答程序。
本部分的程序主要就是初始设置,包括中断和相关的系统参数。中断在设计中需要考虑某个中断源是否允许,中断优先级和对于一些特殊的中断需要特定的设置。本设计的特殊的中断主要是定时/计数器和外部中断;首先需要确定定时/计数器的功能,在使用前确定是定时模式。在设计中在确定了定时功能模式后,定时/计数器将有多种工作方式可供选择,本设计采用方式一。该工作方式下,定时初值没有重新装填的功能。定时的初始值存放在TH0、TH1、TL0和TL1中。定时/计数器还需要设定其启动方式,本文中采用软件启动方式。具体实现为:MOV TMOD, #11H ,定时/计数器的启动由定时/计数器控制寄存器TCON中的TR0和TR1的置位实现。外部中断不仅需要设置中断优先和中断允许还需要设置中断的触发方式。本文程序设计中采用边沿触发方式。通过定时/计数器控制寄存器TCON中的IT0和IT1确定。置位表示边沿触发方式。反之为电平触发方式。指令的实现方法为: SETB IT0。
只要有中断程序响应,系统就会自动的将程序指针的PC值调到对应的中断服务的入口地址之上。在51系列单片机中,中断服务程序会大于8个字节,而中断服务程序入口地址后只分配8字节的程序空间,故需使用跳转指令跳转至存储器空间中的适当位置。有中断被响应,现在正在执行的程序会被暂停,同时进行保护,然后去执行刚刚的中断程序。这时将涉及到断点保护和现场保护的问题。断点保护由单片机内部自动完成,不需要外界干预。但是,现场保护是通过PUSH和POP指令完成的,也就是说通过软件设置现场保护的。堆栈的深度也可以根据设计的实际情况重新设定。如果不进行设定,SP的值将为07H,堆栈深度为24B。大量的程序初始参数都需要在初始化的时候被设定,这样的话在程序运行的时候就可以方便的调用这些数据进行运算,这些数据的设定能直接影响程序的运行,需要小心设置。
10
盐城工学院本科生毕业设计说明书( 2013)
主程序流程图如下:
开始初始化显示FFF时间调整子程序是P3.2和P3.3是否按下?否返回否P3.0是否按下?否是否有抢答键按下?是是倒计时子程序非法抢答子程序显示子程序报警子程序正常抢答处理程序返回结束图3-1主程序流程图
11
基于单片机竞赛抢答器系统设计
3.2 正常抢答
正常抢答是在“开始”按钮,被按下后进行的抢答。程序实现了第一抢答选手的编号的锁存功能。正常抢答流程图如下:
开始响声提示设置定时器初值,启动30秒倒计时30秒内显示抢答的抢答者编号回答问题的60秒倒计时RET图3-2正常抢答程序流程图
12
盐城工学院本科生毕业设计说明书( 2013)
3.3 犯规抢答
在主持人未按下“开始”键时,为了保证比赛的公平,专门设计里对于非法抢答选手进行警告的程序。当非法抢答事件发生的时候,数码管显示多少号选手发生非法抢答,同时会跳到非法抢答子程序上。
犯规抢答流程图如下:
是将犯规号送到R3开始P1.0按下?否P1.1按下?否是犯规抢答程序P1.2按下?否是返回P1.3按下?否是P1.4按下?否是P1.5按下?否是P1.6按下?否是P1.7按下?是图3-3 犯规抢答程序流程图
13
基于单片机竞赛抢答器系统设计
3.4 显示程序
数码管是采用共阴极的数码管,将数码管的公共端接到低电平上,在给数码管A到H脚接上一个高电平就可以是对应的二极管发亮。程序设置P0和P2口,完成数码管的数字显示和数码管位的选择。 3.5 报警程序
蜂鸣器通过P3.6发出控制信号来控制三极管导通和关断,从而使蜂鸣器发声。当RING标志位为1时候P3.6口不断取反使喇叭发出一定频率的声音。 3.6 抢答时间调整子程序
改抢答器的时间是可以通过按键在量程内自由修改的,再按下“抢答时间调整按钮”或者“回答时间调整按钮”后,数码管上会显示已经设定好的时间,如果不满意可以按下“加一”按钮进行时间上的加一。如果想减1S,按下“减一”键。LED显示装置会自动显示修改后的抢答时间。时间只能在0到99之内调节,如果超过99,就会变成0。如果低于0就会变为99。回答时间的调整与此类似。
抢答时间调整子程序流程图如下:
14