51单片机四路抢答器程序
51单片机 4路抢答器
先说下我这个4路抢答器的功能:5个按键,第五个是复位。
第一个按键到第四个按键分别对应4个led 灯,只要1到4的其中任何一个按键按下,其对应的led灯就会亮,再按其他按键,不会有其他led灯亮。
第五个按键进行复位,开始下一轮抢答。
不多说直接上程序和protues仿真图如下:注意:我试了下,程序有点小问题,(编译是完全通过的)我也没改出来,毕竟小弟我也才学,有大神知道的话可以给我说说,,谢谢。
#include<reg51.h>//51头文件sbit key0 = P3^0;//定义key0,为P3^0引脚sbit key1 = P3^1;//定义key1,为P3^1引脚sbit key2 = P3^2;//定义key2,为P3^2引脚sbit key3 = P3^3;//定义key3,为P3^3引脚sbit key4 = P3^4;//定义key4,为P3^4引脚void main()//主函数{while(1)死循环{if(key0==0) {P1 = 0xfe;P3 = 0xf0;}//如果key0等于0,即闭合,led1亮,将其他三个按钮锁定为低电平else if(key1==0) {P1 = 0xfd;P3 = 0xf0;}//如果key0等于1,即闭合,led2亮,将其他三个按钮锁定为低电平else if(key2==0) {P1 = 0xfb;P3 = 0xf0;}//如果key0等于2,即闭合,led3亮,将其他三个按钮锁定为低电平else if(key3==0) {P1 = 0xf7;P3 = 0xf0;}//如果key0等于3,即闭合,led4亮,将其他三个按钮锁定为低电平if(key4==0) //复位按钮按下闭合,则复位{P1 = 0xff;P3 = 0xff;}}}。
4路抢答器设计单片机课程设计报告
目录1、课程设计目的 (3)2、课程设计正文 (3)1、软件方面设计 (3)①总程序流程图 (3)②显示子程序流程图 (4)2、硬件方面设计 (5)①方案设计 (5)②单元电路设计 (5)③系统调试 (8)3、课程设计总结或结论 (8)4、参考文献 (8)附录一:总的原理图附录二:PCB图附录三:总程序1、课程设计目的①可以自主设计简单地电路;②掌握响应外部中断的原理;③利用Protel硬件设计电路原理图和PCB图;④初步掌握使用Proteus进行单片机的软硬件联机调试。
技术要求:①设置4个抢答台和4个抢答成功指示灯,1个比赛主持人“开始”键和1个抢答指示灯以及1个LED显示器。
②采用中断和查询结合的方法确定按键的动作。
③主持人按下“开始”键后,若有人抢答,则抢答指示灯确认有人抢答,并用7段LED显示抢答者的号码(1--4),并同时点亮对应抢答台上的抢答成功指示灯;若10秒内无人抢答,则发出超时报警,此题作废,主持人可按下“开始”键开始下一题的抢答。
2、课程设计正文1、软件设计方面①总程序流程图②显示子程序2、硬件方面设计①方案设计采用以52为内核的STC系列的芯片,组成一个单片机的最小应用系统,运用C语言编程来实现四路抢答器的设计,采用独立式键盘来作为输入,LED数码管显示,蜂鸣器来报警。
用此方案的优点是:编程简单、操作方便、成本低和错误率低。
②单元电路设计各引脚接线:通过单片机各引脚功能的介绍,本硬件设计中,P0口接数码管显示器;P1口接独立式键盘;P2.0通过PNP驱动接数码管;/ALE脚和/PSEN脚悬空,/EA脚接高电平;复位电路包含了上电复位和按键复位;晶振选择为6MHz,GND接地,VCC接+5V电源;蜂鸣电路接在P2.1上面。
针对抢答器的设计,输入电路键盘按下开始键后,开始抢答,按下相应的键,输出电路相应的LED二极管发光、数码管显示相应的序号⑴复位电路复位电路有两种复位方式:上电复位和按键复位。
基于单片机的四路抢答器
基于单片机的四路抢答器1.由于剩余4个引脚,所以可以扩展到8路2.矩阵键盘输入任意两位数倒计时初值一、功能要求以8051系列单片机为核心,设计一个4路竞赛抢答器。
具体功能要求如下:1、该抢答器最多可供4名选手参赛,用4个按钮S0~S3表示,设置一个系统复位和抢答控制开关S,由主持人控制。
2、当主持人启动“抢答开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,LED显示器上显示选手的编号和抢答的时间并保持到主持人将系统清除为止;如规定的时间内无人抢答则蜂鸣器发声,计时器复位,为下一次计时做好准备。
3、抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
4、只有主持人的操作将电路复位后,方可结束上一次的抢答,为下一次抢答做好准备。
二.设计方案(1)倒计时用矩阵键盘输入,程序中用keycount来记录按下按键的次数,我只设置两次,只能输入两位数,多按下几次是没有效果的,相当于键盘自锁,之后单片机读取键值,缓存入一个两位的数组table【2】。
(2)采用的是3位led动态扫描的方式显示(3)中断扫描选手按键,选手按键用的用独立键盘,用与门接选手按键,当有人按下时,与门由高到低,产生下降沿而引起中断,单片机扫描独立键盘。
(4)蜂鸣器电路(5)开始按键和复位按键1-1主流程图1-2 外部中断扫描选手按键1-3 定时器中断电路图如下图由于仿真软件proteus不能用PnP仿真,所以去掉了PnP,直接用IO口驱动;真实是不行的。
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit FUW=P3^5; //抢答键sbit CLR=P3^4; //清零,复位键sbit xuan1=P2^4;//选手1,2,3,4sbit xuan2=P2^5;sbit xuan3=P2^6;sbit xuan4=P2^7;sbit wei1=P2^0;//位选1,2,3,4sbit wei2=P2^1;sbit wei3=P2^2;sbit wei4=P2^3;sbit buz=P3^0;uchar code numtab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极uint table[3]={0,0,0};//倒计时缓存uchar keycount=0;uint time=0;uchar num=0;uint ge,shi;/***********延时函数*****************/void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}/************蜂鸣器****************/void buzzer(){buz=0;delayms(50);buz=1;}/************报警部分独立按键扫描********************/ void kscan(){uchar sk;if(xuan1==0){delayms(10);if(xuan1==0){buzzer();sk=1;table[2]=sk;}}else if(xuan2==0){delayms(10);if(xuan2==0){buzzer();sk=2;table[2]=sk;}}else if(xuan3==0){delayms(10);if(xuan3==0){buzzer();sk=3;table[2]=sk;}}else if(xuan4==0){delayms(10);if(xuan4==0){buzzer();sk=4;table[2]=sk;}}}/**********矩阵键盘扫描***************/ void keyscan(){uint temp,key;P1=0xfe;//第一行为0temp=P1;temp=temp&0xf0;//与上11110000if((temp!=0xf0)&&(keycount<2))delayms(10);//去抖temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xde:key=0;table[keycount]=key;keycount++;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfd;//第二行为0temp=P1;temp=temp&0xf0;//与上11110000if((temp!=0xf0)&&(keycount<2))delayms(10);//去抖temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xed:key=1;table[keycount]=key;keycount++;break;case 0xdd:key=2;table[keycount]=key;keycount++;break;case 0xbd:key=3;table[keycount]=key;keycount++;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfb;//第三行为0temp=P1;temp=temp&0xf0;//与上11110000if((temp!=0xf0)&&(keycount<2)){delayms(10);//去抖temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xeb:key=4;table[keycount]=key;keycount++;break;case 0xdb:key=5;table[keycount]=key;keycount++;break;case 0xbb:key=6;table[keycount]=key;keycount++;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xf7;//第四行为0temp=P1;temp=temp&0xf0;//与上11110000if((temp!=0xf0)&&(keycount<2)){delayms(10);//去抖temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case 0xe7:key=7;table[keycount]=key;keycount++;break;case 0xd7:key=8;table[keycount]=key;keycount++;break;case 0xb7:key=9;table[keycount]=key;keycount++;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}}/********显示函数*********/ void display(){ge=time%10;shi=time/10;wei1=1;wei2=0;wei3=0;P0=numtab[shi];delayms(5);P0=0xff;wei1=0;wei2=1;wei3=0;P0=numtab[ge];delayms(5);P0=0xff;wei2=0;wei1=0;wei3=1;P0=numtab[table[2]];delayms(5);P0=0xff;wei3=0;}/****************主函数**********************/ main(){EA=1;TMOD=0x01;TH0=(65536-50000)/256;//定时50msTL0=(65536-50000)%256;ET0=1;EX0=1;IT0=1; //下降沿触发PX0=1;PT0=0;while(1){if(keycount<2){ keyscan();if(keycount==2){time=10*table[0]+table[1];}}if(keycount==2){display(); }/******按下开始抢答键********/if(FUW==0){delayms(10);if(FUW==0){TR0=1;while(!FUW);}}/********按下清零键*********/if(CLR==0){delayms(10);if(CLR==0){TR0=0;EX0=1;time=0;ge=0;shi=0;table[0]=0;table[1]=0;table[2]=0;keycount=0;while(!CLR);}}}}/**************定时器0中断******************/ void t0() interrupt 1{TH0=(65536-50000)/256;//定时50msTL0=(65536-50000)%256;num++;if(num==20){num=0;time--;if(time==0){TR0=0;}}}/*********外部中断0***********/void estern0() interrupt 0{uchar ks;EX0=0;//关掉中断,防止键盘抖动,多次中断,还有就是//只扫描第一次按键的选手,之后按键不扫描if(TR0==0||time==0){kscan();}else if(xuan1==0&&TR0==1 ){delayms(10);if(xuan1==0){ks=1;table[2]=ks;TR0=0;while(!xuan1);}}else if(xuan2==0&&TR0==1 ) {delayms(10);if(xuan2==0){ks=2;table[2]=ks;TR0=0;while(!xuan2);}}else if(xuan3==0&&TR0==1 ){delayms(10);if(xuan3==0){ks=3;table[2]=ks;TR0=0;while(!xuan3);}}else if(xuan4==0&&TR0==1 ){delayms(10);if(xuan4==0){ks=4;table[2]=ks;TR0=0;while(!xuan4);}}}。
项目五 4路数字显示抢答器控制
本项目中用到了单片机的外部中断, 本项目中用到了单片机的外部中断,自 INT0(P3.2)引脚接入单片机芯片。对于单片 ( )引脚接入单片机芯片。 机的中断来讲,每个中断源都有固定的入口地 机的中断来讲, 外部中断0的入口地址在 的入口地址在0003H。当单片机 址,外部中断 的入口地址在 。 检测到有外部中断发生后, 检测到有外部中断发生后,根据设定情况响应 中断:主程序被中断,转向执行中断处理程序。 中断:主程序被中断,转向执行中断处理程序。 一般中断处理程序较大,占用存储空间较多, 一般中断处理程序较大,占用存储空间较多, 因此在0003H处存放一条转移指令,转移到中 处存放一条转移指令, 因此在 处存放一条转移指令 断处理程序处。 断处理程序处。本项目程序中利用指令 实现程序跳转。 “LJMP INTT0”实现程序跳转。 实现程序跳转
试判断A中的正负 若为正数, 中的正负, 例 试判断 中的正负,若为正数,存入 20H单元;若为负数则存入 单元; 单元。 单元 若为负数则存入21H单元。 单元 JB ACC7,LOOP 解: , MOV 20H,A , SJMP $ LOOP:MOV 21H,A : , SJMP $
3、控制转移指令(AJMP) 、控制转移指令( )
在某一瞬间cpu因响应某一中断源的中断请求而正在执行它的中断服务程序时若cpu此时的中断是开放的那它必然可以把正在执行的中断服务程序暂停下来转而响应和处理中断优先权更高的中断源的中断请求等到处理完后再转回来继续执行原来的中断服务程序这就是中断嵌套
项目五: 路数字显示抢答器 项目五:4路数字显示抢答器
一、中断系统概述: 中断系统概述:
以生活中的实例来说明什么是中断:当我们在家看书的时候, 以生活中的实例来说明什么是中断:当我们在家看书的时候,电话 铃响了,这时就暂停看书去接电话,接完电话后, 铃响了,这时就暂停看书去接电话,接完电话后,又从刚才被打断的地 方继续往下看。在看书时被打断过一次的这一过程称为中断, 方继续往下看。在看书时被打断过一次的这一过程称为中断,而引起中 断的原因,即中断的来源。就称为中断源。 断的原因,即中断的来源。就称为中断源。 当有多个中断同时发生时,计算机同时进行处理是不可能的, 当有多个中断同时发生时,计算机同时进行处理是不可能的,只能 按照事情的轻重缓急一一处理,这种给中断源排队的过程,称为中断优 按照事情的轻重缓急一一处理,这种给中断源排队的过程, 先级设置。 先级设置。 如果不想理会某个中断源,就可以将它禁止掉,不允许它引起中断, 如果不想理会某个中断源,就可以将它禁止掉,不允许它引起中断, 这称为中断禁止,比如将电话线拔掉,以拒绝接听电话。 这称为中断禁止,比如将电话线拔掉,以拒绝接听电话。只有将这个中 断源打开,即中断允许,它所引起的中断才会被处理, 断源打开,即中断允许,它所引起的中断才会被处理,
基于51单片机的四路抢答器设计-毕设论文
山东农业大学毕业论文基于51单片机的四路抢答器设计院部:机械与电子工程学院专业班级:10级自动化1班届次:14届学生姓名:吴新春学号:20101209指导教师:刘平二〇一四年五月二十七日摘要 (I)Abstract (II)引言 (1)1系统概述 (2)1.1抢答器需求分析 (2)1.2 抢答器工作过程 (2)2 单片机功能简介 (3)2.1 STC89C51的功能 (3)2.1.1 STC89C51特殊功能寄存器 (3)2.2 STC89c51单片机的内部结构 (5)3 系统硬件电路的设计 (6)3.1 系统总电路如图 (6)3.2 最小系统的设计 (7)3.2.1 电源的设计 (7)3.2.2 时钟频率电路的设计 (7)3.2.3 复位电路的设计 (9)3.3 显示电路的设计 (11)3.3.1 数码管简介 (12)3.3.2 CD4511七段译码器简介 (12)3.4 按键电路的设计 (14)3.5 蜂鸣器设计 (15)3.6元器件焊接及调试 (17)4 系统软件的设计 (17)4.1 延时子程序 (19)4.2 显示子程序 (19)4.3 倒计时加按键扫描子程序 (19)4.4主程序及分析 (20)5 结论 (23)参考文献 (24)致谢 (25)附录 1 (26)附录2 (27)Contents Abstract....................................................... I I Introduction. (1)1 System overview (2)1.1 The analysis of responder needs (2)1.2 Responder work process (2)2 MCU features (3)2.1 STC89C51 (3)2.1.1 Special function register (3)2.2 The internal structure of STC89c51 (5)3 The design of circuit system (6)3.1 The circuit system (6)3.2 The design of minimum system (7)3.2.1 The design of power supply (7)3.2.2 The design of clock circuit (7)3.2.3 The design of reset circuit (9)3.3 The design of display circuit (11)3.3.1 Digital tube profile (12)3.3.2 The introduction of CD4511 (13)3.4 The design of key circuit (15)3.5 The design of buzzer (15)3.6 Components and welding debuggin g (17)4 The design of software (19)4.1 Delay subroutine (19)4.2 Display program (19)4.3 The countdown and keyboard scanning subroutine (19)4.4 Main program and analysis (20)5 Conclusions (23)References (24)Acknowledgement (25)Appendix 1 (26)Appendix 2 (27)基于51单片机的四路抢答器设计作者:吴新春,指导教师:刘平(山东农业大学讲师)【摘要】本文设计以STC89C51单片机为核心的四路抢答器。
四路抢答器的设计(C51)
case 0xf7: //键 4 按下:一号选手抢答处理 if(start_flag==0) //犯规操作处理 {
//
j[0]=1; display(); P3=0xf9; delay(200); P3=0xfb; break; } if(chaos_flag==1||qiang_flag==1) break; else { P3=0xef; sec=8; TR0=1; j[0]=1; buffer_zone(); display(); qiang_flag=1; } break;
/********显示函数***********/ void display() { temp=0xfe; for(k=0;k<8;k++) { P2=temp; P0=i[j[k]]; delay(2); temp=_crol_(temp,1); } } /*********函数初始化*********/ void inti0() { TMOD=0x01; TH0=(65535-50000)/256; TL0=(65525-50000)%256; EA=1; ET0=1; TR0=0; } /********中断函数**********/ void zd() interrupt 1 { TH0=(65535-50000)/256; TL0=(65525-50000)%256; m++; if(m==20) { m=0; sec--; buffer_zone(); if(sec<=0) { P3=0xf5; delay(400); P3=0xf7; TR0=0; j[0]=11; j[6]=11; j[7]=11; while(1); }
case 0xdf: //键 6 按下:三号选手抢答处理 if(start_flag==0) //犯规操作处理 { j[0]=3; display(); P3=0xf9; delay(200); P3=0xfb; break; } if(chaos_flag==1||qiang_flag==1) //超时或已有选手抢答处理 break; else { TR0=1; P3=0xbf; j[0]=3; display(); sec=8; // buffer_zone(); qiang_flag=1; } break; case 0xbf: //键 7 按下:四号选手抢答处理 if(start_flag==0) //犯规操作处理 { j[0]=4; display(); P3=0xf9; delay(110); P3=0xfb; break; } if(chaos_flag==1||qiang_flag==1) //超时或已有选手抢答处理 break; else { TR0=1; P3=0x7f; j[0]=4; display(); sec=8;
用51单片机制作4路抢答器
用51单片机制作4路抢答器此抢答器具有限时抢答,超时无效的特点,并可以对主持人未喊开始而提前抢答的犯规情况作出判断。
由于用了单片机,所以电路很简单。
懒得写译码程序,也不想做驱动电路。
干脆直接用了一片74LS48译码驱动器来驱动数码管。
呵呵,面包板上插一下,由于之前在Proteus中仿真过,所以直接就正常运行了~上一张实物图 左边的是STC89C52的最小系统版,P1口上接了8个LED,当时做流水灯的。
直接拿来用了。
P2口是显示输出,P3口接受按键。
那个小的芯片就是74LS48啦~下方的是编程器+电源,STC的芯片就是编程方便,支持在线烧写,这么小巧的编程器~ 当然最重要的是程序,附上代码清单。
写的比较烂,竟然上了100行,希望不要被大虾们骂得太惨>_#include#defineuintunsignedchar //计时变量uints= 0,ms= 0; //枚举类型:记录抢答器工作状态enumStat{ Idle= 0,//空闲状态,比如正在读题Ready= 1,//就绪状态,可以抢答Respond= 2,//响应状态,有人抢到了}stat; //时钟中断服务程序voidTimer()interrupt1using1{ TH0=0x3C; TL0=0xBD; ms++; s+=ms/20; ms%= 20; s%= 60;} //重置时钟voidResetTimer(){ EA= 1;//允许CPU中断ET0= 1;//定时器中断打开TMOD= 1;//设定时器为方式TR0= 0;//关定时器ms= 0; s= 0;} //优先编码(反向输入)uintEncode(uintc){ uinti,mask= 1; if(c== 0)return0; for(i= 0;ivoidmain(){ uintled= 0xff;//对应P1口,指示灯uintdisp= 15;//对应P2口,数。
单片机抢答器设计程序
单片机抢答器设计程序以下是一个简单的单片机抢答器设计程序示例。
```c#include <reg51.h>sbit KEY1=P1^0; // 定义按键1引脚sbit KEY2=P1^1; // 定义按键2引脚sbit KEY3=P1^2; // 定义按键3引脚sbit KEY4=P1^3; // 定义按键4引脚unsigned char code ANSWER[4] = {0x01, 0x02, 0x04, 0x08}; // 定义答案编号unsigned char code LED[4] = {0xFE, 0xFD, 0xFB, 0xF7}; // 定义LED显示编号unsigned char answer_index = 0; // 答案编号索引void main(){unsigned char key_value;while (1){key_value = 0x00;// 检测按键是否按下if (KEY1 == 0){key_value = 0x01;}else if (KEY2 == 0){key_value = 0x02;}else if (KEY3 == 0){key_value = 0x03;}else if (KEY4 == 0){key_value = 0x04;}// 检测按键是否按下并且答案编号匹配if (key_value != 0x00 && key_value ==ANSWER[answer_index]){P2 = LED[answer_index]; // 显示答题编号的LED亮起 answer_index++;}}}```这个程序设计了一个简单的抢答器系统。
通过按下不同的按键来抢答,按键的编号与预设的答案进行匹配。
如果按键编号与答案匹配,对应的LED灯亮起,并且答案编号索引加一,以准备下一题。
这个程序可以根据实际需求进行修改和优化。
单片机课程设计四路抢答器
xxxxxx大学课程设计报告课程设计名称:单片机系统综合课程设计课程设计题目:四路抢答器院(系):专业:班级:学号:姓名:指导教师:完成日期:xxxxxx大学课程设计报告目录第1章总体设计方案 (1)1.1课程设计的内容和要求 (1)1.2课程设计原理 (1)1.3课程设计思路 (2)1.4实验环境 (2)第2章详细设计方案 (3)2.1硬件电路设计 (3)2.2主程序设计 (4)2.3功能模块的设计与实现独立式按键功能模块 (4)第3章调试及结果分析 (7)3.1调试步骤及方法 (7)3.2实验结果及分析 (7)参考文献 (8)附录一(源程序) (9)附录二(原理图) (13)附录三(元器件清单) (14)第1章总体设计方案1.1课程设计的内容和要求(1)课程设计内容:使用51单片机制作抢答器功能如下:①常规模式主持人按下抢答开始开关,数码管从10S开始倒计时,此时选手可以抢答,若有选手抢答,相应LED亮,单数码管显示其选手号,双数码管从30S开始进行答题倒计时,答题时间到则单数码管闪烁显示选手号5次,再回到初始状态,若时间到但没有人抢答则回到初始状态(所有灯灭,检测主持键是否按下)②违规模式主持人尚在念题还未按下抢答开始开关,某选手违规抢答,则单数码管闪烁显示其选手号5次后回到初始状态。
(2)课程设计要求:①认真完成课程设计任务;②通过老师现场验收;③交出完整的课程设计报告。
1.2 课程设计原理根据题目要求,设计中采用8031芯片、LED灯、数码管和一些独立式按键构成一个简易四路抢答器。
设计中由于数码管扫描延时比较长,采用单片机的内部定时器进行定时,并采用中断方式。
整个抢答器的工作原理是:在正常的供电状态下,开始抢答时利用单片机倒计时,并由单片机将所需要显示的数据送到LED显示器的输入口,当有键按下时则执行相应的键功能程序。
1.3 课程设计思路(1)提出方案根据设计要求,系统采用个独立式开关作为按键,通过单片机不停地扫描P1口来控制LED数码管的显示,当按下启动按键后,经单片机处理,输出控制信号,数码管从10开始进入减计时并在数码管上显示剩余时间,在有选手按下按键时,就会有对应于这个按键的编码在数码管上显示,同时蜂鸣器给出声响来提示主持人和选手;如果在10秒内没有选手抢答,则本次抢答无效,系统封锁输入电路,禁止选手超时抢答。
51单片机的四路电子抢答器设计
目录1设计要求与功能 (4)1.1设计基本要求 (4)2 硬件设计 (4)2.1控制系统及所需元件 (4)2.2抢答器显示模块 (5)2.3 电源方案的选择 (6)2.4 抢答器键盘的选择 (6)2.5蜂鸣器模块 (7)2.6外部振荡电路 (7)3 程序设计 (7)3.1程序流程图 (7)3.2系统的调试............................................... (9)3.3 焊接的问题及解决 (10)4总结 (10)附录C程序 (11)Word 资料一设计要求与功能1.1设计基本要求(1)抢答器同时供4名选手或4个代表队比赛使用,分别用4个按钮K1~K4表示。
(2)设置裁判开关k5和清零开关k6,该开关由主持人控制,当主持人按下k6,系统复位,预备抢答,当主持人按下总控制控制开关k5,开始抢答;(3)抢答器具有定时抢答功能,抢答时间为倒计时15秒。
当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的提示声响,声响持续的时间0.5秒左右,当计时小于5秒后,每减少一秒,便报警一次以提示选手。
(4)抢答器具有锁存功能,参赛选手在设定的时间内进行抢答,抢答有效,蜂鸣器发声,计时停止,数码管上显示选手的编号和时间,选手相应的信号灯被点亮,其他选手再抢答时无效。
(5)如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答。
等待下一轮抢答。
二硬件设计2.1控制系统及所需元件控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成。
其中单片机STC89C52是系统工作的核心,它主要负责控制各个部分协调工作。
所需元件:该系统的核心器件是STC89C52。
各口功能:P0.0-P0.3 是数码管的位选口;P2.0-P2.7是数码管的段选口,为其传送段选信号;P1.0-P1.3是4组抢答信号的输入口;P1.4、P1.5由裁判控制,分别是抢答开始\复位功能键;P1.6为蜂鸣器的控制口;P3.4-P3.7为选手信号灯输出口;在其外围接上电复位电路、数码管电路、LED发光二极管、按键电路及扬声器电路。
单片机的四路抢答器设计基程序
基于51单片机的四路抢答器设计小组成员:丁霏10272094乐燕思10272096刘颖10272104目录摘要 (2)一.需实现的功能 (2)二.硬件设计 (2)2.1抢答器电路图 (2)2.2单元电路设计 (3)2.2.1.主持人开关: (4)2.2.2选手开关电路: (4)2.2.3报警系统: (5)2.3.4显示系统: (6)2.3.5晶振系统: (6)2.3.6鉴别电路: (7)三.软件设计 (8)3.1原理框图 (8)3.2程序流程图 (8)3.3程序 (10)四.实践过程 (23)4.1具体过程: (23)4.2碰到的问题及解决方案 (24)五.总结与体会 (25)摘要现在抢答器很广泛地用于各种场合的竞赛,为竞争增添了刺激性、娱乐性。
抢答器的出现为人们带来了方便,能准确无误的从若干名参赛中确定出最先抢答者,并且有显示,声效等功能。
本文介绍一种四路抢答器,由抢答电路,定时电路,报警电路等组成。
关键字:四路抢答器抢答电路定时电路报警电路一.需实现的功能1.接通电源后,数码管显示为“F FF”,此时抢答器处于禁止抢答状态;2.主持人可通过抢答时间调节按键与答题时间调节按键来调节时间长短,再按下停止键后,主持人按下“开始”键,宣布“开始”抢答,定时器开始倒计时且蜂鸣器提示,选手在规定的15s定时时间内抢答;3.当有选手按下抢答按键时,则显示选手编号与剩余答题时间显示且蜂鸣器提示,此时其他选手不能再进行抢答;4.答题结束后,主持人按下停止键,如果再次抢答必须由主持人再次操作“清除”和“开始”状态开关,此时抢答时间与答题时间恢复为默认值,分别为15s和45s,但若主持人只停止键后就开始下一轮抢答则抢答时间与答题时间为上一轮设置的时间。
二.硬件设计2.1抢答器电路图如图2.1所示为电路图,其工作原理为:接通电源后主持人将开关拨到“清零”状态,抢答器处于禁止状态,定时器设定时间,主持人将开关置“开始”,宣布抢答开始时,定时器倒计时,扬声器发出响声。
51单片机四路抢答器PROTEUS仿真报告(含C语言程序)
HEFEI UNIVERSITY四路抢答器仿真设计题目四路抢答器仿真设计班级自动化(1)班成员 YCT 11050310**PT 11050310**WW 11050310**时间 2014.5.19四路抢答器仿真设计目录一、前言 (1)二、方案设计 (1)三、理论分析 (2)四、电路设计 (2)1、晶体振荡器电路 (2)2、复位电路 (3)3、按键扫描部分 (3)4、显示部分 (4)五、软件模块 (6)六、系统组装调试 (8)七、总结 (8)参考文献 (9)附录 (10)四路抢答器仿真设计一、前言本设计要求能够在主持人按下开始键后,四个参赛者开始抢按自己的按键,谁的按键先按下,谁面前的灯就会亮并且有相应的提示,当参赛者耗时太多时又会有相应的提示。
根据设计的要求,本系统采用独立式按键,通过单片机不停的扫描按键来控制LED灯和蜂鸣器,并用定时器T0来定超时的时间,当超时的时候让蜂鸣器响。
二、方案设计(1)、总体设计方案一:采用可编程I/O口扩展芯片82558255作为单片机的扩展接口能实现很多功能,但是这个系统并不复杂,用8155会浪费很多的资源,而且8255要用P0和P2端口作为地址线对它进行读写,这样不仅浪费端口还使得编程变的复杂。
从节省资源和简化编程的角度考虑,放弃了此方案。
方案二:直接采用AT89C52单片机直接用单片机不仅编程被简化,还有效的利用了各个端口。
8051单片机的资源完全够这个系统的要求。
所以最终选择了此方案。
(2)、模块方案一:采用4*4矩阵键盘此种键盘是常用的按键扫描方法,但是本系统只需要六个按键,这样就会浪费十个,而且矩阵按键扫描要送数读数,对于编程很复杂,最终放弃了此方案。
方案二:采用独立式键盘本系统只要六个按键就可以,用独立式键盘不仅节省端口还使编程变得简单。
程序只要不停的读数检查就行。
所以,最终选择此方案。
2、系统总体设计方案与实现框图采用六个独立式的键盘作为按键输入,当在开始后有按键按下时,就会有对应于这个按键的灯亮并且蜂鸣器响一声,其它按键再按也无效。
基于MCS-51单片机的四路抢答器
【实例56】基于MCS-51单片机的四路抢答器1.显示程序void delay_20ms(void) //延时20msvoid max7219_reset(void) //初始化MAX7219void write_reg(uchar reg,uchar sdata) //写入命令void write_digit(uchar digit,uchar number)//显示数字void send_data(uchar byte) //MAX7219的驱动程序void display_time(void) //显示倒计时剩余时间2.按键扫描程序bit control_key(void) //检测主持人是否按键{if(KEY5==1) //如果KEY5为高说明没有按键return 1; //返回1,表示没有按键动作else //如果KEY5为低说明可能有按键动作delay_20ms(); //延时20ms,去抖动if(KEY5==1) //如果20ms后KEY5变为高电平是干扰return 1; //返回1else //如果20ms后仍为低电平确认有按键动作return 0; //返回0}子程序get_key_num()用于检测是否有参赛者按动答题按键。
程序代码如下:uchar get_key_num() //检测哪个参赛者按键{uchar key_state=0;key_state=P1;key_state&=0x0f; //读取P1口的低四位if(key_state==0x0f) //若均为高电平,说明无人按键return 0; //返回1else{key_state^=0xff;if(key_state&0x01) return 1; //如果KEY1被按下,返回1else if(key_state&0x02) return 2; //如果KEY2被按下,返回2else if(key_state&0x04) return 3; //如果KEY3被按下,返回3else return 4; /如果KEY4被按下,返回4}}子程序key_handle()用于对答题按键进行处理。
创新性实验报告-基于51单片机的四路抢答器设计
山东科技大学电工电子实验教学中心
创新性实验结题报告
实验项目名称_基于51单片机的四路抢答器设计
__________
组长姓名学号_
手机 Email_
成员姓名_学号__
成员姓名__学号__
专业___班级__
指导教师及职称________
开课学期至_学年_学期
提交时间年月日
一、实验摘要
二、实验目的
三、实验场地及仪器、设备和材料:
四、实验内容
图1 四路抢答器实验原理图
开始按键接到单片机的P1.1口,复位按键接到单片机的P1.0口,四个抢答按键分别接
五、实验结果与分析
选手3抢答键按下发光二极管D4点亮,蜂鸣器报警,同时数码管显示3。
2、对实验现象、数据及观察结果的分析与讨论:
六、指导老师评语及得分:
七、中心意见:。
基于MCS51单片机的四路抢答器课件
程序流程图如下
电路原理图及PCB制版图
四路智力抢答器电路原理图
四路智力抢答器PCB模块
程序设计
▪ 抢答器工作过程如下
▪ · 首先主持人选定倒计时时间,单片机扫描U3以 获取此信息。如果没有人为设置,默认为10s。
▪ · 在按下抢答按键之前,3个数码管全部显示“0”。
▪ · 按下抢答按键之后,蜂鸣器响一声,单片机开 始倒计时,数码管U6和U7显示倒计时时间,数 码管U8显示“0”。
▪ void send_data(uchar);
▪ uchar set_time(void); 时时间
▪ bit control_key(void); 是否按键
▪ uchar get_key_num(void); 个参赛者按键
▪ void display_time(void); 时剩余时间
//初始化MAX7219 //向控制寄存器写数
▪ 完成上述功能的电路包括时间设定开关、声光显 示、按键控制以及按键锁存等部分
各模块功能
▪ 单片机部分 ▪ 时间设定模块 ▪ 按键模块 ▪ 数码管显示模块 ▪ 蜂鸣器模块
单片机部分
▪ 通过读取P3.7~P3.3 的状态决定倒计时时 间;通过读取P1.3~ P1.0的状态读取按键 情况;通过P2.4~ P2.2控制显示模块以 显示按键者的号码和 倒计时所剩时间;通 过P0.1控制蜂鸣器
key_flg=1;
//设置有人按键答题标志
TR0=0;
//停止T0运行
}
else
//否则循环检测
{
display_time();
//并显示剩余时间
continue;
}
}
if(key_flg==1)
51单片机4X4抢答器源程序
/**********************************************程序名: 4X4抢答器.h作者: 风雪子郁时间: 2012/8/22邮箱:fxziyu@地址:四川信息职业技术学院(雪峰校区)**********************************************/#include <reg51.h>#define unchar unsigned char/*******位申明*******///P0口:数码管段输出//P2口:P2_0 - P2_4 数码管位输出//P3口:4x4矩阵键盘sbit k1=P1^0; //按钮:时间加sbit k2=P1^1; //按钮:时间减sbit k3=P1^2; //按钮:开始sbit k4=P1^3; //按钮:复位sbit sp=P1^4; //蜂鸣器sbit led1=P1^5; //LED:倒计时提醒sbit led2=P1^6; //LED:选手抢答/*****变量声明*******/unchar code table[]={ 0x3f,0x06,0x5b,0x4f, //0~f显示表0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unchar code table0[]={0xfe,0xfd,0xfb,0xf7}; //P2口位选unchar display[]={0,0,0,0}; //显示位存储char num,num1; //num1时间unchar num2,start; //num2选手号,start =0未开始,=1抢答开始=2抢答结束/********延时函数********/void delay(unchar z) //延时1ms子函数{unchar x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}/*******蜂鸣函数********/void soud(unchar i,j){for(;j>0;j--){sp=~sp;delay(i);}}/********初始化函数*******/void init(){EA=1; //定时器T0初始化ET0=1;TMOD=0x01; //定时器T0工作方式设定TH0=(65536-50000)/256; //装初值TL0=(65536-50000)%256;TR0=0; //定时器关闭led1=led2=1; //关闭led指示灯start=0; //开始标记置零sp=0; //初始化蜂鸣器num1=30; //赋时间初值num2=0; //选手号置零}/******按键检测函数******/void key1() //功能按键检测子函数{if(k1==0) //判断时间加K1是否按下{delay(5); //延时躲过抖动if(k1==0) //再次确认是否按下K1{num1++; //时间自加1if(num1==99) num1=0; //如果时间num=99,清零numwhile(k1==0); //等待K1松手}}if(k2==0) //判断时间减K2是否按下{delay(5); //延时躲过抖动if(k2==0) //再次确认是否按下K2{num1--; //时间自减1if(num1==-1) num1=99; //如果时间num=-1,赋值num=99 while(k2==0); //等待K2松手}}if(k3==0) //判断开始按钮K3是否按下{delay(5); //延时躲过抖动if(k3==0) //再次确认是否按下K3{if(!start) soud(1,100); //蜂鸣器短鸣,if句为防止再按k3时反复鸣响start=1; //开始标致置1TR0=1;}}}void key2() //矩阵键盘检测子函数{unchar a,b,temp;P3=0xff; //读引脚前需写入高电平b=0x10;for(a=0;a<4;a++) //P3_4 - P3_7 行线端依次送入低电平{P3=~b; //置第a行线为低b<<=1;temp=P3; //P3口信息送入temp中temp=temp&0x0f; //屏蔽高四位,保留低四位if (temp!=0x0f) //判断:假如列线有不为高的时候,执行if循环体{delay(5); //延时躲过抖动temp=P3;temp=temp&0x0f;if (temp!=0x0f){switch(temp) //判断是哪个键按下{case 0x0e:num2=a*4+4;break; //第a行第四个按下case 0x0d:num2=a*4+3;break; //第a行第三个按下case 0x0b:num2=a*4+2;break; //第a行第二个按下case 0x07:num2=a*4+1;break; //第a行第一个按下}// TR0=0; //关中断,若要开启选手答题时间倒计时,注释掉本句开启下一句即可num1=60; //选手答题时间,默认60S,若要关闭选手答题时间倒计时,开启本句注释掉上一句即可start=2; //抢答结束led2=0; //抢答指示灯亮soud(1,100); //蜂鸣器短鸣delay(5);}}}}/******显示函数*******/void xianshi(){unchar a;for(a=0;a<4;a++) //位选{delay(5);P2=~table0[a];P0=~table[display[a]];}display[0]=num1/10; //倒计时显示display[1]=num1%10;display[2]=num2/10; //显示抢答者号display[3]=num2%10;}/*******主函数*******/void main(){init();while(1){if(start==0) key1(); //当未启动启动抢答时才检测功能按钮if(start==1) key2(); //当启动抢答时才能检测选手按钮if(k4==0) //判断复位键K4是否按下{delay(5); //延时躲过抖动if(k4==0) //再次确认是否按下K4{init();}}xianshi();}}/********中断*********/void time0() interrupt 1 //定时器T0中断{TF0=0;TMOD=0x01; //T0,方式1,12MHz晶振TH0=(65536-50000)/256;TL0=(65536-50000)%256;num++;if(num==20) //是否满1S{num=0;num1--;if(num1<6) soud(1,100);if(num1==0) {TR0=0;soud(5,100);start=2;led1=0;} }}。
单片机的四路电子抢答器设计
单片机的四路电子抢答器设计设计四路电子抢答器可以用单片机来实现。
抢答器通常包括主控板、显示屏、按键模块、信号输入模块和声音模块,下面我将详细介绍设计过程。
一、系统硬件设计部分:1.主控板:使用单片机作为主控处理器,常见的有51系列、AVR系列和STM32系列等。
根据所选单片机的引脚分配情况,设计电路板布线。
2.显示屏:使用液晶显示屏来显示题目和选手答案情况。
选择适合的液晶显示屏,并连接到主控板上。
3.按键模块:设置每个选手的抢答按键,可以使用带有独立按键的矩阵键盘模块,也可以使用独立的按键和扩展IO口。
4.信号输入模块:接收抢答信号,可以使用红外接收器模块,当选手按下抢答键时发射红外信号,由红外接收器模块接收。
也可以选择其他合适的接收方式。
5.声音模块:用于提醒和提示答题情况,可以使用蜂鸣器模块,通过主控板控制发声。
二、系统软件设计部分:1.初始化:在主控板上编写程序,进行硬件初始化,包括液晶屏初始化、按键模块初始化、红外接收模块初始化等操作。
2.题目显示:通过液晶显示屏展示当前抢答题目。
3.抢答检测:主控板通过循环扫描检测按键状态,当检测到一些按键按下时,记录该选手抢答,并停止其他选手的抢答。
4.抢答结果显示:通过液晶显示屏显示抢答结果,标识各个选手的抢答顺序。
5.声音提示:根据抢答结果,通过蜂鸣器模块进行声音提示,例如正确答案和错误答案的不同提示音。
6.重复抢答:在抢答过程中,如果有选手重复抢答,可以通过程序进行判断并作相应的提示。
7.复位操作:可以设置一个复位按钮,用于清除抢答结果和重新开始抢答。
三、系统工作流程:1.开机初始化:主控板上电初始化,配置各个模块,显示“待机”状态。
2.显示题目:主控板从题库中读取题目内容,并通过液晶显示屏展示给选手。
3.抢答:选手按下抢答按钮,主控板检测到按键状态变化并记录抢答情况。
4.显示抢答结果:主控板通过液晶显示屏显示抢答结果,标识各个选手的抢答顺序。
4路at89c51抢答器的设计c语言
4路AT89C51抢答器的设计(C语言)概述在各种答题活动中,抢答器是作为重要装备之一,用于检测谁首先按下按钮进行答题。
本文将介绍如何使用AT89C51单片机设计一款4路抢答器,并使用C语言进行编程。
设计原理抢答器的设计原理主要基于按键输入和信号处理。
当有参与者按下按钮进行抢答时,单片机将检测到该按钮按下的信号,并进行相应的处理,包括显示抢答者编号和记录答题结果等。
硬件连接以下是4路抢答器的硬件连接示意图:+-----------------+| || AT89C51 || |+-----+-----+-----+| |+----+--+ || Button1 +--++----+--+|+----+--+| Button2 |+----+--+|+----+--+| Button3 |+----+--+|+----+--+| Button4 |+----+--+程序设计初始化引脚和变量首先,需要初始化所使用的引脚和变量。
AT89C51的IO口用于连接按钮,需要将其配置为输入模式。
同时,定义一个变量用于记录当前的抢答者编号。
主循环主循环会不断扫描每个按钮的状态,当检测到有按钮按下时,记录抢答者编号并进行相应的处理。
按钮扫描函数按钮扫描函数用于检测按钮的状态。
当检测到按钮按下时,返回对应的编号。
在编写按钮扫描函数时,可以使用延时函数来确保稳定的检测结果。
显示抢答者编号函数显示抢答者编号函数用于将抢答者编号显示在LED灯或LCD屏幕上。
抢答者编号可以根据具体需求进行显示方式的设计,比如使用不同颜色的LED灯表示不同编号的抢答者。
记录答题结果函数记录答题结果函数用于记录每个抢答者的答题结果。
可以使用数组来存储每个抢答者的成绩或者答题情况。
中断处理在抢答器设计中,中断处理函数起着重要作用。
当检测到有按钮按下时,通过中断处理函数及时响应,并进行相应的处理。
总结本文介绍了使用AT89C51单片机设计4路抢答器的方法,并使用C语言进行编程。
C51单片机四路抢答器
目录一、摘要 (3)二、方案设计 (4)2.1、设计要求 (4)2.2、总体法案设计 (4)三、硬件电路设计 (5)3.1、元器件简介 (5)3.2、独立式按键电路 (7)3.3、时钟电路设计 (6)3.4、指示灯电路设计 (7)四、制作以调试 (8)4.1系统程序设计 (8)4.2主程序流程图主程序流程图 (8)4.3程序清单 (9)五、心得与体会 (11)六、参考文献 (12)一、摘要单片机作为一种工具,现在已经广泛的应用于智力和只是竞赛场合。
本次设计是基于单片机51系列的理论知识综合运用AT89C52单片机设计的简易四路抢答器。
利用AT89C52单片机的外围接口来实现抢答系统,利用单片机的定时器/计数器计数和定时的原理,将软、硬件有机的结合起来,使得系统能正确的记时,发光二极管能正常的闪烁。
同时系统能够实现:在抢答过程中只有在主持人按下开始抢答键开始之后抢答才有效,如果在开始抢答之前抢答视为无效。
在抢答成功之后发光二极管会变成闪烁状态与提示选手开始回答问题。
同时还有主持人控制的系统复位键,以实现系统的复位。
还有按键锁定,在一个选手抢答成功或者法规状态下其他按键无效。
通过这次的设计,对51系列的单片机的运用有了更深一层次的了解,也提高了我们的动手能力,加深我们对单片机的映像,为我们以后的学习打下一定的基础。
二、方案设计2.1、设计要求(1)、总共4个按键,四个供四个选手用作“抢答”操作。
(2)、用1个发光二极管用作开始抢答的指示灯,用4个发光二极管分别显示4个选手的抢答状态。
(3)、开始抢答后,哪个选手抢答键最先按下,该选手的抢答指示灯点亮,表示抢答成功,此时其他选手再按键为无效,抢答成功后开始3秒计时,到时指示灯变为闪烁,以提示选手选手抢答后必须3秒内回答问题。
2.2、总体法案设计方案:依据课题要求,基于AT89C52单片机制作的抢答器,其最大的好处就是处理快,准确性高、可靠性好、控制功能强。