扬州大学单片机课程设计抢答器.docx
《扬州大学单片机课程设计抢答器.docx》由会员分享,可在线阅读,更多相关《扬州大学单片机课程设计抢答器.docx(63页珍藏版)》请在冰豆网上搜索。
扬州大学单片机课程设计抢答器
扬州大学能源与动力工程学院
课程设计报告
题目:
八位竞赛抢答器的设计
课程:
单片机原理及应用课程设计
专业:
电气工程及其自动化
班级:
姓名:
学号:
第一部分
任
务
书
《单片机原理及应用》课程设计任务书
一、课题名称
详见《单片机课程设计题目
(一)》:
主要是软件仿真,利用Proteus软件进行仿真设计并调试;
《单片机课程设计题目
(二)》:
主要是硬件设计,利用单片机周立功实验箱进行设计并调试。
二、课程设计目的
课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。
《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。
单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。
为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。
通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。
三、课程设计内容
设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。
1.系统方案设计:
综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。
2.硬件电路设计:
对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。
3.软件设计:
根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。
4.调试:
在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。
四、课程设计要求
详见《单片机课程设计题目
(一)》
《单片机课程设计题目
(二)》
五、进度安排
序号
内容
天数
1
布置任务,熟悉课题要求
0.5
2
总体方案确定,硬件电路设计
1.5
3
软件编程
1.5
4
Proteus仿真,或在周立功实验箱上调试
2
5
总结,撰写课程设计报告
1.5
七、课程设计报告内容:
总结设计过程,写出设计报告,设计报告具体内容要求如下:
1.课程设计的目和设计的内容。
2.课程设计的要求。
3.控制系统总框图及系统工作原理。
4.控制系统的硬件电路连接图,电路的原理。
5.软件设计流程图及其说明。
6.电路设计,软件编程、调试中遇到的问题及分析解决方法。
7.实验结果及其分析。
8.体会。
第二部分
课
程
设
计
报
告
1课题简介
1.1课题目的与任务
以单片机为核心,设计一个8位竞赛抢答器。
1.2课题要求
1.同时供8名选手或8个代表队比赛,分别用8个按钮S0~S7表示。
2.设置一个系统清除和抢答控制开关S,开关由主持人控制。
3.抢答器具有锁存与显示功能。
即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。
4.抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
5.当主持人启动“开始”键后,定时器进行减计时,同时蜂鸣器发出短暂的声响,声响持续的时间为0.5s左右。
6.参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
7.如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
1.3扩展功能
1.LCD显示器显示当前工作状态。
2.抢答开始前按下强大按钮定义为抢答作弊,在LCD上显示作弊者并且发出报警,并维持到主持人按复位或开始。
3.加入回答功能,主持人增加三个按钮,分别为“回答计时”、“正确”和“错误”用于抢答完成后的操作,回答正确或错误均会在LCD上显示,如果在规定时间内未完成也会发生报警。
4.扩展抢答人数,由最高8人抢答变为最高16路抢答,兼容更多场合。
2八位竞赛抢答器方案设计
2.1系统总体介绍
多路竞赛抢答器用于生活中常见抢答环节,本抢答器基于51单片机系统,利用单片机运行高速可靠的特点,结合适当的外部电路,达到自定抢答时间、作弊检测、16路抢答、回答倒计时等功能。
抢答器使用了单片机P3.3P3.4与抢答矩阵式按钮地址端相连,P1与数据端相连,达到16路输入的目的,在抢答按钮按下之前,复位按钮具有设定时间的功能,并且此时任意选手按抢答按钮都会被识别为作弊,并在LCD上显示及发出报警声,当按下抢答按钮后,发出短暂提示音,第一个按下抢答按钮的选手会被识别,其他选手信号被封锁,程序进入等待命令状态并发出报警声,由主持人决定是复位还是进行回答倒计时,如果复位,抢答器即刻进入初始状态,如果按回答计时按钮,那么程序将进入回答倒计时模式,主持人根据选手回答情况确定正确与否,结果在LCD上显示,如果在限定时间内选手未做回答,那么抢答器会发出报警声直到主持人复位。
2.2系统整体框图
图1
2.3系统工作原理
首先通过单片机编程检测来自主持人按钮的低电平信号控制抢答器的整体运行状态,在未开始抢答前,通过持续检测抢答按钮来达到防作弊的功能,当进入抢答环节时,通过高速扫描抢答按钮以达到准确指示抢答者的目的,在未进入中断的情况下,其检测精度可达10uS级别,基本可以做到公平性,并通过加入回答倒计时与结果显示,直观并且符合生活实际情况,通过MAX7219驱动数码管显示时间与抢答者,节省I/O口的同时也节省了CPU时间,间接上也为检测精度提供保证,使用了LCD1602指示抢答器各个部分的工作状态,并且可在开始前显示作弊者,抢答器实用性得以提高。
3.1单片机芯片型号的选择
在之前的单片机课程和实验中,我们学习和使用过AT89C51的单片机,用AT89C51单片机来控制电路,简单、方使用AT89C51单片机结合字符型LCD显示器设计一个简易的可编程作息时间控制器,若LCD选择有背光显示的模块,在夜晚或黑暗的场合中也可使用。
程序执行后工作指示灯LED闪动,表示程序开始执行,同时显示系统时间。
作息时间控制器是由4路可调闹钟组成,从而实现打铃等功能。
当四路闹钟中的任一路到时,均会点亮灯、打铃。
其中操作键K1~K4的功能分别为:
设置限制的时间/时的调整、显示闹钟设置的时间/分的调整、设置闹钟的时间/设置完成、闹钟更换。
在电子计算机基础上发展而来的可编程作息时间控制器,它可以利用电子计算机的内部时间,通过程序判断处理,完成对作息时间的精确控制,并且由于是程序控制,所以可通过改变程序进而灵活改变作息时间,同时可以实时显示时间,并实现打铃功能。
可编程时间控制器可实现对时间控制的智能化,摆脱由人控制时间的长短不同的不便,并且可以在必要时人工切入控制,完美的满足作息时间控制。
便。
最重要的就是写程序,如何通过程序来达到抢答器的作用,利用51单片机来说补充了集成电路中所缺的遗漏,更是在集成电路上更加精准,对选手更加的公平,让选手都站在同一的战线上。
AT89C51的引脚功能说明
Vcc:
电源电压
GND:
地
P0口:
P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在FIash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
FIash编程和程序校验期间,P1接收低8位地址。
P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其它控制信号。
P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
作输入端时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
图2
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的l/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的DO位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
在此期间,当访问外部数据存储器,这两次有效的PSEN信号不出现。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H—FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。
Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。
XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
3.2电源方案的选择
系统需要多个电源,AT89C51使用5V稳压电源。
采用三端稳压集成78L05得到5V的稳定电压。
利用该方法方便简单,工作稳定可靠。
3.3抢答器按键的选择
使用AT89C51单片机IO口直接连接按键,稳定可靠,但是现实中往往存在抢答人数不止8人的情况,而单片机IO口又有限,使用矩阵式键盘可以很好地解决这个问题,但存在每加一组键盘就要多一次扫描循环,需要在判断准确性与硬件资源之间做出选择,故使用了8*2的矩阵式键盘,配合相应程序,可以达到不错的效果。
这16个按键两两接在P1口上,两根选择线分别为P3.3、P3.4,如图所示
图3
3.4时钟电路的设计
本设计所采用的时钟信号为C51中的内部形式,内部方式实现单片机的时钟电路,利用单片机芯片上提供的反相放大器电路,在XTAL1和XTAL2引脚之间外接振荡器构成一个自激振荡器,自激振荡器与单片机内部的始终发生器构成单片机的时钟电路。
如图中,由OSC和电容C1和C2构成了并联谐振回路作为定时元件,振荡源OSC可选用晶体振荡器或陶瓷振荡器,频率为12MHz,电容C1、C2为30pF,起频率微调作用。
图4
3.5复位电路
在单片机工作过程中,由于某种原因使单片机陷入“死机”状态,或根据需要采用强制手段使程序重新开始执行等等,需要采用按钮开关复位方式。
当按钮开关S按下时,+5V电源通过S接入电阻构成的电路网络,设计时使电阻上的分压达到高电平的阀值,就可以使单片机复位。
因为我们按动按钮开关使其闭合的时间远远大于单片机复位所用的时间。
通常把上电自动复位电路和按钮开关复位电路综合在一起,这样既可以在每一次电源接通时系统复位,也可以满足强制复位的要求。
图5
3.6显示电路
MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。
其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。
只有一个外部寄存器用来设置各个LED的段电流。
MAX7221与SPI、QSPI以及MICROWIRE相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。
一个方便的四线串行接口可以联接所有通用的微处理器。
每个数据可以寻址在更新时不需要改写所有的显示。
MAX7219同样允许用户对每一个数据选择编码或者不编码。
整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
本设计采用LED数码管和液晶显示器显示,其中四个数码管接MAX7219显示,MAX7219DIN接P3.0、LOAD接P3.1、CLK接P3.2,液晶显示器D0-D7接P0口,P0口上拉至高电平,RS、RW、E分别接P2.4-P2.6,如图所示
图6
3.7主持人控制电路和蜂鸣器电路
抢答开始按钮接P2.1,复位与设置时间按钮接P2.0,回答计时按钮接P2.3,回答正确按钮接P2.6,回答错误按钮接P2.7
图7
3.8抢答器总硬件电路图
图8
4八位竞赛抢答器软件编程设计
多路竞赛抢答器软件编程主要包括系统初始化、抢答时间的设定与复位、开始按键检测、抢答人按键检测、矩阵式键盘控制、回答环节控制、逻辑控制、MAX7219数码管显示、1602LCD液晶显示和蜂鸣器控制,整个程序中的按键检测是核心部分,需要抢答扫描循环尽可能快速,这样才能尽可能减少空窗时间得到准确的抢答人数据,得到抢答人的数据之后的数据处理与显示保持也尤为重要,这是抢答器基本功能的保证,配合其它各个模块,实现完整的抢答器功能。
4.1程序中伪指令及重点标志位简单介绍(不含硬件驱动中的伪指令)
SOBIT2FH.0;发声标志
RESETEQUP2.0;抢答复位与设定时间
STAEQUP2.1;抢答开始
TTIMEEQU10H;暂存时间16进制
TIMEEQU15H;时间10进制
PLEQU12H;抢答到的人
TEAMEQU39H;抢答到的人所在组
;LCDn的程序为显示子程序
;F0为时间是否已到与
KEY0EQUP3.3
KEY1EQUP3.4
FLAGTEQU2FH.1;是否进HOLDON循环标志
ANSEQUP2.2;回答按键
FLAG0EQU2FH.2;选手编号跳出循环标志
WROEQUP2.6;抢答正确与否
RIGEQUP2.7
1.F0定义为时间标志,F0在程序初始化时置1,当定时器T0达到预设时间时F0置0
2.SO定义为发声标志,SO在程序初始化时置0,定时器T1在初始化时就启动,在中断程序中如果SO为1则P3.7取反发声(500HZ)。
3.FLAGT定义为是否进HOLDON循环标志,FLAGT在程序初始化时置0,用于判断是否有人抢答,程序中已跳过时间到而进该循环,主要用于后续MAX7219显示问题,也是由于加入16位抢答加入的判别标志位。
4.2主程序部分的设计
使用VISIO画出系统简要流程图如下,代表了系统的总体运行逻辑,其中已略去了外围用户交互环节在流程图中的显示,程序已大量使用子程序模块化,避免重复代码段频繁出现,影响程序易读性和后续扩展,在初始化程序中已将各器件复位,主程序代码段较长,见附录。
图9
4.3初始主持人开关及作弊识别
初始时主持人有两个开关,复位按钮和开始按钮,复位开关在此时具有设置时间的功能,默认和最高均为30S,按一下加1到1S、2S…,若长按,设定时间会大致每秒加1,操作方便,而此时也有作弊检测,具有较高的灵敏度和可重复性,当按下开始开关后,该循环跳出,进入下一循环,具体见流程图及程序。
图10
;判断开关是否按下
ST0:
LCALLDISPLAY
JBRESET,ST1;判断是否需要调整时间
JNBSO,NEXT1
JNBRESET,INI;作弊复位
NEXT1:
LCALLDELAYX
INCTTIME;这里设置为加1调整,
MOVA,TTIME
MOVB,#10
DIVAB
SWAPA
ADDA,B
MOVTIME,A;显示时间进制转换
MOVA,TTIME
CLRC
CJNEA,#31,ST1;最高允许30s,也是默认值
MOVTTIME,#01H
MOVTIME,#01H;超出30s重置为1s开始
;*****************************************************************************************
;判断是否有人作弊
ST1:
LCALLMAT
MOVA,P1
CPLA
MOVB,A
JZNEXT
MOVCHEATER,#00H;
DEAL0:
;将P0口读到的数据转换至对应作弊选手编号(移位)
CLRC;移位前准备
RRCA
CLRC
INCCHEATER;移位计数,获得作弊选手号
JNZDEAL0
MOVA,CHEATER
MOVA,#00H
ADDA,TEAM
ADDA,CHEATER;得到编号
MOVB,#10
DIVAB
MOVTEAM,A
MOVCHEATER,B
SETBSO;发声报警
LCALLLCD1
NEXT:
JBSTA,ST0;没有开关按下,返回判断是否修正时间,否则执行抢答
LCALLLCD3
SETBF0;循环标志,后续用于跳出循环,时间到可使之置0
SETBTR0;启动定时
LCALLDELAYSO;短暂发声
4.48*2矩阵式键盘的实现
由于单片机I/O口有限,故使用了8*2的矩阵式键盘,首先将矩阵式键盘控制端口P3.3清零、P3.4置1,作为键盘初始化,在子程序中先对两口取反,然后在TEAM(已定义)单元中保存状态(0或8),为后续计算提供数据,具体见流程图及程序。
图11
;*****************************************************************************************
;矩阵式键盘子程序
MAT:
CPLKEY0
CPLKEY1
JBKEY0,ELSE0
MOVTEAM,#00H
RET
ELSE0:
MOVTEAM,#08H
RET
4.5检测按键及保持
抢答按键检测为抢答器的关键步骤,在这步中需重点解决检测的实时性,数据处理尽可能留在保持环节处理,以保证尽可能小的空窗时间,以达到抢答器的公平准确性,故采用了直接读P1口的方法,通过在保持环节移位以及与TEAM内寄存数字相加再转为10进制在数码管上显示,具体见流程图及程序。
图12
;*****************************************************************************************
;关键循环,用于判断是否有按下
START:
JNBF0,HOLDON;时间是否已到
LCALLMAT;矩阵式键盘子程序
MOVA,P1
XRLA,#0FFH
JNZHOLDON
LJMPSTART
;*****************************************************************************************
;时间到或者有人抢答,转入此循环等待
HOLDON:
MOV17H,A;A数据暂存
CLRTR0;有人抢答停止计时
H1:
JBF0,H2
LCALLLCD4;LCD显示结束
H2:
JNBF0,HOLD
LCALLLCD5;LCD显示抢答成功
HOLD:
MOVA,17H;数据恢复
JZCONTINUE;用于下面移位转换循环的执行条件
MOVPL,#00H;
SETBFLAGT;有人抢答才置1
DEAL:
;转换
CLRC
RRCA
CLRC;移位转换
INCPL
JNZDEAL
CONTINUE:
JBFLAG0,KO
ADDA,TEAM
ADDA,PL;得到编号
MOVB,#10
DIVAB
MOVTEAM,A
MOVPL,B
SETBFLAG0
MOV17H,#00H
SJMPKO
ST00:
LJMPINI
KO:
JNBFLAGT,$+6
JNBANS,ANSWER;回答倒计时
JNBRESET,ST00;按下复位键后回到起始状态,但由于此处转移字节已超过128B,所以迂回使用了LJMP
SETBSO
LCALLDISPLAY
AJMPHOLD;否则维持状态
4.6回答倒计时
回答倒计时是在选手已抢答成功的情况下使用的附加功能,首先将时间置为31(由于此时显示程序在T0中断,需过1秒才能显示,故设为31,使存在30秒这个显示时刻),如何进入判断主持人按钮正确错误循环,一旦选择,将在LCD显示器上有“RIGHT”或“WRONG”显示,如何进入等待复位循环,但如果在30S内未检测到按键,那么抢答器将停止计时并报警,按键面板仅有复位可用,具体见流程图及程序。
图13
;*****************************************************************************************
;回答倒计时
ANSWER:
CLRSO;停止报警
MOVTTIME,#31;默认回答倒计时30S
SETBTR0
LCALLLCD6;LCD显示
L1:
JNBTR0,L3;封锁
JBWRO,L2;回答正确与否
LCALL