《抢答器实训报告.doc》由会员分享,可在线阅读,更多相关《抢答器实训报告.doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、抢答器实训报告嵌入式应用实训报告班级: 学号:14 姓名:姜云峰一、实训目的与要求 目的:设计一个8路抢答器;4个主持人按键控制开始、复位、和倒计时的加减。主持人按下开始键后,抢答开始,数码管上显示为“”,在主持人按键按下前,有选手按下,为违规。违规时,数码管上显示的是选手编号,并且闪烁。抢答开始,进入倒计时,在倒计时内,若有选手按下按键,则说明有人抢答,数码管上显示为选手编号,不闪烁。若倒计时内没有人按键,则说明没人抢答;主持人按“复位”键,开始下一轮抢答。在此基础上,还可以有其他功能,比如违规时,蜂鸣器警报、抢答成功时播放音乐表示祝贺等。 此次实训主要培养学生的动手和思考能力,为以后的毕业
2、设计做准备,此次实训相当于一个小的毕业设计。要求:1) 使用单片机完成2) 能同时满足8路以上抢答3) 能判别违规现象4) 有较好的人机界面二、方案设计本设计采用AT89S52单片机作为控制核心,P0.0P0.7为8路抢答信号输入端,四位共阳数码管为处理后信号输出端。当有抢答键按下时,对应输入端为低电平0反之为高电平1。芯片的P3.0口为抢答启动键接口。当按下抢答启动键k1(即主持人“开始”按键)后,向单片机申请一次INT0中断单片机在中断服务程序中对抢答信号进行采样和识别处理。采用四位LED共阳数码管以动态扫描方式对抢答键号,违规抢答键号,倒计时时间等信息进行显示;在未开始抢答时数码管显示“
3、”;倒计时时间由选择开关k3、k4进行设定(最高不超过99s),k3键为加,k4键为减;当主持人按下k1前,有人按键为违规抢答,选手编号就在数码管上显示并且闪烁。1)违规抢答信号的记录抢答开始,主持人按k1键,单片机开始先采样P0口并将采样值送入工作寄存器R0,显然R0中寄存了抢答开始前最后一瞬间各路抢答输入信号。若无违规抢答,R0值为FFH;若有违规抢答,R0值不为FFH.R0中为0的位对应的抢答键属违规。若出现违规现象,则需返回主程序重新抢答。所谓有效抢答信号是指从数码管显示倒计时开始之后的抢答信号,在抢答提示之前的抢答信号属于违规信号,最先到达的有效抢答信号称为第一有效信号。2)第一有效
4、抢答信号的处理:当数码管显示抢答倒计时之后,单片机再采样P1口,用于检测抢答信号,若采样值为FFH表示还没有抢答,继续采样P0口,若不为FFH表示有人按下抢答键。此时送入R1中含有第一有效抢答信号。三、 硬件设计 电源部分:图1将输入的12V交流电压通过电桥整流和7805稳压,流出5V的直流电压。烧写芯片电路:图2图中所用的芯片为MAX232,通过上图电路将程序烧写进芯片89S52,MAX232芯片的11脚和12脚分别接89S52的串行数据信号线P3.0和P3.1。89S52:图3P0.0P0.7为P0口8位双向端口线;P1.0P1.7为P1口8位双向端口线;P2.0P2.7为P2口8位双向端
5、口线;P3.0P3.7为P3口8位双向端口线;ALE(30脚)用来锁存控制信号;29脚用来外部程序存储器读选通信号;31脚用于访问程序存储控制信号,31脚一定要连接高电平或低电平,我们所用的芯片是接高电平;RST(9脚)是复位引脚,用于复位;18、19脚是外接晶体引线端,此次实训我们所用的晶振为12MHZ的;20脚为接地端,40脚接+5V电源;10脚、11脚(即P3.0和P3.1口)用于串行数据接受和发送;12、13脚(P3.2、P3.3口)分别是外部中断0申请和外部中断1申请;14、15脚(T0、T1)是定时计数器0的外部输入和定时计数器1的外部输入;16、17脚(P3.6、P3.7口)用于
6、外部RAM或外部I/O写选通和外部RAM或外部I/O读选通。时钟震荡电路:时钟电路输入端引脚为XTAL1,输出端为引脚XTAL2,所用的电容为30pF的,晶振为12MHZ,构成一个稳定的自激振荡器。图4复位电路:我们采用的是按键复位电路,通过RESET健实现复位,电阻R10起到保护电路的作用。图5 显示部分:我们采用的是四位共阳数码管,P0.0P0.7分别连接与数码管的11、7、4、2、110、5、3管脚,用于控制a、b、c、d、e、f、g、dp各段的亮灭,P2.0、P2.1、P2.2与数码管的12、8、6脚项链,用于控制1、3、4位数码管的亮灭。9脚是用来控制第二位的,此次实训小红没有用到,
7、就没有接。图6对照原理图排好版,把各个部分依次焊接在电路板上。图6 上图是此次实训的系统图四、 软件设计 通过编写的程序来实现抢答和报违规警报,并且选手的编号能够显示在数码管上,在没有抢答前,刷关上显示为“”,如果有人在主持人的开始键没有按下之前抢答,则数码管上显示此人的编号,并且闪烁,蜂鸣器发出声音,说明有人违规抢答;主持人按下开始键,开始抢答,在倒计时内第一个抢到的人的编号会显示在数码管上,并且不闪烁。下面为此次实训的程序:#includeunsigned char led9=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,;unsigned ch
8、ar aa5=0XF9,0XA4,0XB0,0X99,0X92,;unsigned char k,w,j;void delay1s() unsigned char i; for(i=0;i60;i+) TH1=0X3C; TL1=0XB0; TR1=1; while(!TF1); TF1=0; void soft_reset(void)(void(code*)(void) 0x0000)();/主函数/ void main() while(1) P0=0xbf; if(P3_2=1) if(P1_0=0)for(k=0;k4;k+) P0=led1;delay1s();P0=0xff;dela
9、y1s();P0=led1; /显示 1 if(P1_1=0)for(k=0;k4;k+) P0=led2;delay1s();P0=0xff;delay1s();P0=led2; /显示2 if(P1_2=0)for(k=0;k4;k+) P0=led3;delay1s();P0=0xff;delay1s();P0=led3; /显示3 if(P1_3=0)for(k=0;k4;k+) P0=led4;delay1s();P0=0xff;delay1s();P0=led4; /显示4 if(P1_4=0)for(k=0;k4;k+) P0=led5;delay1s();P0=0xff;del
10、ay1s();P0=led5; /显示5 if(P1_5=0)for(k=0;k4;k+) P0=led6;delay1s();P0=0xff;delay1s();P0=led6; /显示 6 if(P1_6=0)for(k=0;k4;k+) P0=led7;delay1s();P0=0xff;delay1s();P0=led7; /显示7 if(P1_7=0)for(k=0;k4;k+) P0=led8;delay1s();P0=0xff;delay1s();P0=led8; /显示8 /判断抢答 else while(1) if(P1_0=0)for(k=0;k200;k+) P0=led
11、1 ;delay1s();P0=led1 ;if(P3_3=0) soft_reset();break ; /显示 1 if(P1_1=0)for(k=0;k200;k+) P0=led2 ;delay1s();P0=led2 ;if(P3_3=0) soft_reset();break ; /显示2 if(P1_2=0)for(k=0;k200;k+) P0=led3 ;delay1s();P0=led3 ;if(P3_3=0) soft_reset();break ; /显示3 if(P1_3=0)for(k=0;k200;k+) P0=led4 ;delay1s();P0=led4 ;i
12、f(P3_3=0) soft_reset();break ; /显示4 if(P1_4=0)for(k=0;k200;k+) P0=led5 ;delay1s();P0=led5 ;if(P3_3=0) soft_reset();break ; /显示5 if(P1_5=0)for(k=0;k200;k+) P0=led6 ;delay1s();P0=led6 ;if(P3_3=0) soft_reset();break ; /显示 6 if(P1_6=0)for(k=0;k200;k+) P0=led7 ;delay1s();P0=led7 ;if(P3_3=0) soft_reset();
13、break ; /显示7 if(P1_7=0)for(k=0;k200;k+) P0=led8 ;delay1s();P0=led1 ;if(P3_3=0) soft_reset();break ; /显示8 break; 五 作品调试 电路板焊好后,我们编写了一段简单的程序来测试一下数码管能否发光,烧写好芯片后,通上电,发现数码管能显示,但是很暗,起初以为是程序的问题,修改了程序的延时后,烧写好芯片,通电,发现数码管显示的还是很暗。我们在老师的指导下,测试了下电路的电流,发现电流很小,所以我们想可能是因为电路中的上拉电阻太大,我们决定改下电阻,看下数码管能否变得亮一点。修改了一个电阻,阻值变
14、为510欧,接上电源,发现还是很暗,我们在检查了电路之后,发现我换的电阻是接在dp脚上的,dp脚没有编入程序,所以没有变化。修改了程序之后,烧写进去,通上电,发现dp脚对应的点比之前的都亮,我们以为换了电阻之后就会亮了,可是换了全部电阻之后,数码管显示得还是很暗。后来我们考虑可能是没接驱动的缘故,在接上驱动后,我们继续检测,发现数码管变亮了,可是还不是很亮。所以我们认为可能是程序还有问题,后来修改了好久,又做了些参考,终于使数码管能正常显示。接下去是把程序编好,能满足抢答,且主持人按键能实现开始和复位,并且能够提示是否违规。起初我们是先实现抢答,下面为起初编写的用来实现抢答的程序:#inclu
15、de at89x51.h unsigned char led=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void pd(void) while(1) if(P1_0=0) P0=led1 ;break ; if(P1_1=0) P0=led2 ;break ; if(P1_2=0) P0=led3 ;break ; if(P1_3=0) P0=led4 ;break ; if(P1_4=0) P0=led5 ;break ; if(P1_5=0) P0=led6 ;break ; if(P1_6=0) P0=led7 ;break ;
16、if(P1_7=0) P0=led8 ;break ; void main()EA=1; while(1) if(P3_2=0)P0=led0;pd();break; 通过调试我们一部分一部分来完成程序,完成抢答之后,然后编写主持人按键部分,通过调试完成了所要求的程序。能够实现抢答、犯规提示和支持人开始和复位。六、总结与反思为期3个星期的实训结束了。在这3个星期里我学到了好多。这次的实训跟以前的有所不同。就比如说,以前实训元器件都是现成的,不用自己去买,这次买元器件自己去买,自己去挑选合适的元器件。在实训开始的第一个星期,我们组花了差不多4天的时间来理解我们组做的抢答器的原理图,理解各个部分的
17、工作原理,查找关于抢答器的资料,整理好元器件清单。接下来的一天就去买元器件了。第二个星期,我们开始焊接电路板,焊接电路板时不要出现虚焊,漏焊,这样就不会出现接触不好或者电路不能正常工作等现象。电路焊接好后,编写程序,花了差不多一个星期时间来编写程序,在编写程序过程中,我发现了自己的不足。程序编好了,烧写进芯片,检验结果,只能实现抢答和主持人的开始、复位。遗憾的是主持人的另外2个按钮倒计时的加减没有用上,还有蜂鸣器也没有用上。通过这次实训,我认识到了自己有很多不足的地方,在编程方面我还不是很懂,以前学过的都不知道怎么应用,所以还需要去多多练习编程。多看书,去熟悉各个语句的作用,然后运用到程序中,通过练习,让自己能够很好地应用学到的知识。附录 :原理图、PCB图、作品照片图6 作品照片图7 原理图下面为元器件清单:电容30pF2个电桥1个晶振12MHZ1个4位共阳数码管1个电容1044个按钮13个电容2.2uF4个S90124个电阻400欧1个78051个电阻470欧8个数据口1个芯片Max2321个电容470uF1个电容100uf1个电容1032个STC89S521个蜂鸣器1个