《8位竞赛抢答器的设计(共17页).doc》由会员分享,可在线阅读,更多相关《8位竞赛抢答器的设计(共17页).doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上单片机课程设计专业 电气工程及其自动化 指导教师 学生 颜良堂 学号 B 题 目 8位竞赛抢答器的设计 2013年12月25日 目 录一、 设计任务与要求以单片机为核心,设计一个8位竞赛抢答器:同时供8名选手或8个代表队比赛,分别用8个按钮S0S7表示。 设置一个系统清除和抢答控制开关S,开关由主持人控制。抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.
2、5s左右。参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。 通过键盘改变抢答的时间,原理与闹钟时间的设定相同,将定时时间的变量置为全局变量后,通过键盘扫描程序使每按下一次按键,时间加1(超过30时置0)。同时单片机不断进行按键扫描,当参赛选手的按键按下时,用于产生时钟信号的定时计数器停止计数,同时将选手编号(按键号)和抢答时间分别显示在LED上。二、 方案设计与论证2.1 方案一:使用C语言编程实现基于单片机的八位抢答器的课程设计,用到
3、的元器件有AT89C51、MAX7219、按键、数码管、上拉电阻、蜂鸣器等。2.2 方案二:使用汇编语言编程实现八位抢答器的课程设计,用到的元器件有AT89C51、74LS373、按键、数码管、上拉电阻、蜂鸣器等。 选择方案二的理由:首先汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言,具有很高的精确控制;其次选用74LS373芯片作为数码管的控制芯片是因为它容易控制选用3个74ls373分别控制倒计时的两个数码管及一个显示抢答结果的数码管,所以我选择了方案二。三、 单元电路的设计3.1 芯片的选择及工作原理本设计使用到的元器件包括AT89C51芯片、数码
4、管。工作原理:仿真开始 显示FFF;按下“复位”键 显示倒计时初值,起初设的是30秒;再按下“设时” 键,按一下计数初值加1,到30自动清零;按下“开始”键开始倒计时,每减一,有0.5秒的声响;当有选手按下,则倒计时停止,显示当前倒计时数值和选手编号;若在倒计时计数到0,无人抢答 则有1秒声响的报警。2.3 系统的硬件构成及功能1、 单片机晶振及复位部分电路电路 2 、选手抢答部分电路:由八个按键S0S7以及8个阻值为1k的上拉电阻组成 3、 开始、复位、时间设置及扬声器部分电路:由3个按键、1个电阻、NPN和1个BUZZER组成,用于主持人操作及扬声器提示报警 4、 显示部分电路:由3个74
5、LS373芯片及3个数码管构成,用于显示倒计时时间和抢答结果 四、 软件的设计4.1 主程序流程图 开始显示FFF复位键时间设置开始按钮30s抢答倒计时加1显示抢答结果开始倒计时YYYYNNNN4.2 主程序MAIN: MOV TMOD,#01H ;主程序 MOV TH0,#3CH MOV TL0,#0B0H SETB EA SETB ET0 SETB EX0 SETB IT0 MOV R4,#30 ; 30秒倒计时 MOV R3,#0AH ;抢答结果 MOV R7,#0AH ;倒计时 MOV R6,#0AH MOV R0,#30 ;R0存放倒计时的显示值,初值设为30 LCALL XIANS
6、H24.3 子程序1、开始、复位程序;*复位程序*FW: JNB P3.1,FW1 ;预判 复位键按下否 JMP FWFW1: LCALL DELAY ;去抖动,判断是否真按下 JNB P3.1,FW2 JMP FWFW2: MOV R3,#0BH ;复位按下,则存放选手编号的R3,放入灭的代码 MOV A,R4 ;倒计时初值R4放入显示倒计时寄存器R0中 MOV R0,A LCALL XIANSH1;开始程序SAM: JNB P3.0,PK JMP SAMPK: JNB P3.0,PK1 ;扫描开始键是否按下 JMP SAMPK1: MOV R3,#0BH ;按下则R3存灭代码, SETB
7、TR0 ;/启动定时器 MOV R2,#0AH ;中断次数设为10次,刚好1秒HERE: CJNE R1,#01H,YY ;若R1中存放的选手按键标志位为1,则转入STAR JMP STAR ;否则继续循环 等待中断YY: JMP HERE2、中断程序;中断程序IT0P: CLR TR0 DEC R2 CJNE R2,#05H,JX0 ; 中断5次后,开启扬声器 clr P3.6JX0: CJNE R2,#00H,JX1 ;中断10次后,关闭扬声器,这样喇叭响0.5秒 setb P3.6 DEC R0 LCALL XIANSH1 MOV R2,#0AH ;R2中再存入中断次数JX1: LCAL
8、L SAMO CJNE R1,#01H,JX2 ;扫描选手按键标志位R1,未按下则转JX2 ,按下则返回 JMP RETURNJX2: JNB P3.1,PK2 JMP CZPK2: LCALL DELAY ;检测复位键按下否 JNB P3.1,QFW JMP CZQFW: MOV R1,#01H JMP RETURN ;按下则返回CZ: CJNE R0,#00H,CZ1 ;倒计时是否计时完毕 clr P3.6 ;及时完毕 无人抢答则扬声器开启 LCALL DELAY5 ;延时1秒 MOV R1,#01H ;R1设1 JMP RETURN ;中断返回CZ1: MOV TH0,#3CH ;计时器
9、初值重装 MOV TL0,#0B0H SETB TR0RETURN: RETI3、选手键盘扫描程序;选手键盘扫描程序SAMO: JNB P1.0,XS1 JNB P1.1,XS2 JNB P1.2,XS3 JNB P1.3,XS4 ;预扫描 选手按键是否按下 JNB P1.4,XS5 JNB P1.5,XS6 JNB P1.6,XS7 JNB P1.7,XS80RETURN2:RET ;未按下则返回XS80: LJMP XS8XS1: LCALL DELAY ;去抖动再判是否按下 JNB P1.0,XS11 JMP RETURN2XS11: MOV R1,#01H setb P3.6 ;按下则
10、 显示1号 扬声器关闭 MOV R3,#01H LCALL XIANSH1 JMP RETURN2XS2: LCALL DELAY JNB P1.1,XS22 JMP RETURN2XS22: MOV R1,#01H setb P3.6 ;按下则 显示2号 扬声器关闭 MOV R3,#02H LCALL XIANSH1 JMP RETURN2XS3: LCALL DELAY JNB P1.2,XS33 JMP RETURN2XS33: MOV R1,#01H setb P3.6 ;按下则 显示3号 扬声器关闭 MOV R3,#03H LCALL XIANSH1 JMP RETURN2XS4:
11、LCALL DELAY JNB P1.3,XS44 JMP RETURN2XS44: MOV R1,#01H ;按下则 显示4号 扬声器关闭 setb P3.6 MOV R3,#04H LCALL XIANSH1 JMP RETURN2XS5: LCALL DELAY JNB P1.4,XS55 JMP RETURN2XS55: MOV R1,#01H setb P3.6 ;按下则 显示5号 扬声器关闭 MOV R3,#05H LCALL XIANSH1 JMP RETURN2XS6: LCALL DELAY JNB P1.5,XS66 JMP RETURN2XS66: MOV R1,#01H
12、 setb P3.6 ;按下则 显示6号 扬声器关闭 MOV R3,#06H LCALL XIANSH1 JMP RETURN2XS7: LCALL DELAY JNB P1.6,XS77 JMP RETURN2XS77: MOV R1,#01H setb P3.6 MOV R3,#07H ;按下则 显示7号 扬声器关闭 LCALL XIANSH1 JMP RETURN2XS8: LCALL DELAY JNB P1.7,XS88 JMP RETURN2XS88: MOV R1,#01H setb P3.6 ;按下则 显示8号 扬声器关闭 MOV R3,#08H LCALL XIANSH1 J
13、MP RETURN24、数码管显示程序;显示程序XIANSH1:MOV A,R0 MOV B,#0AH ;R0中存放的倒计时显示值 除10 分出十位和个位 DIV AB MOV R7,A ;十位存入R7中 MOV R6,B ;个位存入R6中XIANSH2:SETB P0.4 CLR P0.5 ;选择选手编号的数码管 CLR P0.6 MOV A,R3 MOV DPTR,#SEGTAB ;调入代码 MOVC A,A+DPTR MOV P2,A ;显示选手编号 CLR P0.4 SETB P0.5 ;选择显示十位的数码管 CLR P0.6 MOV A,R7 MOV DPTR,#SEGTAB ;调入
14、代码 MOVC A,A+DPTR MOV P2,A ;显示十位 CLR P0.4 CLR P0.5 ;选择显示个位的数码管 SETB P0.6 MOV A,R6 MOV DPTR,#SEGTAB ;调入代码 MOVC A,A+DPTR MOV P2,A ;显示个位 RET5、抢答时间设计程序;抢答时间设置程序SHESH:INC R0 ;倒计时初值加1 CJNE R0,#31,BQL ;倒计时初值设置超过30 自动清零 MOV R0,#00HBQL: MOV R3,#0BH MOV A,R0 ;倒计时初值存入其专用寄存器R4中,这样可以全局不变,R0会倒计时中递减而改变 MOV R4,A LCA
15、LL XIANSH1 RETI6、延时子程序;10ms延时程序(用于去抖动)DELAY: MOV R7,#20D1: MOV R6,#248 D2: DJNZ R6,D2 DJNZ R7,D1 RET;1s延时程序(无人抢答报警)DELAY5:MOV R7,#40DL1: MOV R6,#50DL2: MOV R5,#248DL3: DJNZ R5,DL3 DJNZ R6,DL2 DJNZ R7,DL1 RET 五、仿真与调试5.1 抢答器调试结果1、 开始 开始运行仿真电路数码管显示FFF。2、 倒计时首先按下复位按钮,当按下开始按钮时开始倒计时。3、 抢答在倒计时时间内抢答有效,倒计时后和
16、主持人还没按开始按钮抢答均无效。4、 倒计时时间设置在还没开始和抢答结束后均可设置抢答倒计时时间030s5、 抢答结束复位清零抢答结束后可按复位键清零以便下一次抢答。六、 结论与心得此次课程设计,开始很苦恼,无从下手。后来和同学讨论决定首先借助于网络资料。网络上的资源大多并不完善,甚至有些根本看不懂。此时真的很头疼。于是回想之前实验课上所学习的知识。寻找借鉴例题。零零散散下载摘录很多东西。又结合抢答比赛的实际应用,开始起草最初的设计草案。想法很多设计也几近完整,然而很多功能却无法实现。于是决定按照草案一步步依次解决,边解决边定稿最后设计方案。中间遇到很多问题、困难。这时我才了解到对知识的掌握还
17、有许多的生疏和欠缺。然而此时后悔已经于事无补。我们只能不停在网络上搜索查找学习,尽量弥补自身知识的不足。渐渐完善此设计。在这次试验设计中在老师的严格要求下,我发现了自己知识上的不足和理论时间上的差距。通过此次的课程设计使我对本科知识有了更深入的了解提高了实践的操作能力。同时,也规范了我对报告文体格式的掌握。并让我了解到认真刻苦,以真理为武,追求卓越的精神!附件1:电路图附件2:源程序 ORG 0000H LJMP MAIN ORG 0003H LJMP SHESHORG 000BHLJMP IT0P ORG 0100HMAIN: MOV TMOD,#01H ;主函数 MOV TH0,#3CH
18、MOV TL0,#0B0H SETB EA SETB ET0SETB EX0SETB IT0MOV R4,#30; 30秒倒计时MOV R3,#0AH;抢答结果MOV R7,#0AH;倒计时MOV R6,#0AH MOV R0,#30 ;R0存放倒计时的显示值,初值设为30LCALL XIANSH2 STAR:setb P3.6 ;关喇叭 MOV R1,#00H ;选手按键,复位按键,无人抢答的标志位,用于从等待中断中返回到初始;复位部分程序FW:JNB P3.1,FW1 ;预判 复位键按下否 JMP FWFW1:LCALL DELAY;去抖动,判断是否真按下 JNB P3.1,FW2JMP
19、FWFW2: MOV R3,#0BH;复位按下,则存放选手编号的R3,放入灭的代码 MOV A,R4;倒计时初值R4放入显示倒计时寄存器R0中MOV R0,ALCALL XIANSH1;开始部分程序SAM: JNB P3.0,PK JMP SAMPK: JNB P3.0,PK1 ;扫描开始键是否按下 JMP SAMPK1: MOV R3,#0BH ;按下则R3存灭代码, SETB TR0 ;/启动定时器 MOV R2,#0AH ;中断次数设为10次,刚好1秒HERE: CJNE R1,#01H,YY ;若R1中存放的选手按键标志位为1,则转入STAR JMP STAR;否则继续循环 等待中断Y
20、Y: JMP HERE;中断程序IT0P: CLR TR0 DEC R2CJNE R2,#05H,JX0; 中断5次后,开启扬声器clr P3.6JX0: CJNE R2,#00H,JX1;中断10次后,关闭扬声器,这样喇叭响0.5秒 setb P3.6DEC R0LCALL XIANSH1MOV R2,#0AH;R2中再存入中断次数JX1: LCALL SAMO CJNE R1,#01H,JX2;扫描选手按键标志位R1,未按下则转JX2 ,按下则返回JMP RETURNJX2: JNB P3.1,PK2JMP CZPK2: LCALL DELAY ;检测复位键按下否 JNB P3.1,QFW
21、JMP CZQFW: MOV R1,#01H JMP RETURN;按下则返回CZ: CJNE R0,#00H,CZ1 ;倒计时是否计时完毕 clr P3.6 ;及时完毕 无人抢答则扬声器开启LCALL DELAY5 ;延时1秒 MOV R1,#01H ;R1设1JMP RETURN ;中断返回CZ1: MOV TH0,#3CH;计时器初值重装 MOV TL0,#0B0HSETB TR0RETURN: RETI;选手键盘扫描程序SAMO: JNB P1.0,XS1 JNB P1.1,XS2JNB P1.2,XS3JNB P1.3,XS4 ;预扫描 选手按键是否按下JNB P1.4,XS5JNB
22、 P1.5,XS6JNB P1.6,XS7JNB P1.7,XS80RETURN2:RET ;未按下则返回XS80: LJMP XS8XS1: LCALL DELAY;去抖动再判是否按下 JNB P1.0,XS11JMP RETURN2XS11: MOV R1,#01H setb P3.6;按下则 显示1号 扬声器关闭MOV R3,#01HLCALL XIANSH1JMP RETURN2XS2:LCALL DELAY JNB P1.1,XS22JMP RETURN2XS22: MOV R1,#01H setb P3.6 ;按下则 显示2号 扬声器关闭MOV R3,#02HLCALL XIANS
23、H1JMP RETURN2XS3:LCALL DELAY JNB P1.2,XS33JMP RETURN2XS33: MOV R1,#01H setb P3.6;按下则 显示3号 扬声器关闭MOV R3,#03HLCALL XIANSH1 JMP RETURN2XS4:LCALL DELAY JNB P1.3,XS44JMP RETURN2XS44: MOV R1,#01H ;按下则 显示4号 扬声器关闭 setb P3.6MOV R3,#04HLCALL XIANSH1 JMP RETURN2XS5:LCALL DELAY JNB P1.4,XS55JMP RETURN2XS55: MOV
24、R1,#01H setb P3.6 ;按下则 显示5号 扬声器关闭MOV R3,#05HLCALL XIANSH1JMP RETURN2XS6:LCALL DELAY JNB P1.5,XS66JMP RETURN2XS66: MOV R1,#01H setb P3.6 ;按下则 显示6号 扬声器关闭MOV R3,#06HLCALL XIANSH1JMP RETURN2XS7:LCALL DELAY JNB P1.6,XS77JMP RETURN2XS77: MOV R1,#01H setb P3.6MOV R3,#07H ;按下则 显示7号 扬声器关闭LCALL XIANSH1JMP RET
25、URN2XS8:LCALL DELAY JNB P1.7,XS88JMP RETURN2XS88: MOV R1,#01H setb P3.6 ;按下则 显示8号 扬声器关闭MOV R3,#08HLCALL XIANSH1JMP RETURN2;显示程序XIANSH1:MOV A,R0 MOV B,#0AH ;R0中存放的倒计时显示值 除10 分出十位和个位DIV ABMOV R7,A ;十位存入R7中MOV R6,B ;个位存入R6中XIANSH2:SETB P0.4CLR P0.5 ;选择选手编号的数码管CLR P0.6MOV A,R3MOV DPTR,#SEGTAB ;调入代码MOVC
26、A,A+DPTRMOV P2,A ;显示选手编号CLR P0.4SETB P0.5 ;选择显示十位的数码管CLR P0.6MOV A,R7MOV DPTR,#SEGTAB ;调入代码MOVC A,A+DPTRMOV P2,A ;显示十位CLR P0.4CLR P0.5 ;选择显示个位的数码管SETB P0.6MOV A,R6MOV DPTR,#SEGTAB;调入代码MOVC A,A+DPTRMOV P2,A;显示个位RET;抢答时间设置程序SHESH:INC R0 ;倒计时初值加1 CJNE R0,#31,BQL ;倒计时初值设置超过30 自动清零 MOV R0,#00HBQL: MOV R3
27、,#0BH MOV A,R0;倒计时初值存入其专用寄存器R4中,这样可以全局不变,R0会倒计时中递减而改变 MOV R4,A LCALL XIANSH1 RETI;10ms延时程序(去抖动)DELAY: MOV R7,#20D1: MOV R6,#248D2: DJNZ R6,D2 DJNZ R7,D1 RET;1s延时程序(无人抢答报警)DELAY5:MOV R7,#40DL1: MOV R6,#50DL2: MOV R5,#248DL3: DJNZ R5,DL3 DJNZ R6,DL2 DJNZ R7,DL1 RET;数码管显示调用代码SEGTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,8EH,0FFH /0,1,2,3,4,5,6,7,8,9,F,灭 END附、 参考文献1 张毅刚.单片机原理及应用.高等教育出版社.20042 张鑫.单片机原理及应用.电子工业出版社.20053 曹国清.数学电路与逻辑设计中国矿业大学出版社.20044 任致程.经典集成电路400 例机械工业出版社.20025 薛栋梁.单片机原理及应用.中国水利水电出版社.20016 吴金戎,沈庆阳等.8051 单片机实践与应用.清华大学出版社.2001专心-专注-专业