51单片机4路抢答器的原理及C语言源程序
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;}}}。
四路抢答器的设计(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;
四路抢答器电路组成及工作原理(含电路图)
四路抢答器电路组成及工作原理(含电路图)电路组成及工作原理四路竞赛抢答器总电路原理图如图1所示。
图1 四路竞赛抢答器原理图1.抢答器电路原理:如图2,IO1,IO2,IO3,IO4分别为抢答器按钮的输入端,开始抢答,假设IO1抢答成功,通过四D触发器输出Q1=1,Q1’=0,而Q 2’=Q3’=Q4’=1,通过四输入与非门后,输出高电平,再经过反相器输出低电平,再经过两输入与非门,输出低电平,此时四D触发器处于保持状态,并且其他按钮的输入不起作用,IO1的抢答信号被锁存。
此时LED1发光并且蜂鸣器发出响声。
其他抢答按钮同理。
图2 抢答器部分电路图2.计时电路原理:计时电路为两片74LS160用置数法构成的31进制计数器,因为可以为了让答题者直观的看到30S这个时间点,所以设置了31进制的计数器。
两片的四个输入端均接低电平,两片的输出端分别接七段译码管直接显示数字,高位的74LS160芯片的Q1Q2接到一个二输入的与非门(U8A)输出到计数器的LD端、三输入与非门端、反相器端。
输出到LD端是为了构成31进制计数器,当高位变为3时,计数器置0。
输出到三输入与非门(U9A)和时钟脉冲、开关的电平信号一起输入到与非门中,这就是为什么能控制计时的开始与暂停了,当开关输入低电平时,无论是否有时钟信号,时钟均不发生改变,此时时钟信号为无效信号;而当开关输入高电平时,U8A输出也为高,因此,时钟信号为有效信号,因此,凭借这样的类似锁存的电路,就可以控制计时的开始与暂停。
而当时间到了30s时,U8A输出为低电平,时钟信号又成为无效信号,时间被停止在30s,此时将U8A信号通过一个反相器输出到蜂鸣器,蜂鸣器发出响声。
图3 计时器电路3.555函数发生器:输出高电平时间:T1=(R1+R2)Cln2 输出低电平时间:T2=R2Cln2振荡周期:T=(R1+2R2)Cln2图4 555函数发生器。
用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口,数。
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、系统总体设计方案与实现框图采用六个独立式的键盘作为按键输入,当在开始后有按键按下时,就会有对应于这个按键的灯亮并且蜂鸣器响一声,其它按键再按也无效。
单片机课程设计四路抢答器
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秒内没有选手抢答,则本次抢答无效,系统封锁输入电路,禁止选手超时抢答。
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单片机制作的抢答器,其最大的好处就是处理快,准确性高、可靠性好、控制功能强。
四路抢答器电路组成及工作原理
四路抢答器电路组成及工作原理四路抢答器电路是一种用于抢答游戏或竞赛中的电子设备,可以让多个参与者以快速抢答的方式回答问题。
其基本组成部分包括信号发生器、信号接收模块、计分显示模块和控制模块。
下面我将详细介绍四路抢答器电路的工作原理。
1.信号发生器:信号发生器是四路抢答器电路的核心部分,它负责产生试题信号和抢答信号。
在发生器中,有一个计时器和一个按钮开关。
在游戏开始之前,计时器初始化为0,表示尚未开始抢答。
当游戏开始后,计时器开始运行,并且每秒钟产生一个试题信号。
当有人按下按钮开关时,计时器停止。
2.信号接收模块:信号接收模块是抢答器电路的外设,用于接收信号发生器产生的信号。
它包括四个接收器,分别对应四个参与者。
每个接收器都连接到一个LED指示灯和一个蜂鸣器。
当试题信号到达接收器时,LED指示灯会点亮,并发出一声蜂鸣器声音。
接收器还可以捕捉到按钮开关的信号,以确定参与者是否按下了按钮。
3.计分显示模块:计分显示模块用于显示每个参与者的得分情况。
它包括四个数码管显示器,分别对应四个参与者。
当一些参与者按下按钮开关时,计分显示模块会将其得分加1,并在数码管上显示出来。
4.控制模块:控制模块负责控制整个四路抢答器电路的工作流程。
它连接信号发生器、信号接收模块和计分显示模块。
控制模块可以控制信号发生器的启动和停止,在游戏进行过程中,它还会监测参与者是否按下了按钮开关,并相应地控制信号接收模块和计分显示模块。
1.游戏开始:控制模块启动信号发生器,并初始化计分显示模块中的得分为0。
信号发生器开始运行,每秒钟产生一个试题信号,对所有的参与者公平。
2.抢答:参与者观察试题信号的到来,并根据自己的判断抢答。
抢答的方式是按下按钮开关。
当有人按下按钮开关时,信号发生器停止。
3.信号接收和计分:信号接收模块接收到试题信号后,LED指示灯点亮,并发出蜂鸣器声音,提醒参与者谁是第一个抢答的人。
接下来,信号接收模块还会接收按钮开关的信号,并通知控制模块参与者是否抢答成功。
基于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()用于对答题按键进行处理。
四人抢答器(C语言)
g51.h>#include<intrins.h>unsigned char code tab[15]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//段选unsigned char key; //存放键盘扫描结果unsigned int a=0,b=0,ting=0,stop=1,bi;unsigned int e=0,f=0,g=0,h=0,we=0;void xian();/* 键盘程序延时程序 */void dlms(void){unsigned char i;for(i=100;i>0;i--);}delay(unsigned char x){while(x--)dlms();}void dl0ms(unsigned char s){unsigned int o,p;while(s--){for(o=0;o>2000;o++)for(p=0;p>1000;p++);}}/* 键盘扫描程序 */unsigned char kbscan(void){unsigned scode ,recode;P1=0xf0;if((P1&0xf0)!=0xf0){delay(50);if((P1&0xf0)!=0xf0){delay(2);scode=0xfe;while((scode&0x10)!=0){P1=scode;if((P1&0xf0)!=0xf0){recode=(P1&0xf0)|0x0f;return ((~scode)+(~recode));}else scode=(scode<<1)|0x01;} }}return 0;}/* 检测键盘代码程序 */void pan(){switch(key){ case 0x81: ting=!ting,b=0,a=9;break; //倒记时case 0x11: stop=0;break; // 停止case 0x48: if((ting)&&(a>0)){b=4,ting=0,we=1;} break; case 0x44: if((ting)&&(a>0)){b=3,ting=0,we=1;} break; case 0x42: if((ting)&&(a>0)){ b=2,ting=0,we=1;}break;case 0x41: if((ting)&&(a>0)){b=1,ting=0,we=1;} break;case 0x28: if((we)&&(e<9)){e++;}; break; //各个case 0x24: if((we)&&(f<9)){f++;}; break; //选手case 0x22: if((we)&&(g<9)){g++;}; break; //加分case 0x21: if((we)&&(h<9)){h++;}; break; } //}void jishi(){dl0ms(500);if(a--==0){we=0,a=0;}dl0ms(500);}void xian(){unsigned char n;for(n=0;n<20;n++){P0=0x7f;P3=tab[a];delay(5);//P0位选,P3段选P0=0xbf;P3=tab[b];delay(5);P0=0xf7;P3=tab[e];delay(5);P0=0xfb;P3=tab[f];delay(5);P0=0xfd;P3=tab[g];delay(5);P0=0xfe;P3=tab[h];delay(5);}}void main(){while(stop){if(kbscan()){xian();if(kbscan())key=kbscan();while(kbscan()) xian();pan();}if(ting){jishi(); dl0ms(500);}xian();dl0ms(500);}a=0,bi=e;if(bi<f) {b=3,bi=f;if(bi<g) {b=2,bi=g;if(bi<h) {b=1,bi=h;}else b=2;}else b=3;}else{ b=4;if(bi<g) {b=2,bi=g;if(bi<h) {b=1,bi=h;}else b=2;}else b=4;}while(1){xian();}dl0ms(500);}。
创新性实验报告-基于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单片机4路抢答器的原理及C语言源程序
51单片机4路抢答器的原理及C语言源程序单片机,当然不只是51,51单片机是一种稍通用型的单片机,通过I/O口的定义,可以实现多种控制功能。
抢答器,原理:如果为四路,当其中任一路控下后,其他几路即失效,结果为第一次按下的,可以用数码管或是LED灯来显示,当然这里只是讲原理与编程,具体可以根据抢答器路数及显示方式更改程序即可。
源程序如下:/*用的是AT89S52开发板,独立按键接口如下,就用这四路。
先按下的用LED灯来显示,对应第一个到第四个LED灯,其他再按无效,如果想再次实现,可手动复位单片机*/#include <reg52.h>sbit key1=P3^0; //定义按键,根据需要连接线路,如独立按键(4路)sbit key2=P3^1;sbit key3=P3^2;sbit key4=P3^3;/*void delay(unsigned int cnt) //如果有抖动或是干扰,可以用个小延时去抖{while(--cnt);}*/void main(){bit Flag;while(!Flag){if(!key1){P1=0xFE;Flag=1;} /*LED灯来显示按下的键,第一个灯,我这里是8位LED灯,即:0111 1111,反过来读数为:1111 1110 即:0xFE *,P1口对应LED灯,给P1赋值/else if(!key2){P1=0xFD;Flag=1;} //第二个灯亮else if(!key3){P1=0xFB;Flag=1;} //第三个灯亮else if(!key4){P1=0xF7;Flag=1;} //第四个灯亮,意味着第四路首先按下}while(Flag); //可以再加个I/O,控制Flag,这样初始化,继续抢答,还可以设计按下时的声音}以上程序测试只能测试一次,如再想测试,只能手动复位单片机。
当然,可以根据此原理,设计出功能强大的抢答器。
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. 硬件连接调试首先需要进行硬件连接调试,确保四路抢答器的各模块连接正确、接触良好。
包括检查按钮与单片机的连接、数字显示模块与单片机的连接、音频提示模块与单片机的连接等。
同时检查电源线的接触情况,保证各部件能够正常供电。
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语言进行编程。
4位竞赛抢答器-单片机
单片机课程设计基于单片机的4位竞赛抢答器目录基于单片机的4位竞赛抢答器 (2)摘要 (2)第1章抢答器总体设计 (3)1.1引言 (3)1.2方案设计 (3)第2章系统硬件电路设计 (5)2.1单片机8051简介 (5)2.2 LED显示电路模块 (6)2.3按键电路 (9)2.4蜂鸣电路模块 (11)2.5电源,复位模块与晶振 (11)第3章软件设置 (13)3.1. 主程序 (13)3.2. 子程序 (14)第4章程序清单 (16)第5章各功能模块的调试 (22)第6章小结 (23)参考文献 (23)附录一:元件清单 (24)附录二:程序流程图 (25)附录三:仿真图 (26)基于单片机的4位竞赛抢答器摘要在比赛中我们经常使用抢答器。
通过抢答者的LED显示屏和声音显示等手段指示出第一抢答者。
本设计是以4位竞赛抢答器为基本理念。
利用8051系列单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时能够正确地显示时间。
当独立式按键按下时,扬声器发生提示。
同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答无效;正确按键后有声音提示;抢答时间倒记时显示,满时后系统计时自动停止及主控强制复位;按键锁定,在有效状态下,按键无效。
关键字: LED显示屏,8051系列,按键第1章抢答器总体设计1.1引言随着电子技术的迅速发展,单片机的应用已经渗透到我们日常生活的各个领域。
常见的智能仪器仪表、控制仪器、计算机,以及比赛中用到的抢答器就会运用到单片机。
本次小学期的单片机课程设计,目标是利用单片机设计一个4位竞赛抢答器。
本次我们采用独立式按键输入抢答信号,利用LED显示屏来完成显示功能,用按键来让选手进行抢答,在LED显示屏上显示抢答最快的号码及时间,从而实现整个抢答过程。
本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。
基于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)一设计要求与功能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所示为电路图,其工作原理为:接通电源后主持人将开关拨到“清零”状态,抢答器处于禁止状态,定时器设定时间,主持人将开关置“开始”,宣布抢答开始时,定时器倒计时,扬声器发出响声。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机4路抢答器的原理及C语言源程
序
单片机,当然不只是51,51单片机是一种稍通用型的单片机,通过I/O口的定义,可以实现多种控制功能。
抢答器,原理:如果为四路,当其中任一路控下后,其他几路即失效,结果为第一次按下的,可以用数码管或是LED灯来显示,当然这里只是讲原理与编程,具体可以根据抢答器路数及显示方式更改程序即可。
源程序如下:
/*用的是AT89S52开发板,独立按键接口如下,就用这四路。
先按下的用LED灯来显示,对应第一个到第四个LED灯,其他再按无效,如果想再次实现,可手动复位单片机*/
#include <reg52.h>
sbit key1=P3^0; //定义按键,根据需要连接线路,如独立按键(4路)sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
/*void delay(unsigned int cnt) //如果有抖动或是干扰,可以用个小延时去抖
{
while(--cnt);
}
*/
void main()
{
bit Flag;
while(!Flag)
{
if(!key1){P1=0xFE;Flag=1;} /*LED灯来显示按下的键,第一个灯,我这里是8位LED灯,即:0111 1111,反过来读数为:1111 1110 即:0xFE *,P1口对应LED灯,给P1赋值/
else if(!key2){P1=0xFD;Flag=1;} //第二个灯亮
else if(!key3){P1=0xFB;Flag=1;} //第三个灯亮
else if(!key4){P1=0xF7;Flag=1;} //第四个灯亮,意味着第四路首先按下
}
while(Flag); //可以再加个I/O,控制Flag,这样初始化,继续抢答,还可以设计按下时的声音
}
以上程序测试只能测试一次,如再想测试,只能手动复位单片机。
当然,可以根据此原理,设计出功能强大的抢答器。
如加入声音提示,数码管或是LCD液晶显示,裁判确定后可复位继续抢答等。
当然,用51单片机,是浪费,可根据I/O口(抢答路数)来用其他的单片机实现。