《单片机实训,八路抢答器.doc》由会员分享,可在线阅读,更多相关《单片机实训,八路抢答器.doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、- - 电气工程及自动化学院 单片机系统实训 八路抢答器设计报告书 学生: 马振班级: 10电41 学号:10284004 指导教师: 兴奎 包建华 鲁原 军 丽俊 明伟 年月日摘要 本实验报告由方案设计,软件设计,硬件设计,器件选择等多方面组成。在完成实训要求的情况下,又增加四个抢答端口,实现八路抢答,另外有增设其他控制功能。在教师指导下我组设计的八路抢答是基于我院自行研制的“型单片机实验开发系统,具有:功能齐全,线路简单,容错能力强,可靠性高等优点。本系统利用开关做按键输入,扬声器发生提示,数码管显示。实现的功能有:在抢答中,只有开场后抢答才有效,在开场抢答之前抢答无效;抢答限定时间和答复
2、下列问题的时间可在设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和答复下列问题时间倒计时显示,满时后系统计时自动复位及主控强制复位;选手使用锦囊时可保存,重新计时。 目录 零 前言 -4 一 设计任务与要求 -5 二 方案设计 -5 三 逻辑设计 -6 四 硬件设计 -7 五 软件设计 -9 六 结论 -25 七 参考文献 -26 前言 通过前一阶段的单片机理论学习,我们对单片机的功能,原理,使用方法有了初步的了解。但距真正掌握单片机,利用其去解决问题尚有一段距离。所以我们急需一个综合锻炼的时机,而实训就是一个绝佳的时机。实训课题具有种类多,难易程度可调节,贴近生活
3、,生动有趣等特点。它不仅将我们过往的单片机,汇编语言,绘图仿真,电路搭建等方面知识进展综合使用,稳固,提升。而且锻炼分析问题,解决问题,与人合作等能力。“纸上得来终觉浅这是实训家共有的感慨,在实训中经常遇到这样的情况:系统仿真没有错误,但是电路搭建完毕,却得不到仿真的结果。作为工科课程,只有真正做出实物的时候,我们才有可能说:真正掌握。此次实训在稳固知识,锻炼能力的根底上,更使我们深刻认识到:学习不能仅仅停留在书本上,尤其是工科的学习。我们学习的知识来源于生产生活,所以我们必须将其复原到生产生活中去,用实践去检验我们的知识。也只有这样我们才能将课程真正学完,学牢,学活,才能在未来的竞争中处于有
4、利地位。 最后在此我对实训中的每一位指导教师真诚地道一声:感!一、设计任务与要求一、题目: 四路抢答器二、根本要求: 利用8051单片机 ,制作一个有4个按键的比赛抢答器。在有人按键时进展对应选手显示。 三、设计任务 1设计硬件电路,画出电路原理图; 2画出流程图; 3编制程序,写出源程序代码; 4写出的详细说明书,要求字迹工整,原理表达正确,会计算主要元器件的一些参数,并选择元器件; 5个人总结。 四、参考资料: 自己寻查找二方案设计方案:该系统是以我院自行研制的“XZNU MCUS-1为核心,可以完成运算控制、信号识别以及显示功能的实现。由于用了单片机,使其技术比拟成熟,应用起来方便、简单
5、并且单片机周围的辅助电路也比拟少,便于控制和实现。整个系统具有极其灵活的可编程性,能方便地对系统进展功能的扩和更改。“XZNU MCUS-1特点如下:方便可靠:此系统是我院自行研制的,可靠性高,出事故便于检查,有问题便于咨询等多种优点。并且结合伟福软件仿真,调试方便。 节约经:“XZNU MCUS-1中包含单片机,锁存器,译码器,显示器,键盘,蜂鸣器等多种常用器件,满足我们的根本需求,不用令买器件。 电路简单:“XZNU MCUS-1系统将常用器件分模块,仅用导线连接即可。承上启下:利用“XZNU MCUS-1便于我们队过往有关知识的稳固,并对以后毕业设计等后继实训打下根底。三 逻辑设计:“X
6、ZNU MCUS-1系统各局部独立,硬件输出固定,只要软件输出符合即可。其逻辑框图如下:逻辑流程图如下四 硬件设计根据实验要求及单片机接口特性,在充分利用系统资源的前提下,设计为: 一单片机端口分配设计:P0八个端口作为段选出;P1口八个端口作为抢答输入端口,于是便将四路抢答扩展为八路抢答;P2的前三个端口:P2.0,P2.1,P2.2作为位选输出; P2.0为选手显示; P2.1为倒计时的十位显示; P2.2为倒计时个位显示;P3口为控制端口; P3.0口为“开场键; P3.1口为“复位键;另外添加抢答,答复时间调整: P3.2口为抢答时间调整键,按下后可调整抢答时间; P3.3为答复时间调
7、整键,按下后可以调整答复下列问题的时间; P3.4为“加一键,在调整时间打状态下,每按一次可实现计时加一的功能; P3.5为“减一键,每按下一次可实现减一的功能; P3.6为铃声输出,通过三极管放大,P3.6时高电平时铃响;二外部电路连接设计 时钟电路:“XZNU MCUS-1系统中自带时钟电路12MHZ; 复位电路:“XZNU MCUS-1系统中自带复位电路; 键盘电路:本系统共需14个外接键盘,期中八个抢答按键可以对系统上的扫描键盘进展选取,另外六个控制调整键盘可以利用拨号键进展扩展; 显示电路:P0口输出后经74LS245及74LS244接共阳八段显示器段;P2口输出经75451接八段显
8、示器的为选; 铃响报警:P3.6输出接蜂鸣器部电路以接好;画出仿真图如下器件如下器件名称规格型号数量微处理器AT89C52174LS2451754512晶振12MHZ1按钮15共阳4位8段数码管7S CARED1扬声器1五 软件设计OK EQU 20H;抢答开场标志位RING EQU 22H;响铃标志位ORG 0000HAJMP MAINORG 0003HAJMP INT0SUBORG 000BHAJMP T0INTORG 0013HAJMP INT1SUBORG 001BHAJMP T1INTORG 0040HMAIN: MOV R1,#30;初设抢答时间为30sMOV R2,#60;初设答
9、题时间为60sMOV TMOD,#11H;设置未定时器/模式1MOV TH0,#0F0HMOV TL0,#0FFH;越高发声频率越高,越尖MOV TH1,#3CHMOV TL1,#0B0H;50ms为一次溢出中断SETB EASETB ET0SETB ET1SETB EX0SETB EX1;允许四个中断,T0/T1/INT0/INT1CLR OKCLR RINGCLR P3.6SETB TR1SETB TR0;一开场就运行定时器,以开场显示FFF.如果想重新计数,重置TH1/TL1就可以了;=查询程序=START: MOV R5,#0BHMOV R4,#0BHMOV R3,#0BHACALL
10、DISPLAY;未开场抢答时候显示FFF P3.0,NEXT;ACALL DELAY P3.0,NEXT;去抖动,如果开场键按下就向下执行,否者跳到非法抢答查询ACALL BARK;按键发声MOV A,R1MOV R6,A;送R1-R6,因为R1中保存了抢答时间SETB OK;抢答标志位,用于COUNT只程序中判断是否查询抢答MOV R7,#01H ;读抢答键数据信号标志,这里表示只读一次有用信号MOV R3,#0AH;抢答只显示计时,灭号数AJMP COUNT;进入倒计时,查询有效抢答的程序在COUNT里面NEXT: JNB P1.0,FALSE1JNB P1.1,FALSE2JNB P1.
11、2,FALSE3JNB P1.3,FALSE4JNB P1.4,FALSE5JNB P1.5,FALSE6JNB P1.6,FALSE7JNB P1.7,FALSE8AJMP START;=非法抢答处理程序=FALSE1: MOV R3,#01HAJMP ERRORFALSE2: MOV R3,#02HAJMP ERRORFALSE3: MOV R3,#03HAJMP ERRORFALSE4: MOV R3,#04HAJMP ERRORFALSE5: MOV R3,#05HAJMP ERRORFALSE6: MOV R3,#06HAJMP ERRORFALSE7: MOV R3,#07HAJM
12、P ERRORFALSE8: MOV R3,#08HAJMP ERROR;=INT0(抢答时间R1调整程序)=INT0SUB:MOV A,R1MOV B,#0AHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAY;先在两个时间LED上显示R1JNB P3.4,INC0;P3.4为+1s键,如按下跳到INCOJNB P3.5,DEC0;P3.5为-1s键,如按下跳到DECOJNB P3.1,BACK0;P3.1为确定键,如按下跳到BACKOAJMP INT0SUBINC0: MOV A,R1CJNE A,#63H,ADD0;如果不是99,R2加1,如果加
13、到99,R1就置0,重新加起。MOV R1,#00HACALL DELAY1AJMP INT0SUBADD0: INC R1ACALL DELAY1AJMP INT0SUBDEC0: MOV A,R1JZ SETR1;如果R1为0, R1就置99,DEC R1ACALL DELAY1AJMP INT0SUBSETR1: MOV R1,#63HACALL DELAY1AJMP INT0SUBBACK0: RETI;=INT1(答复时间R2调整程序)=INT1SUB:MOV A,R2MOV B,#0AHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAYJN
14、B P3.4,INC1JNB P3.5,DEC1JNB P3.1,BACK1AJMP INT1SUBINC1: MOV A,R2CJNE A,#63H,ADD1MOV R2,#00HACALL DELAY1AJMP INT1SUBADD1: INC R2ACALL DELAY1AJMP INT1SUBDEC1: MOV A,R2JZ SETR2DEC R2ACALL DELAY1AJMP INT1SUBSETR2: MOV R2,#63HACALL DELAY1AJMP INT1SUBBACK1: RETI;=倒计时程序(抢答倒计时和答复倒计时都跳到改程序)=REPEAT:MOV A,R2 ;
15、使用锦囊时重新计时MOV R6,ACLR RING CLR P3.6COUNT: MOV R0,#00H;重置定时器中断次数MOV TH1,#3CHMOV TL1,#0B0H;重置定时器RECOUNT:MOV A,R6;R6保存了倒计时的时间,之前先将抢答时间或答复时间给R6MOV B,#0AHDIV AB;除十分出个位/十位MOV 30H,A;十位存于(30H)MOV 31H,B;个位存于(31H)MOV R5,30H;取十位MOV R4,31H;取个位MOV A,R6SUBB A,#07HJNC LARGER;大于5s跳到LARGER,小于等于5s会提醒MOV A,R0CJNE A,#0A
16、H,FULL;1s中0.5s向下运行CLR RINGAJMP CHECKFULL: CJNE A,#14H,CHECK;下面是1s的情况,响并显示号数并清R0,重新计SETB RINGMOV A,R6JZ QUIT;计时完毕MOV R0,#00HDEC R6;一秒标志减1AJMP CHECKLARGER: MOV A,R0CJNE A,#14H,CHECK;如果1s向下运行,否者跳到查停/显示DEC R6;计时一秒R6自动减1MOV R0,#00HCHECK: JNB P3.1,QUIT;如按下停顿键退出JNB OK,CHECKK ;只在答复倒计时才有效AJMP NEXTTCHECKK:JNB
17、 P3.0,REPEAT ;判断是否使用锦囊NEXTT: ACALL DISPLAY OK,ACCOUT;如果是抢答倒计时,如是那么查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)AJMP RECOUNTACCOUT: MOV 36H P2MOV A,36HJNB ACC.0,TRUE1JNB ACC.1,TRUE2JNB ACC.2,TRUE3JNB ACC.3,TRUE4JNB ACC.4,TRUE5JNB ACC.5,TRUE6JNB ACC.6,TZ1JNB ACC.7,TZ2AJMP RECOUNTTZ1:JMP TRUE7TZ2:JMP TRUE8QUIT: CLR OK;如果
18、按下了停顿键执行的程序CLR RING CLR P3.6AJMP START;=正常抢答处理程序=TRUE1: ACALL BARKMOV A,R2MOV R6,A;抢答时间R2送R6MOV R3,#01HCLR OK;因为答题的计时不再查询抢答,所以就锁了抢答AJMP COUNTTRUE2:ACALL BARKMOV A,R2MOV R6,AMOV R3,#02HCLR OKAJMP COUNTTRUE3:ACALL BARKMOV A,R2MOV R6,AMOV R3,#03HCLR OKAJMP COUNTTRUE4:ACALL BARKMOV A,R2MOV R6,AMOV R3,#0
19、4HCLR OKAJMP COUNTTRUE5:ACALL BARKMOV A,R2MOV R6,AMOV R3,#05HCLR OKAJMP COUNTTRUE6: ACALL BARKMOV A,R2MOV R6,AMOV R3,#06HCLR OKAJMP COUNTTRUE7:ACALL BARKMOV A,R2MOV R6,AMOV R3,#07HCLR OKAJMP COUNTTRUE8:ACALL BARKMOV A,R2MOV R6,AMOV R3,#08HCLR OKAJMP COUNT;=犯规抢答程序=ERROR: MOV R0,#00HMOV TH1,#3CHMOV TL
20、1,#0B0HMOV 34H,R3;犯规号数暂存与(34H)HERE: MOV A,R0CJNE A,#06H,FLASH;0.3s向下运行-灭并停响CLR RINGMOV R3,#0AHMOV R4,#0AHMOV R5,#0AH;三灯全灭AJMP CHECK1FLASH: CJNE A,#0CH,CHECK1;下面是0.8s的情况,响并显示号数并清R0,重新计SETB RINGMOV R0,#00HMOV R3,34H;取回号数MOV R5,#0BHMOV R4,#0BH;显示FF和号数AJMP CHECK1CHECK1: JNB P3.1,QUIT1ACALL DISPLAYAJMP H
21、EREQUIT1: CLR RING CLR P3.6CLR OKAJMP START;=显示程序=DISPLAY:MOV DPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,MOV A,R3MOVC A,A+DPTRMOV P2,#0feHMOV P0,AACALL DELAY2MOV DPTR,#DAT2MOV A,R5MOVC A,A+DPTRMOV P2,#0fdHMOV P0,AACALL DELAY2MOV A,R4MOVC A,A+DPTRMOV P2,#0fbHMOV P0,AACALL DELAY2RETDAT1:DB 00h,06h,5bh
22、,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;灭,1,2,3,4,5,6,7,8,9,灭,FDAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;=加减时间延时(起到不会按下就加N个数)=DELAY1: MOV 35H,#08HLOOP0: ACALL DISPLAYDJNZ 35H,LOOP0RET;=延时4236个机器周期(去抖动用到)=DELAY: MOV 32H,#12HLOOP: MOV 33H,#0AFHLOOP1: DJNZ 33H,LOOP1DJNZ 32H,LOOPRET;=延时4236个机
23、器周期(显示用到)=DELAY2: MOV 32H,#43HLOOP3: MOV 33H,#1EHMOV A,R7 ;每隔6070个机器周期读一次P1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理JNZ AAAA1 ;没读到有效数据时继续转到AAAA1LOOP2: DJNZ 33H,LOOP2DJNZ 32H,LOOP3RET;=读抢答按键数据口程序=;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.;故采用在延时子程序中加了
24、读数据口程序.保证了灵敏度和可靠性AAAA1: MOV A,P1CJNE A,#0FFH,AA1 ;当不全为1时的数据为有效数据AA0: MOV 36H,A ;将有效数据送到36H暂存AJMP LOOP2AA1: DEC R7AJMP AA0;=发声程序=BARK: SETB RINGACALL DELAY1ACALL DELAY1CLR RING;按键发声 RETT0INT: MOV TH0,#0ECHMOV TL0,#0FFHJNB RING,OUT;CPL P3.6;RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音OUT: RETI;=TO溢出中断(响铃程序)=T0INT
25、: MOV TH0,#0ECHMOV TL0,#0FFHJNB RING,OUT;CPL P3.6;RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音OUT: RETI;=T1溢出中断(计时程序)=T1INT: MOV TH1,#3CHMOV TL1,#0B0HINC R0RETIEND六 总结 试验在大大提高我们理论知识的同时也锻炼了我们的动手能力。试验中经常会遇到这样或那样的问题,通过现象我们逐渐逐本溯源寻找问题的源头。每个问题都是一次挑战,每一次解决问题都会带来无尽的喜。在解决问题的同时我们也认识到自身在上一阶段的学习中还有许多知识点没有真正弄明白,我们的学习并没有因为课程
26、的完毕而完毕。 此次试验中我们组在完成题目要求以外又另加了诸多功能,使我们的抢答器功能更强大,更完善,更人性化。但在看到长出的同时我们也意识到我们的抢答器还有一些缺乏入:抢答,答复时间的修改不能保存,每次从其后仍需重新设定,锦囊设置的不合理等。 另外说下在此次实训我们组由于使用实验室器材,提升软件设计的难度,节省金钱,但大大降低了硬件设计的难度。相对其他组自己焊接电路板的同学,我们在这方面所获得锻炼就少的多了,这是我们的缺乏。 最后我再次向实训中的所有指导教师道一声感。感各位指导教师悉心教诲!七 参考文献1?单片机实验与实训教程?:海宽/主编 包建华 兴奎/副主编 2?单片机原理及应用?:鑫主/编 - word.zl