单片机课程设计(论文)-基于单片机的四路抢答器设计内容摘要:

键盘是人与微机系统打交道的主要设备。 关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也提供了相应的键盘扫描程序。 站在系统监控软件设计的立场上来看,仅仅完成键盘扫描,读取当前时刻的键盘状态是不够的,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引 7 起误操作和操作失控现象。 在单片机应 用中键盘用得最多的形式是独立键盘及矩阵键盘。 图 25 独立键盘 它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优 势得多,因此它更适合于多按键电路。 其次就是消除在按键过程中产生的 “毛刺 ”现象。 这里采用最常用的方法,即延时重复扫描法,延时法的原理为:因为 “毛刺 ”脉冲一般持续时间短,约为几 ms,而我们按键的时间一般远远大于这个时间 ,所以当单片机检测到有按键动静后再延时一段时间 (这里我们取 10ms)后再判断此电平是否保持原状态 ,如果是则为有效按键,否则无效。 发声 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的 “高 ”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就 8 能发出一 定频率的声音,若再利用延时程序控制 “高 ”“低 ”电平的持续时间,就能改变输出频率,从而改变音调,使喇叭发出不同的声音。 系统复位 使 CPU 进入初始状态,从 0000H 地址开始执行程序的过程叫系统复位。 从实现系统复位的方法来看,系统复位可分为硬件复位和软件复位。 硬件复位必须通过 CPU外部的硬件电路给 CPU 的 RESET 端加上足够时间的高电位才能实现。 上电复位,人工按钮复位和硬件看门狗复位均为硬件复位。 硬件复位后,各专用寄存器的状态均被初始化,且对片内通用寄存器的内容没有影响。 但是,硬件复位还能自动清除中断激活标志,使中断系统能够正常工作,这样一个事实却容易为不少编码人员所忽视。 软件复位就是用一系列指令来模拟硬件复位功能,最后通过转移指令使程序从 0000H地址开始执行。 对各专用寄存器的复位操作是容易的,也没有必要完全模拟,可根据实际需要去主程序初始化过程中完成。 而对中断激活标志的清除工作常被遗忘,因为它没有明确的位地址可供编程。 有的编程人员用 020200( LJMP 0000H)作为软件陷阱,认为直接转向 0000H 地址就完成了软件复位,就是这类错误的典型代表。 软件复位是使用软件陷阱和软件看门狗后必须进行的工作 ,这时程序出错完全有可能发生在中断子程序中,中断激活标志已置位,它将阻止同级中断响应。 由于软件看门是高级中断,它将阻止说要中断响应,由此可见清除中断激活标志的重要性。 在所有的指令中,只有 RETI 指令能够清除中断激活标志。 前文各处提案到的出错处理程序 ERR 主要完成这一功能,其他的善后工作交由复位后的系统去完成。 这部分程序如下: POWER DATA 67H ;上电标志存放单元 ERR: CLR EA ;关中断 MOV DPTR,ERR1 ;准备返回地址 PUSH DPL PUSH DPH RETI ;清除高级中断激活标志 ERR1: MOV POWER,0AAH;重建上电标志 CLR A ;准备复位地址 PUSH ACC ;压入复位地址 0000H 9 PUSH ACC RETI ;清除低级中断激活标志,从程序 0000H 开始执行。 这段程序先关中断,以便后续处理能顺利进行,然后用两个 RETI 指令代替两个LJMP 指令,从而清除了两级中断激活标志。 有相应软件陷阱捕捉来的程序可能没有全部激活两个标志,这也无妨。 第 3 章 抢答器的 软件设计 主程序系统结构图 如图 31 所示为总体原理框图。 其工作原理为:接通电源后,主持人将开光 FW拨到 “清零 ”状态,抢答器处于禁止状态,编号显示器灭灯,定时器 显示设定时间;主持人将开光置 “开始 ”状态,宣布 “开始 ”抢答器工作。 定时器开始倒计时。 选手在 规定的 30s 定时时间内抢答时,抢答器完成:优先判断、编号显示、扬声器提示,倒计时显示。 当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。 如果再次抢答必须由主持人再次操作 “清除 ”和 “开始 ”状态开关。 图 31 总体原理框图 10 程序流程图 在本设计中包括了以下八个主要的程序:主程序;非法抢答序;抢答时间调整程序;回答时间调整程序;倒计时程序;正常抢答处理程序;犯规处理程序;显示及发声程序。 主流程图如 图 32 所示: 图 32 主流程图 11 第 4 章 系统 源 程序 为开始抢答, 为停止, 为 四 路抢答输入 数码管段选 P0 口,位选 P2 口,蜂鸣器输出为 口。 OK EQU 20H。 抢答开始标志位 ORG 0000H AJMP MAIN ORG 0003H AJMP INT0SUB ORG 000BH AJMP T0INT ORG 0013H AJMP INT1SUB ORG 001BH AJMP T1INT ORG 0040H MAIN: MOV R1,0FH。 初设抢答时间为 15s MOV R2,0AH。 初设答题时间为 10s MOV TMOD,10H。 设置未定时器 /模式 1 MOV TH0,0F0H MOV TL0,0FFH。 越高发声频率越高 ,越尖 MOV TH1,3CH 12 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。 一开始就运行定时器 ,以开始显示 ,重置 TH1/TL1 就可以了 查询程序 : START: MOV R5,0BH MOV R4,0BH MOV R3,0BH ACALL DISPLAY。 未开始抢答时候显示 FFF JB ,NEXT ACALL DELAY JB ,NEXT。 去抖动 ,如果 开始键 按下就向下执行 ,否者跳到非法抢答查询 ACALL BARK。 按键发声 MOV A,R1 MOV R6,A。 送 R1R6,因为 R1 中保存了抢答时间 SETB OK。 抢答标志位 ,用于 COUNT 只程序中判断是否查询抢答 MOV R3,0AH。 抢答只显示计时 ,灭号数 AJMP COUNT。 进入倒计时程序 ,查询有效抢答的程序 在 COUNT 里面 NEXT: JNB ,FALSE1 JNB ,FALSE2 13 JNB ,FALSE。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。