基于单片机实现智能4路抢答器的设计报告.doc

上传人:laozhun 文档编号:4148458 上传时间:2023-04-07 格式:DOC 页数:15 大小:137.50KB
返回 下载 相关 举报
基于单片机实现智能4路抢答器的设计报告.doc_第1页
第1页 / 共15页
基于单片机实现智能4路抢答器的设计报告.doc_第2页
第2页 / 共15页
基于单片机实现智能4路抢答器的设计报告.doc_第3页
第3页 / 共15页
基于单片机实现智能4路抢答器的设计报告.doc_第4页
第4页 / 共15页
基于单片机实现智能4路抢答器的设计报告.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《基于单片机实现智能4路抢答器的设计报告.doc》由会员分享,可在线阅读,更多相关《基于单片机实现智能4路抢答器的设计报告.doc(15页珍藏版)》请在三一办公上搜索。

1、惠 州 学 院 数字电子技术课程设计说明书 题 目:基于单片机(89C52)的四人抢答器 系 部: 电子科学系 班 级: 09级电信二班 学生姓名: 学 号: 指导教师: 2011年12月29日智能四路抢答器 目录一、 前言2二、 方案设计21、 方案比较22、 系统总体设计方案与实现框图3三、 理论分析3四、 电路设计41、 按键部分42、 显示部分53、 总原理图6五、 软件流程图模块7六、 结论8七、 程序9一、前言本设计要求能够在主持人按下开始键后,四个参赛者开始抢按自己的按键,谁的按键先按下,谁面前的灯就会亮并且有相应的提示,当参赛者耗时太多时又会有相应的提示。根据设计的要求,本系统

2、采用独立式按键,通过单片机不停的扫描按键来控制LED灯和蜂鸣器,并用定时器T0、T1来定超时的时间,其中抢答定时时间可以由主持人随意的修改。当超时的时候让蜂鸣器响和点亮相应的LED灯(T0用于参赛者回答问题的定时,T1用于参赛者抢答时间的选定)。二、方案设计 1、方案比较 (1)、总体设计方案一:采用可编程I/O口扩展芯片8155 8155作为单片机的扩展接口能实现很多功能,但是这个系统并不复杂,用8155会浪费很多的资源,而且8155要用P0和P2端口作为地址线对它进行读写,这样不仅浪费端口还使得编程变的复杂。从节省资源和简化编程的角度考虑,放弃了此方案。方案二:直接采用AT89C51单片机

3、 直接用单片机不仅编程被简化,还有效的利用了各个端口。8051单片机的资源完全够这个系统的要求。所以最终选择了此方案。 (2)、模块 方案一:采用4*4矩阵键盘 此种键盘是常用的按键扫描方法,但是本系统只需要六个按键,这样就会浪费十个,而且矩阵按键扫描要送数读数,对于编程很复杂,最终放弃了此方案。 方案二:采用独立式键盘 本系统只要8个按键就可以,用独立式键盘不仅节省端口还使编程变得简单。程序只要不停的读数检查就行。所以,最终选择此方案。 2、系统总体设计方案与实现框图 抢答模块、修改抢答时间模块、主持人控制模块一共采用8个独立式的键盘作为按键输入,当在主持人按下开始键后有参赛者按键按下时,就

4、会有对应于这个按键的灯亮并且蜂鸣器响一声,其它按键再按也无效。在规定时间之后如不清除,蜂鸣器就会一直响,超时的LED会点亮,提示已经到时间。框图如图1。修改抢答时间是在按下了修改按键之后就会等待增量、减量的输入以修改时间,直到再一次按下修改键以确定修改完成。独立式按键部分单片机处理显示部分按键扫描图1三、理论分析 51单片机的端口上电是高电平,而且当外部没有输入时能自动的弹跳到高电平,所以通过按键所接端口的高低电平变化可以判断出哪个按键按下了。独立按键P1口电平变化单片机识别图2四、电路设计图31、按键扫描部分单片机不停的扫描P1口的电平变化,当有按键按下时,对应的I/O口会跳变为低电平,单片

5、机检测到后,经过处理将作出相应的显示。电路如图1.图42、显示部分 根据按键按下的情况LED作出相应的亮灭,蜂鸣器作出相应的反应。当开始键按下启动后,当S1按下时,则灯D1亮,并蜂鸣器响一声,如果超过规定时间,蜂鸣器一直响,并提示超时LED灯被点亮。如果S1在限定的时间内再次被按下,说明参赛者1已完成回答;当S2按下时,则灯D2亮,并蜂鸣器响一声,如果超过规定时间,蜂鸣器一直响,并提示超时LED灯被点亮。如果S2在限定的时间内再次被按下,说明参赛者2已完成回答;当S3按下时,则灯D3亮,并蜂鸣器响一声,如果超过规定时间,蜂鸣器一直响,并提示超时LED灯被点亮。如果S3在限定的时间内再次被按下,

6、说明参赛者3已完成回答;当S4按下时,则灯D4亮,并蜂鸣器响一声,如果超过规定时间,蜂鸣器一直响,并提示超时LED灯被点亮。如果S4在限定的时间内再次被按下,说明参赛者4已完成回答;抢答完后可以按下主持人的确定键将其初始化。总原理图如图所示:五、软件模块本系统用了定时器0和定时器1。图5六、结论本次设计按照题目要求,基于单片机,利用较合适的控制算法,成功的实现了抢答器的基本功能。硬件原理结构简单,减少硬件成本和繁琐的电路连接;软件设计方面,设计简单,可塑造性强,便于维护。因此选择使用单片机实现四人抢答器的设计具有很强的效益,能任意地修改抢答时间,使此抢答器适合在很多场合使用且成本低。通过此课程

7、设计让我真正的了解到了程序设计的难点所在,难的并不是程序框架的搭建、理论上的思考此方法是否可行、代码的写入、调试其结果,真正难的是在调试的过程中,明明知道是有些问题的,但是又无法锁定问题所在,造成的结果是心理的成就感受到抨击,反复的对可能存在的问题反复修改,一次又一次的修改,可怕的是代码越修越错,结果该不会来。折腾一段时间后,一不小心才发现开始的时候问题仅仅时非常简单、愚蠢的错误。从这程序设计过程中不断的提醒我,必须步步为营,步步小心,耐心加细心即等于完美的程序设计的实现。七、程序代码:/实现功能:四人抢答器/*1、只有主持人宣布开始抢答时,选手才能进行抢答,抢答有一定的时间限制,超过一定时间

8、就会出现报警声。 2、选手回答时必须在规定的时间里面回答,否则就会出现报警声 3、数码管会显示时间 4、各通道的规定: 5、抢答时间是可以设置的*/#include#include #define uint unsigned int#define uchar unsigned charsbit beep=P36;/making voice(低电平有效)sbit LED1=P27;/competitor 1(低电平有效)sbit ONE=P10;/(高电平有效)sbit LED2=P26;/competitor 2(低电平有效)sbit TWO=P11;/(高电平有效)sbit LED3=P25

9、;/competitor 3(低电平有效)sbit THREE=P12;sbit LED4=P21;/competitor 4sbit FOUR=P13;sbit LED5=P20;/host announced begingsbit HOST=P15;/低电平有效sbit OVER=P37;/overtimesbit CHANG=P14;/change the overtime(低电平有效)sbit UP=P16;/(低电平有效)sbit DOWN=P17;/低电平有效sbit LS138A = P22; /定义译码器输入端A 在 P2.2 管脚上sbit LS138B = P23; /定义

10、译码器输入端B 在 P2.3 管脚上sbit LS138C = P24; /定义译码器输入端C 在 P2.4 管脚上static uint max1=10,num1=20;uint max,num,temp,tt=0,dd=0x00;/max用于表示选手抢答的时间/uint i,LedNumVal=1 ;/uint LedOut10;unsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;void delay(uint x);void display(uint Key_Val);v

11、oid change();void press(void);void time1_max();void time0_num();/unsigned long uint LedOut5,LedhdsjVal;void display(uint Key_Val) uchar i; /*以下将键值送到LED数码管显示*/ LedhdsjVal=Key_Val; /把键值送到LedhdsjVal变量中 LedOut0=Disp_TabLedhdsjVal%10000/1000; LedOut1=Disp_TabLedhdsjVal%1000/100;/|0x80; LedOut2=Disp_TabLe

12、dhdsjVal%100/10; /十位 LedOut3=Disp_TabLedhdsjVal%10; /个位 for(i=1; i0;x-) for(y=110;y0;y-); void change(void)if(CHANG=0)delay(5);if(CHANG=0)while(!CHANG);delay(5);while(!CHANG);delay(100);while(CHANG) display(max1); if(UP=0) delay(5);if(UP=0)max1+;delay(20); while(!UP); delay(5); while(!UP); if(DOWN=0

13、)delay(10);if(DOWN=0)max1-;delay(20);while(!DOWN);delay(5);while(!DOWN);while(!CHANG);delay(5);while(!CHANG);void press(void) if(ONE=0)delay(5);if(ONE=0)while(!ONE);delay(50);while(!ONE);delay(50);while(!ONE); TR1=0;LED1=0;beep=0;delay(250);beep=1; num =num1; time0_num(); while(num&ONE) temp=num; di

14、splay(temp); while(!ONE); delay(5); while(!ONE); TR0=0; if(num=0) beep=0; OVER=0; delay(10); while(HOST) display(num); while(!HOST);delay(10);while(!HOST);beep=1; LED1=1; LED5=1; OVER=1; void main() while(1) display(dd); change(); if(HOST=0) delay(5); if(HOST=0) max=max1; time1_max(); LED5=0; beep=0

15、;delay(250);beep=1; while(!HOST); delay(5); while(!HOST); while(max&ONE&TWO&THREE&FOUR) display(max); press(); TR0=0; if(max=0) OVER=0; beep=0; while(HOST) display(0); LED5=1; OVER=1; beep=1; while(!HOST); delay(5); while(!HOST);/ delay(10);/ while(!HOST); /* t1 (1ms)中断 中断*/void T1zd(void) interrupt 3 /3定时器1的中断号 1定时器0的中断号 0外部中断1 2外部中断2 4串口中断 TH1 =(65536-50000)/256; /12.000 TL1 =(65536-50000)%256; tt+; if(tt=20) max-; tt=0; void T1zdd(void) interrupt 1 /3定时器1的中断号 1定时器0的中断号 0外部中断1 2外部中断2 4串口中断 TH0 =(65536-50000)/256; /12.000 TL0 =(65536-50000)%256; tt+; if(tt=20) num-; tt=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号