基于单片机的四路抢答器
- 格式:docx
- 大小:155.96 KB
- 文档页数:22
基于单片机的四路抢答器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);}}}。
ad四路抢答器程序代码(原创实用版)目录1.AD 四路抢答器简介2.AD 四路抢答器程序代码结构3.程序代码的具体实现4.总结正文【1.AD 四路抢答器简介】AD 四路抢答器是一款基于单片机的抢答器设备,其主要功能是在多个参赛者之间进行抢答,并通过 LED 指示灯和蜂鸣器输出抢答结果。
该抢答器支持四路抢答,即四个参赛者可以同时进行抢答。
本文将介绍 AD 四路抢答器的程序代码实现。
【2.AD 四路抢答器程序代码结构】AD 四路抢答器程序代码主要包括以下几个部分:1.初始化模块:初始化单片机系统,配置相关硬件接口。
2.抢答判断模块:实时检测四个抢答按钮的状态,判断抢答是否有效。
3.计时模块:控制抢答时间,实现倒计时功能。
4.显示模块:通过 LED 指示灯显示抢答结果。
5.蜂鸣器模块:输出抢答成功的提示音。
6.主循环模块:执行以上各模块功能,实现程序的循环运行。
【3.程序代码的具体实现】以下是 AD 四路抢答器程序代码的具体实现:1.初始化模块:```cvoid Init(){// 初始化单片机系统// 配置相关硬件接口// 例如:GPIO 初始化、中断配置等}```2.抢答判断模块:```cvoid CheckAnswer(){uint8_t Button = 0;uint8_t Count = 0;// 检测四个抢答按钮的状态// 如果某个按钮被按下,计数器 Count 增加 for (int i = 0; i < 4; i++){if (Button & (1 << i)){Count++;}}// 如果 Count 为 1,说明有一个按钮被按下,抢答有效 if (Count == 1){// 处理抢答成功的逻辑Button = Count;}}```3.计时模块:```cvoid Timer(){// 控制抢答时间,实现倒计时功能// 例如:使用定时器实现倒计时}```4.显示模块:```cvoid Display(){// 通过 LED 指示灯显示抢答结果// 例如:根据 Button 的值,点亮相应的 LED 灯}```5.蜂鸣器模块:```cvoid Beep(){// 输出抢答成功的提示音// 例如:使用蜂鸣器发出提示音}```6.主循环模块:```cvoid Main(){while (1){Init();Timer();CheckAnswer();Display();Beep();}}```【4.总结】本文详细介绍了 AD 四路抢答器的程序代码实现,包括初始化模块、抢答判断模块、计时模块、显示模块、蜂鸣器模块和主循环模块。
ad四路抢答器程序代码【原创实用版】目录1.介绍 AD 四路抢答器程序代码2.AD 四路抢答器的工作原理3.AD 四路抢答器程序代码的实现4.AD 四路抢答器程序代码的应用场景正文一、介绍 AD 四路抢答器程序代码AD 四路抢答器是一款基于单片机的抢答器,具有四路输入通道,能够实现四个选手同时抢答。
通过使用 AD(模拟 - 数字)转换器,将模拟信号转换为数字信号,便于单片机进行处理。
本文将详细介绍 AD 四路抢答器程序代码的编写方法。
二、AD 四路抢答器的工作原理AD 四路抢答器主要由四路模拟输入通道、AD 转换器、单片机和显示屏组成。
四路模拟输入通道分别连接到四个选手的抢答按钮,当选手按下抢答按钮时,产生模拟信号。
AD 转换器将模拟信号转换为数字信号,单片机读取数字信号并进行处理,最后通过显示屏显示抢答结果。
三、AD 四路抢答器程序代码的实现1.初始化:在程序开始运行时,需要对单片机和相关外设进行初始化,包括配置 AD 转换器的工作模式、初始化定时器等。
2.抢答过程:在抢答过程中,程序需要循环读取四路输入通道的模拟信号,并将其转换为数字信号。
通过比较数字信号的大小,判断哪个选手抢答成功。
3.判断抢答成功:当某个选手的数字信号达到预设阈值时,判断该选手抢答成功。
同时,需要将抢答成功的选手编号显示在显示屏上。
4.复位:在每个抢答周期结束后,需要对系统进行复位,以便开始下一个抢答周期。
四、AD 四路抢答器程序代码的应用场景AD 四路抢答器程序代码可以应用于各种知识竞赛、答题活动等场景,帮助组织者公平、高效地管理比赛过程。
通过使用 AD 四路抢答器,可以节省人力、物力,提高比赛的趣味性和观赏性。
总结:本文详细介绍了 AD 四路抢答器程序代码的编写方法,包括抢答器的工作原理、程序代码的实现以及应用场景。
智能四路抢答器目录一、前言 (3)二、方案设计 (3)1、方案比较 (3)2、系统总体设计方案与实现框图 (3)三、理论分析 (3)四、电路设计 (4)1、按键部分 (4)2、显示部分 (4)五、软件模块 (5)六、测试方法与数据 (6)七、结论 (6)八、参考文献 (6)一、前言本设计要求能够在主持人按下开始键后,四个参赛者开始抢按自己的按键,谁的按键先按下,谁面前的灯就会亮并且有相应的提示,当参赛者耗时太多时又会有相应的提示。
根据设计的要求,本系统采用独立式按键,通过单片机不停的扫描按键来控制LED灯和蜂鸣器,并用定时器T0来定超时的时间,当超时的时候让蜂鸣器响。
二、方案设计1、方案比较(1)、总体设计方案一:采用可编程I/O口扩展芯片81558155作为单片机的扩展接口能实现很多功能,但是这个系统并不复杂,用8155会浪费很多的资源,而且8155要用P0和P2端口作为地址线对它进行读写,这样不仅浪费端口还使得编程变的复杂。
从节省资源和简化编程的角度考虑,放弃了此方案。
方案二:直接采用AT89C51单片机直接用单片机不仅编程被简化,还有效的利用了各个端口。
8051单片机的资源完全够这个系统的要求。
所以最终选择了此方案。
(2)、模块方案一:采用4*4矩阵键盘此种键盘是常用的按键扫描方法,但是本系统只需要六个按键,这样就会浪费十个,而且矩阵按键扫描要送数读数,对于编程很复杂,最终放弃了此方案。
方案二:采用独立式键盘本系统只要六个按键就可以,用独立式键盘不仅节省端口还使编程变得简单。
程序只要不停的读数检查就行。
所以,最终选择此方案。
2、系统总体设计方案与实现框图采用六个独立式的键盘作为按键输入,当在开始后有按键按下时,就会有对应于这个按键的灯亮并且蜂鸣器响一声,其它按键再按也无效。
十秒之后如不清除,蜂鸣器就会一直响,提示已经到时间。
框图如图1。
- 1 -6图1三、理论分析51单片机的端口上电是高电平,而且当外部没有输入时能自动的弹跳到高电平,所以通过按键所接端口的高低电平变化可以判断出哪个按键按下了。
/*功能:通过按键实现四路抢答器,并且通过数码管显示部分显示在主持人按下复位按钮后,开始下一轮的抢答。
*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar k;uchar code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};sbit kongzhi=P2^1;sbit key5=P3^4;//复位按钮sbit key1=P3^0;//抢答器1sbit key2=P3^1;//抢答器2sbit key3=P3^2;//抢答器3sbit key4=P3^3;//抢答器4void delayms(uint max)//延时函数{ uint i,j;for(i=max;i>0;i--)for(j=110;j>0;j--);}void main()//主函数{bit fak;//通过控制fak,使数码管保持最开始按下的数字P0=0x3f;//最开始,数码管显示0kongzhi=0;//数码管的公共端是低电平有效,由于使用的是PNP,故输入高电平。
while(!fak)//关键在此{if(!key1)//如果第一个按键按下,数码管显示1{P0=0x06;fak=1;}else if(!key2) //如果第二个按键按下,数码管显示2{P0=0x5b;fak=1;}else if(!key3) //如果第三个按键按下,数码管显示3{P0=0x4f;fak=1;}else if(!key4) //如果第四个按键按下,数码管显示4{P0=0x66;fak=1;}}while(fak){if(key5==0)//复位按钮的设定{P0=0x3f;fak=0;}}}。
单片机课程设计报告项目名称基于单片机的抢答器设计摘要此次设计提出了用STC89C52单片机为核心控制元件,设计一个简易的抢答器,本方案以STC89C52单片机作为主控核心,发光二极管、数码管、蜂鸣器等构成四路抢答器,利用了单片机的按键复位电路、时钟电路、定时/中断等电路,设计的抢答器具有实时显示抢答选手的的特点,还有复位电路,使其再开始新的一轮的答题和比赛,同时还利用C语言编程,使其实现一些基本的功能。
本设计的系统实用性强、判断精确、操作简单、扩展功能强。
它的功能实现是比赛开始,主持人读完题之后按下总开关,此时数码管显示初始状态0,直到有一个选手抢答时,对应的会在数码管上显示出该选手的编号,同时发光二极管出现闪烁状态,蜂鸣器也会发出声音,以提示有人抢答本题,主持人按下复位键,示意可以答题。
关键字:STC89C52单片机;动态显示;中断;按键控制AbstractThis design use STC89C52as the core control element is presented to design a simple responder, this scheme is STC89C52 single chip microcomputer as control core, light-emitting diode, digital tube, buzzer and so on four road vies to answer first device, using the single chip microcomputer button reset circuit, clock circuit, timing/interrupt circuit, design of vies to answer first appliance has the characteristic of real-time display vies to answer first contestant's number, and reset circuit, to start a new round of the answer and, at the same time also use of C language programming, make it implements some basic functionality.The design of the system is practical, accurate judgment, simple operation, strong extended functionality. Its function realization is the match began, and the host to read the topic after press the main switch, the digital tube display initial condition 0, until there is a contestant vies to answer first, the corresponding in the contestant's serial number is shown on the digital tube, light-emitting diodes, flicker status at the same time, the buzzer will sound, to remind someone vies to answer first ontology, host press the reset button, the signal can be the answer.Keywords:STC89C52 microcomputer; Dynamic display; Interrupt; The key control目录摘要IAbstractII第1章绪论11.1 单片机抢答器的背景11.2 单片机抢答器的意义11.3 抢答器的应用1第2章系统硬件部分的设计22.1设计要求22.2 总体设计方案22.3 单元模块设计32.3.1 单片机简介32.3.2 最小系统的设计52.3.3 数码管显示电路62.3.4 按键模块设计6第3章系统的软件设计 (8)3.1 抢答器工作原理83.2 流程图83.3 KEIL软件简介9第4章系统的仿真与调试114.1 软件的仿真与调试114.2硬件的安装与调试114.2.1晶振电路的测试114.2.2复位电路的测试124.2.3显示电路的测试12总结13参考文献13附录1源程序代码14附录2 元件清单16附录3 仿真图17附录4 实物照片展示18致19第1章绪论1.1 单片机抢答器的背景二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
山东科技大学电工电子实验教学中心
创新性实验结题报告
实验项目名称_基于51单片机的四路抢答器设计
__________
组长姓名学号_
手机 Email_
成员姓名_学号__
成员姓名__学号__
专业___班级__
指导教师及职称________
开课学期至_学年_学期
提交时间年月日
一、实验摘要
二、实验目的
三、实验场地及仪器、设备和材料:
四、实验内容
图1 四路抢答器实验原理图
开始按键接到单片机的P1.1口,复位按键接到单片机的P1.0口,四个抢答按键分别接
五、实验结果与分析
选手3抢答键按下发光二极管D4点亮,蜂鸣器报警,同时数码管显示3。
2、对实验现象、数据及观察结果的分析与讨论:
六、指导老师评语及得分:
七、中心意见:。
摘要 (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单片机为核心的四路抢答器。
课程设计(论文)题目名称多路数字抢答器设计课程名称单片机原理及其应用2013年6月24日摘要近年来随着科技的飞速发展 单片机的应用正在不断深入 同时带动传统控制检测日新月异。
此次设计提出一种用AT89C51单片机作为核心控制元件 与电阻、液晶显示屏、蜂鸣器等构成硬件操作 再利用C语言编程 来控制抢答器的功能实现。
本论文对抢答器的背景与现状、硬件设计、软件设计及其仿真都做了详细的介绍 使我们不仅对抢答器的原理及设计有了深入的了解 也对单片机的设计研发过程有了更加深刻的体会。
本次设计的系统主要采用单片机控制、采用手动抢答的方式。
有人抢答后,系统自动封锁其他选手的抢答按钮,使其不再抢答,从而实现抢答功能。
该系统还增加了抢答倒计时功能,可以调整。
通过自主的设计、编程和调试出一个简单的四路抢答并在液晶屏显示抢答成功者号码;熟悉C语言编程;了解单片机仿真系统的使用方法,达到提高综合运用相关知识的能力;进一步熟悉和掌握Proteus7的使用方法;掌握单片机系统设计全部过程的目的。
关键字:抢答单片机液晶屏显示目录第1章前言 (1)第2章方案设计 (2)第3章硬件电路的工作原理 (3)3.1抢答器的电路图 (3)3.2液晶屏显示电路 (3)3.3按键控制电路 (3)第4章软件设计 (5)4.1软件编程 (5)4.2系统调试和结果分析 (6)总结 (10)参考文献 (11)附录1 源程序 (12)第1章前言电子技术和微型计算机的迅速发展,促进微型计算机测量和控制技术的迅速发展和广泛应用,单片机(单片微型计算机)的应用已经渗透到国民经济的各个部门和领域,它起到了越来越重要的作用。
单片微型计算机就是将中央处理单元、存储器、定时/计数器和多种接口都集成到一块集成电路芯片上的微型计算机。
因此一块芯片就构成了一台计算机。
它已成为工业控制领域、智能仪器仪表、尖端武器、日常生活中最广泛使用的计算机。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
单片机实现四路抢答器调试的方法一、绪论单片机实现四路抢答器是一种常见的电子应用技术,广泛应用于各种竞赛、考试、培训等场合。
其基本功能是通过按钮或其他触发方式,实现对不同参赛者的答题速度和准确性的记录。
为了确保四路抢答器的正常运行和准确性,需要对其进行充分的调试。
本文将介绍单片机实现四路抢答器调试的方法及步骤,以帮助工程师或爱好者顺利完成调试工作。
二、单片机实现四路抢答器的基本原理单片机实现四路抢答器一般采用微处理器或微控制器作为控制核心,利用其强大的处理能力和丰富的外设接口,通过设置中断、定时器/计数器等功能,实现对四路抢答器的控制和监测。
四路抢答器的基本组成部分包括按钮输入模块、数字显示模块、音频提示模块等。
在调试过程中,需要依次测试和验证这些模块的功能,保证其正常工作。
三、单片机实现四路抢答器调试的方法1. 硬件连接调试首先需要进行硬件连接调试,确保四路抢答器的各模块连接正确、接触良好。
包括检查按钮与单片机的连接、数字显示模块与单片机的连接、音频提示模块与单片机的连接等。
同时检查电源线的接触情况,保证各部件能够正常供电。
2. 功能测试在硬件连接调试完成后,需要对各个功能模块进行测试。
包括测试按钮输入模块的响应速度和稳定性,测试数字显示模块的显示效果和准确性,测试音频提示模块的声音播放效果等。
通过这些功能测试,可以确保各模块的功能正常,能够满足四路抢答器的使用要求。
3. 系统集成测试在单个模块的功能测试完成后,需要进行系统集成测试,测试四路抢答器整体的运行情况。
包括测试四路抢答器对多路信号的处理能力、测试按键的抢答效果、测试多个抢答信号的协调工作等。
通过系统集成测试,可以发现各个模块之间的交互问题,及时进行调整和优化。
4. 软件程序调试需要进行软件程序调试。
针对单片机的程序代码进行单步调试,检查各个功能的实现情况和逻辑正确性,确保程序能够按预期运行。
需要对程序中可能出现的错误和异常情况进行充分测试,保证四路抢答器的稳定性和可靠性。
电路图:/************************************************************** 4路抢答器,由主持人按下复位键开启抢答,对应选手最先按下按键后由数码管显示选手号码,点亮对应LED,蜂鸣器响,其他选手按键无效**************************************************************/ #include<reg52.h>#define uchar unsigned char#define uint unsigned intunsigned char code LED_DATE [] = //定义数码管段数组{0XC0, // 00XF9, // 10XA4, // 20XB0, // 30X99, // 40X92, // 50X82, // 60XF8, // 70X80, // 80X90, // 9unsigned char code LED_W [] = //定义数码管位数组{0X80, //第一个数码管位0X40, //第二个数码管位0X20, //第三个数码管位0X10, //第四个数码管位0X08, //第五个数码管位0X04, //第六个数码管位0X02, //第七个数码管位0X01 //第八个数码管位};sbit DS_HC595 =P1^5; //定义74HC595 I/O口sbit SHCP_HC595 =P1^6;sbit STCP_HC595 =P1^7;sbit K1=P3^2; //定义按键I/O口sbit K2=P3^3;sbit K3=P3^4;sbit K4=P1^2;sbit LED1=P2^4; //定义LED I/O口sbit LED2=P2^5;sbit LED3=P2^6;sbit LED4=P2^7;sbit BUZZ=P1^1; //定义蜂鸣器I/O 口void KEY();void Display();void Delay(uchar xms);void HC595(uchar V alue);uchar num=0;void main(){while(1){KEY();Display(); //数码管显示0}void KEY(){if(K1==0){Delay(10); //延时消抖if(K1==0) //再次判断{while(!K1); //按键松开检测while(1) //使用死循环,使其他选手按下按键后无效(下同){LED1=0; //使1号灯亮(下同)BUZZ=~BUZZ; //蜂鸣器响num=1; //显示1号Display();Delay(10);}}}if(K2==0){Delay(10);if(K2==0){while(!K2); //按键松开检测while(1){LED2=0;BUZZ=~BUZZ;num=2;Display();Delay(10);}}}if(K3==0){Delay(10);if(K3==0){while(!K3); //按键松开检测while(1){LED3=0;BUZZ=~BUZZ;num=3;Display();Delay(10);}}}if(K4==0){Delay(10);if(K4==0){while(!K4); //按键松开检测while(1){LED4=0;BUZZ=~BUZZ;num=4;Display();Delay(10);}}}}void Display() //显示函数,静态扫描{P0=LED_DATE[num]; //送段码HC595(LED_W[7]); //送位码}void HC595(uchar V alue) //74HC595驱动函数{uchar i=0;for(i=0;i<8;i++){DS_HC595=Value&0X01;SHCP_HC595=0;SHCP_HC595=1;Value>>=1;}STCP_HC595=0;STCP_HC595=1;}void Delay(uchar xms) //延时函数{uchar i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}。
简易四路抢答器设计目录摘要 (1)一、设计任务与要求 (2)二、方案设计与论证 (2)三、硬件电路设计 (2)1、抢答器的设计总电路 (2)四、软件设计 (3)1、系统主程序流程图 (3)五、器件选型方案 (4)六、调试 (5)1、上电 (5)2、开始 (5)3、仿真 (5)七、体会与心得 (6)八、参考文献 (7)附录主程序清单 (8)单片机四路抢答器设计摘要:本设计是以四路抢答为基本理念。
考虑到依需设定限时回答的功能,利用AT89C51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器中断和外部中断,将软、硬件有机地结合起来,使得系统能够正确地进行工作,同时使数码管能够正确显示组别。
用开关做键盘输入,扬声器发生提示。
同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;可以显示是哪位选手有效抢答,正确按键后有音乐提示;当有一组抢答成功后其他组抢答无效。
关键字:AT89C51单片机;四路抢答器;定时/计数器中断一、设计任务与要求1、抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0 ~ S3表示。
2、设置一个复位按钮和抢答控制开关S,该开关由主持人控制。
3、抢答器具有锁存与显示功能。
即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。
选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统复位为止。
二、方案设计与论证方案:该系统采用单片机AT89C51作为控制核心,该系统可以完成运算控制、信号识别以及显示功能的实现。
由于用了单片机,使其技术比较成熟,应用起来方便、简单并且单片机周围的辅助电路也比较少,便于控制和实现。
整个系统具有极其灵活的可编程性,能方便地对系统进行功能的扩张和更改。
MCS-51单片机特点如下:1、可靠性好:单片机按照工业控制要求设计,抵抗工业噪声干扰优于一般的CPU,程序指令和数据都可以写在ROM里,许多信号通道都在同一芯片,因此可靠性高,易扩充。
单片机四路抢答器的设计一、设计需求分析在设计四路抢答器之前,我们首先需要明确其功能需求。
1、能够同时支持四路选手进行抢答。
2、当有选手按下抢答按钮时,能够迅速锁定并显示抢答者的编号。
3、具备倒计时功能,在规定时间内无人抢答则显示超时。
4、要有声音提示,如抢答成功、违规抢答、倒计时结束等。
二、硬件设计1、单片机选择我们选用常见的 51 系列单片机,如 STC89C52 单片机。
它具有性能稳定、价格低廉、编程方便等优点。
2、输入模块使用四个独立按键作为四路选手的抢答按钮,分别连接到单片机的四个 I/O 口。
3、显示模块采用数码管显示抢答者的编号和倒计时时间。
可以选择共阴极或共阳极数码管,通过单片机的 I/O 口进行驱动。
4、声音模块使用蜂鸣器来实现声音提示功能。
通过单片机控制蜂鸣器的通断,产生不同频率的声音。
5、电源模块为整个系统提供稳定的电源,可以使用 5V 直流电源适配器。
三、软件设计1、编程语言选择 C 语言进行编程,C 语言具有语法简洁、可读性强、可移植性好等优点。
2、主程序流程系统初始化后,进入等待抢答状态。
当有选手按下抢答按钮时,判断是否违规抢答(即在倒计时未结束前抢答)。
如果是合法抢答,锁定抢答者编号并显示,同时发出抢答成功的声音提示;如果是违规抢答,则发出违规提示音并显示违规者编号。
在抢答成功后,开始倒计时,倒计时结束时发出超时提示音。
3、中断处理利用单片机的外部中断功能,实现对抢答按钮按下事件的快速响应。
4、计时与显示程序通过定时器实现倒计时功能,并将剩余时间实时显示在数码管上。
四、系统调试1、硬件调试首先检查电路连接是否正确,有无短路、断路等情况。
然后测量各个电源点的电压是否正常,确保硬件工作在稳定的状态。
2、软件调试将编写好的程序下载到单片机中,通过单步调试、断点调试等方式,检查程序的执行流程和逻辑是否正确。
同时观察数码管显示和蜂鸣器发声是否符合预期。
五、设计优化与拓展1、增加更多的抢答通道,以满足更多选手参与的需求。
目录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发光二极管、按键电路及扬声器电路。
基于单片机的四路抢答器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);}}}。