收藏 分销(赏)

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

上传人:二*** 文档编号:4514821 上传时间:2024-09-26 格式:DOC 页数:20 大小:138.04KB 下载积分:5 金币
下载 相关 举报
基于单片机实现智能路抢答器的设计方案报告.doc_第1页
第1页 / 共20页
本文档共20页,全文阅读请下载到手机保存,查看更方便
资源描述
惠 州 学 院 数字电子技术课程 设计说明书 题 目:基于单片机(89C52)四人抢答器 系 部: 电子科学系 班 级: 09级电信二班 学生姓名: 学 号: 指导老师: 12月29日 智能四路抢答器 目录 一、 序言……………………………………………………2 二、 方案设计………………………………………………2 1、 方案比较……………………………………………2 2、 系统总体设计方案和实现框图……………………3 三、 理论分析…………………………………………………3 四、 电路设计…………………………………………………4 1、 按键部分………………………………………………4 2、 显示部分………………………………………………5 3、 总原理图………………………………………………6 五、 软件步骤图模块……………………………………………7 六、 结论…………………………………………………………8 七、 程序………………………………………………………9 一、序言 本设计要求能够在主持人按下开始键后,四个参赛者开始抢按自己按键,谁按键先按下,谁面前灯就会亮而且有对应提醒,当参赛者耗时太多时又会有对应提醒。依据设计要求,本系统采取独立式按键,经过单片机不停扫描按键来控制LED灯和蜂鸣器,并用定时器T0、T1来定超时时间,其中抢答定时时间能够由主持人随意修改。当超时时候让蜂鸣器响和点亮对应LED灯(T0用于参赛者回复问题定时,T1用于参赛者抢答时间选定)。 二、方案设计 1、方案比较 (1)、总体设计 方案一:采取可编程I/O口扩展芯片8155 8155作为单片机扩展接口能实现很多功效,不过这个系统并不复杂,用8155会浪费很多资源,而且8155要用P0和P2端口作为地址线对它进行读写,这么不仅浪费端口还使得编程变复杂。从节省资源和简化编程角度考虑,放弃了此方案。 方案二:直接采取AT89C51单片机 直接用单片机不仅编程被简化,还有效利用了各个端口。8051单片机资源完全够这个系统要求。所以最终选择了此方案。 (2)、模块 方案一:采取4*4矩阵键盘 此种键盘是常见按键扫描方法,不过本系统只需要六个按键,这么就会浪费十个,而且矩阵按键扫描要送数读数,对于编程很复杂,最终放弃了此方案。 方案二:采取独立式键盘 本系统只要8个按键就能够,用独立式键盘不仅节省端口还使编程变得简单。程序只要不停读数检验就行。所以,最终选择此方案。 2、系统总体设计方案和实现框图 抢答模块、修改抢答时间模块、主持人控制模块一共采取8个独立式键盘作为按键输入,当在主持人按下开始键后有参赛者按键按下时,就会有对应于这个按键灯亮而且蜂鸣器响一声,其它按键再按也无效。在要求时间以后如不清除,蜂鸣器就会一直响,超时LED会点亮,提醒已经到时间。框图图1。修改抢答时间是在按下了修改按键以后就会等候增量、减量输入以修改时间,直到再一次按下修改键以确定修改完成。 独立式按键部分 单片机处理 显示部分 按键扫描 图1 三、理论分析 51单片机端口上电是高电平,而且当外部没有输入时能自动弹跳到高电平,所以经过按键所接端口高低电平改变能够判定出哪个按键按下了。 独立按键 P1口电平改变 单片机识别 图2 四、电路设计 图3 1、按键扫描部分 单片机不停扫描P1口电平改变,当有按键按下时,对应I/O口会跳变为低电平,单片机检测到后,经过处理将作出对应显示。电路图1. 图4 2、显示部分 依据按键按下情况LED作出对应亮灭,蜂鸣器作出对应反应。 当开始键按下开启后,当S1按下时,则灯D1亮,并蜂鸣器响一声,假如超出要求时间,蜂鸣器一直响,并提醒超时LED灯被点亮。假如S1在限定时间内再次被按下,说明参赛者1已完成回复;当S2按下时,则灯D2亮,并蜂鸣器响一声,假如超出要求时间,蜂鸣器一直响,并提醒超时LED灯被点亮。假如S2在限定时间内再次被按下,说明参赛者2已完成回复;当S3按下时,则灯D3亮,并蜂鸣器响一声,假如超出要求时间,蜂鸣器一直响,并提醒超时LED灯被点亮。假如S3在限定时间内再次被按下,说明参赛者3已完成回复;当S4按下时,则灯D4亮,并蜂鸣器响一声,假如超出要求时间,蜂鸣器一直响,并提醒超时LED灯被点亮。假如S4在限定时间内再次被按下,说明参赛者4已完成回复;抢答完后能够按下主持人确实定键将其初始化。 总原理图图所表示: 五、软件模块 本系统用了定时器0和定时器1。 图5 六、结论 此次设计根据题目要求,基于单片机,利用较适宜控制算法,成功实现了抢答器基础功效。硬件原理结构简单,降低硬件成本和繁琐电路连接;软件设计方面,设计简单,可塑造性强,便于维护。所以选择使用单片机实现四人抢答器设计含有很强效益,能任意地修改抢答时间,使此抢答器适合在很多场所使用且成本低。经过此课程设计让我真正了解到了程序设计难点所在,难并不是程序框架搭建、理论上思索此方法是否可行、代码写入、调试其结果,真正难是在调试过程中,明明知道是有些问题,不过又无法锁定问题所在,造成结果是心理成就感受到抨击,反复对可能存在问题反复修改,一次又一次修改,可怕是代码越修越错,结果该不会来。折腾一段时间后,一不小心才发觉开始时候问题仅仅时很简单、愚蠢错误。从这程序设计过程中不停提醒我,必需步步为营,步步小心,耐心加细心即等于完美程序设计实现。 七、程序代码: //实现功效:四人抢答器 /*1、只有主持人宣告开始抢答时,选手才能进行抢答,抢答有一定时间限制,超出一定时间就会出现报警声。 2、选手回复时必需在要求时间里面回复,不然就会出现报警声 3、数码管会显示时间 4、各通道要求: 5、抢答时间是能够设置*/ #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char sbit beep=P3^6;//making voice(低电平有效) sbit LED1=P2^7;//competitor 1(低电平有效) sbit ONE=P1^0;//(高电平有效) sbit LED2=P2^6;//competitor 2(低电平有效) sbit TWO=P1^1;//(高电平有效) sbit LED3=P2^5;//competitor 3(低电平有效) sbit THREE=P1^2; sbit LED4=P2^1;//competitor 4 sbit FOUR=P1^3; sbit LED5=P2^0;//host announced beging sbit HOST=P1^5;//低电平有效 sbit OVER=P3^7;//overtime sbit CHANG=P1^4;//change the overtime(低电平有效) sbit UP=P1^6;//(低电平有效) sbit DOWN=P1^7;//低电平有效 sbit LS138A = P2^2; //定义译码器输入端A 在 P2.2 管脚上 sbit LS138B = P2^3; //定义译码器输入端B 在 P2.3 管脚上 sbit LS138C = P2^4; //定义译码器输入端C 在 P2.4 管脚上 static uint max1=10,num1=20; uint max,num,temp,tt=0,dd=0x00;//max用于表示选手抢答时间 //uint i,LedNumVal=1 ; //uint LedOut[10]; 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); void change(); void press(void); void time1_max(); void time0_num(); //unsigned long uint LedOut[5],LedhdsjVal; void display(uint Key_Val) { uchar i; /********以下将键值送到LED数码管显示*************/ LedhdsjVal=Key_Val; //把键值送到LedhdsjVal变量中 LedOut[0]=Disp_Tab[LedhdsjVal%10000/1000]; LedOut[1]=Disp_Tab[LedhdsjVal%1000/100];//|0x80; LedOut[2]=Disp_Tab[LedhdsjVal%100/10]; //十位 LedOut[3]=Disp_Tab[LedhdsjVal%10]; //个位 for(i=1; i<4; i++) { P0 = LedOut[i]; /* switch(i) { //138译码 case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS138C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break; } delay(100); */ switch(i) { //138译码 case 0:LS138A=0; LS138B=0; LS138C=0; break; case 1:LS138A=1; LS138B=0; LS138C=0; break; case 2:LS138A=0; LS138B=1; LS138C=0; break; case 3:LS138A=1; LS138B=1; LS138C=0; break; } delay(10); // P0=0x00; // LS138A=1; LS138B=0; LS138C=0; } } //void time()//选手回复时间,时间不可更改 //{ /*********************************************************** purpose: 系统初始化 /**********************************************************/ void time1_max() { TMOD|= 0x11; TH1 =(65536-50000)/256; //12.000 TL1 =(65536-50000)%256; IE = 0x8A; TR1 = 1; } void time0_num() { TMOD|= 0x11; TH0 =(65536-50000)/256; //12.000 TL0 =(65536-50000)%256; IE = 0x83; TR0 = 1; } void delay(uint x) { uint y; for(x;x>0;x--) for(y=110;y>0;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) { 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; display(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; 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; } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服