您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于AT89S51的单片机无线双显示抢答器
基于AT89S51的单片机无线双显示抢答器1关于抢答器1.1目前常见的抢答器有以下几种类别:(1)数字电路:只要使用555定时电路作为时序触发,配合相应的数字电路实现。(2)单片机式:以单片机为作为总控制单元利用单片机的扫描读取外部输入,并进行相应的判断以及数据处理。(3)电脑程序实现的:以电脑作为上位机,利用USB端口或者串口编程技术实现,逻辑上面的判断以及处理均由程序来完成。这种抢答器可以在电脑上面显示并且可以与相应的由高级语言完成答题系统一起使用,配合单片机控制能力强的优势,将会是完美的结合,这也是我们追求的目标。1.2抢答器的常见功能:(1)判断抢答端的序号。(2)判断是否犯规并且在主机显示。(3)在抢答端显示犯规或是抢答成功。(4)设定倒计时时间并显示倒计时时间。(5)显示各组分数。(6)主持人的控制。既主持人可以开始和取消倒计时。(7)无线抢答端的实现(8)电脑显示抢答情况(9)选择抢答方式。一种是有倒计时有犯规的倒计时结束开始答题的,另外一种是无倒计时无犯规可以直接答题的,比如说像Lucky52那样的,两种只是在程序逻辑以及显示上面稍有区别。1.3功能实现的选择我们的抢答器选择了上面的(1),(2)(3)(4)(6)(7)(8)进行实现。抢答的逻辑具体流程如下图:2主要芯片及设备的选择:2.1AT89S51芯片很熟悉的ATMEL公司的51单片机,主要具有一下功能:40个引脚4kBytesFlash片内程序存储器128bytes的随机存取数据存储器(RAM)32个外部双向输入/输出(I/O)口5个中断优先级2层中断嵌套中断2个16位可编程定时计数器2个全双工串行通信口看门狗(WDT)电路片内时钟振荡器2.2Max7219芯片MAX7219是一种串行接口的8位数码管显示驱动器。它与通用微处理器只有3根串行线相连,最多可驱动8个共阴数码管或64个发光二极管。它内部有可存储显示信息的8×8静态RAM,动态扫描电路,以及段、位驱动器。它的特点有:串行接口的传输速率可达10MHz;独立的发光二极管段控制;译码与非译码两种显示方式可选;数字、模拟两种亮度控制方式;可以级联使用。2.3Max232芯片Max232用于TTL电平向RS-232串口电平转换。该产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。由于电脑串口rs232电平是-10v+10v,而一般的单片机应用系统的信号电压是ttl电平0+5v,max232就是用来进行电平转换的,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。2.4PT2262/2272芯片PT2262和PT2272是CMOS三态编码集成芯片,这组器件广泛用于各种遥控器件上,只需较低的+3V电压就能工作(本机选用12V作为发射电压)。PT2262是发射编码芯片,PT2272是接收解码芯片,两者的地址必须配对,而且振荡电阻必须符合要求。PT2262的TE端是发射允许端,接受低电平时,17脚DOUT端输出一串编码。该串编码在载波上发送出去,被接收端接受和解调,输入PT2272的14脚,当地址配对时,VT解码有效端输出高电平,数据端口就会输出与PT2262发射端口一致的数据,从而实现遥控功能。2.5超再生无线发射模块(F04P)与接收模块(J04V)2.5.1超再生低功耗射频发射模块(315Hz)主要特点:低功耗发射,声表稳频,无数据时发射电流为零,较宽的工作电压范围发射电路:2.5.2超再生低功耗射频接受模块(315Hz)主要特点:(0.15mA)特低功耗超再生接收模块,输出无噪声干扰,接收灵敏度高,具有接受锁存功能接受电路于发射电路基本相似。2.5.3发射接收简要原理通过引脚的接地,悬空或者接高电平设置好发射模块的发射地址,当发射使能端从高电位到低点位变化时,奖发射地址和发射的数据组成16为编码发射。2.6ULN2003达林顿管阵列ULN2003是高耐压、大电流达林顿陈列,由七个硅NPN达林顿管组成。达林顿管又称复合管。它将二只三极管适当的连接在一起,以组成一只等效的新的三极管。这等于效三极管的放大倍数是二者之积。在电子学电路设计中,达林顿接法常用于功率放大器和稳压电源中。最大的作用与特点是每路可以介绍500mA的灌流,这也是我们使用的目的。2.7USB转串口模块(USB/RS232)采用USB转串口的标准芯片PL2303和RS232电平接口芯片MAX211的组合。2.8高亮度SuperRed四寸共阴极数码管正常发光电压约5--6V,正常导通电流约40--80mA3硬件电路的实现以及各个部分的作用3.1硬件电路图(Proteus仿真图)3.2各个模块的说明与简介3.2.1单片机最小系统:这个不用多说,可惜是买别人的。上面得是提供的是12MHz的晶振,与程序中的保持一样.因为在计算定时的时候,要用到晶振的大小。3.2.2Max7219模块这个,还是买的别人做的PCB,我们自己用面包版连了,可以不行,怀疑是没有选择正确的电容的问题,或者说,我们不会选择电容。3.2.3无线抢答端发射模块无线抢答端采用PT2262发射编码芯片+F05P发射模块的组合,另外使用一根拉直的长24CM的天线。关于按钮,买的不知道用来控制什么的按钮,反正正和我们意,买这个的时候要注意手感,要让使用者用的舒适。从院科协L同学那里淘来的半圆形按钮外壳。3.2.4无线接收模块无线抢答端采用PT2272发射编码芯片+F04V接收模块的组合。Pt2272与PT2262要设置为地址相同,电阻匹配。接受到的信号传至单片机中。3.2.5主持人控制按键这里有两个按钮,分别为OK/START,CANCEL/CLEAR.前者是用来设置完毕抢答倒计时时间和开始倒计时,后者是用来取消抢答和清理数码管并显示倒计时开始时间,用来等待再次开始抢答。3.2.6设置倒计时时间的拨码开关仿“8421”码设置的“2321”码,全部低位的时候为“1”,四个开关可以设置1-9任何数字。缺点就是买的拨码开关小了点。3.2.7译码器以及抢答端的发光二极管译码器从单片机得到输入,然后低位选通发光二极管。3.2.8位选反向驱动说不清了,这样的了。3.2.9段选反向驱动两个反向驱动的本意在于,虽然Max7219驱动的是共阴极数码管,但是从datasheet上面可以看出来,段选的拉流不可以满足这种型号的数码管,位选的灌流也不能接受,所以这里配合ULN2003来使用。因为ULN2003的特点,高位接受灌流,低位为高阻,所以要使用反向驱动。这里,段选的反向驱动在程序里面的反向了,而对于位选,用于是该芯片自己进行的,所以程序控制不了,所以在Max7219位选的下游使用了一个与非门来当作反向器来使用。3.3.10上位机接口采用MAX232芯片进行RS232-TTL电平转换,输出至串口,然后再通过USB转串口模块连接至上位机。3.2.11大尺寸数码管这个前面说过了。4硬件实现的步骤4.1硬件实现的各个步骤(1)通过实验板来验证各个主要功能模块的正确实现。这个就是在实验板接线,来分开的检测各个部分的正确性,当然有的部分还是没有办法验证的。(2)仿真器+面包板上面的插线实验恩,仿真器很好使。就是上面的限流电阻给不小心被烧了,郁闷。(3)最小系统+面包板上面插线实验使用仿真器的时候用的是电脑提供的+5V电压,可能和用自己的供电的不太一样,尤其是同时也在使用+12V电源的时候,电脑给出的+5V可能的比较低,这样一来会有些不必要的问题,而用最小系统则没有这些问题。(4)焊接万能板这个很有趣也很关键。(5)仿真器+电路板的实现用来验证电路板上的各个部分是否焊接成功。(6)最小系统+电路板的实现恩这个就是最后的验证了。4.2一个原则由上可见,在实验过程中,总体上也采取单变量原则,这样方便有效地对于每一部分进行检验。另外,如果在检验焊接板上面的错误的话,要配合着面包板使用才行,也是保证单变量,这样对比出来面包上成功的时候和现在失败的时候只有哪个地方不同,那百分之九十就是这个地方了。5软件实现(单片机上的软件)5.1程序编写模块化,使整个程序的每个部分具有较好的可移植性。5.2程序测试在KeilUvision+Proteus联调环境下进行逻辑的测试,不过这个只是逻辑上面的测试,距离能成功还有很远。5.3最终代码最后的代码将在另见。6电脑端(上位机)显示程序电脑端使用C#编写程序,利用了.Net的SerialPort类对电脑端口检测和接受数据。这个将会另有介绍。7后续工作和几个问题(1)电源还需优化,可以采用三稳压管电源。(2)电阻发热问题:我们使用的3W的大功率电阻竟然不到1.5W的情况下就发热了,还没有搞懂。(3)我们的74HC00与非门在未加高电平的情况下就已经正常工作了,不清楚这是什么情况。(4)可以考虑增加抢答模式与小组积分,实现按着使用者的要求对于程序进行选择。(5)无线端抢答端电池的问题。因为目前的设计是电池如果没有取出的话,将一直对发射系统供电,这样会消耗电池,但采用一次按键先后接通电路,发射编码的方法,总是不稳定#includeREG51.h#includeSTRING.H/*******************************************************************自定义Macro*******************************************************************///编码的均为反向编码#defineCLEAR0x7f//定义清空的反码#defineLED_BEGIN0x01//定义开始时数码管的显示#defineLED_FOUL0x38//犯规后显示字母F,数码管编码#defineLED_C0x31//字母C的编码#defineLED_L0x71//字母L的编码,两个用来在主持人取消之后显示CL--cancel#defineGET1//这个是作为一个函数的参数来混的,就是成功抢答的意思#defineFOUL0//和上面的参数一起混的,犯规---这两个的用法在后面体现#defineREADY0x7e//下面是给上位机发送的指令,对应的是cmdID#define_STRING_READY_9//调整好抢答倒计时,准备开始抢答#define_STRING_START_8//读秒结束,抢答开始#define_STRING_CANCEL_7//取消抢答#define_CHANGE_TIME_6//每次读秒//发送1--4的指令代表抢答端的序号//因为在板子上面采用的是12M的晶振,仿真时候采用的是11.0529M的晶振,为了方便不同时候编译方便,这里与后面的条件编译一起使程序修改参数比较方便//#defineCLOCK_FREQUENCY_12M1/*******************************************************************自定义数据类型*******************************************************************/typedefunsignedcharByte;//一个字节typedefunsignedintWord;//一个字,两个字节typedefbitBool;//模仿布尔型变量//typedefsbitPort;//本想用自定义一个端口类型的变量,比较方便,但是这句话步知道为何通不过编译/*******************************************************************定义MAX7219寄存器*******************************************************************/#defineREG_NO_OP0x00//定义空操作register#defineDIG_10x01//定义数码管1register#defineD
本文标题:基于AT89S51的单片机无线双显示抢答器
链接地址:https://www.777doc.com/doc-4149482 .html