当前位置:网站首页>八路抢答器系统51单片机设计【附Proteus仿真、C程序、原理图及PCB文件、元器件清单和论文等】
八路抢答器系统51单片机设计【附Proteus仿真、C程序、原理图及PCB文件、元器件清单和论文等】
2022-04-23 14:13:00 【蒋宇智】
设计要求
1)抢答器同时供8名选手或2个代表队比赛,分别用8个按钮S0-S7表示;
2)设置一个系统清除和抢答控制开关S,该开关由主持人控制;
3)抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止;
4)抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30s等)。当主持人启动“开始”按键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续时间为0.5s左右;
5)参赛选手在设定时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手编号和抢答时间,并保持到主持人将系统清除为止;
6)如果定时时间到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00;
7)设计出软件编程方法,并写出源代码;
8)主机与从机实现无线抢答;
9)用Proteus进行仿真,Altium Designer绘制原理图和PCB;
概述
本文介绍了数码显示八路抢答器电路的组成、设计及功能,该抢答器除具有基本的抢答功能外,还具有计时和报警的功能。主持人通过时间预设开关预设供抢答的时间,系统将完成自动倒计时。
若在规定的时间有人抢答,则计时将自动停止,若在规定的时间无人抢答,则系统中的蜂鸣器将发响,提示主持人本轮抢答无效,实现报警功能,若超过抢答时间则抢答无效。
本系统采用51单片机作为整个控制核心。控制系统主要由:显示模块、控制模块、报警模块和抢答模块组成。
工作时,该系统通过矩阵键盘输入抢答信号,经单片机的处理后,输出控制信号,利用一个4位数码管来完成显示功能并伴随蜂鸣器报警,用按键来让选手进行抢答,在数码管上显示哪一组先答题,从而实现整个抢答过程。
proteus仿真电路图
系统原理图
PCB图
仿真结果分析
加载“八路抢答器.hex”文件到51单片机,点击运行。八路抢答器程序初始化后,数码管显示:----。等待主持人按键输入。
按下“主持人”键,数码管显示:00-0。此时,可以通过“计时+”和“计时-”键,设置计时时间。本例中,我们设置计时时间为30秒。
再次按下“主持人”键,蜂鸣器哔的一声,倒计时开始,8位选手可以开始进行抢答。假设3号选手,在计时时间内抢答成功。此时,计数停止,数码管显示剩余计时数和当前选手号,其对应的3号LED灯点亮。
倒计时,还剩5秒时,若仍没有选手抢答,此时蜂鸣器发出连续提示音。若计时结束,无人抢答,此时数码管显示:00-0;按下“主持人”键,数码管显示:----;再次按下“主持人”键,显示30-0;如果不对计时时间作修改,再次按下“主持人”键,新一轮计时开始。
如果,在主持人未开始计时时,即抢答未开始前,有人抢答。假设2号选手抢答,此时数码管显示:FF-2,蜂鸣器长鸣,2号红色LED灯点亮。选手犯规抢答后,按下‘主持人’键,蜂鸣器停止,数码管显示:00-0,主持人设置时间,重新开始。
部分C代码
/******************************************************** 函数名称:void scan(void) 函数作用:按键检测函数 参数说明: ********************************************************/
void scan(void)
{
uchar qiangda_num=0;
//主持人键
if(key_zhu==0) //按键按下
{
delayms(7); //显示消抖
if(key_zhu==0&&zhu_f!=2&&qiang_f==0&&wan_f==0)//判断是否有人犯规或者抢答是否开始或者抢答是否完成
{
zhu_f++; //比赛阶段标记+1
if(zhu_f==2) //比赛正式开始
{
TR0=1; //比赛开始,开启定时
wan_f=0; //清除比赛完成标志
bajing(); //提示比赛开始
}
}
else
if(key_zhu==0&&qiang_f==1) //判断是否有人犯规
{
buzz=1; //清除报警
qiang_f=0; //清除抢答标志
number=0; //清除选手编号
time=EEPROM_read(0x2000);//重新读取存储的抢答总时长
led_kongzhi(0,0,0);
}
else
if(key_zhu==0&&wan_f==1) //判断是否有人完成
{
buzz=1; //清除报警
wan_f=0; //清除完成标志
number=0; //清除选手编号
time=EEPROM_read(0x2000);//重新读取存储的抢答总时长
led_kongzhi(0,0,0);
}
else
if(key_zhu==0&&zhu_f==2) //暂停比赛
{
TR0=0; //关闭定时
zhu_f=1; //重新回到设置比赛时间阶段
bajing(); //提示暂停比赛
}
while(!key_zhu);//检测按键松开
}
//加值键,支持连按
if(key_jia==0&&zhu_f==1&&qiang_f==0) //判断是否在设置倒计时时间
{
delayms(7); //延时消抖
if(key_jia==0) //再次判断按键按下
{
if(time<99) //比赛时间最大值99S
time++; //比赛时间+1S
EEPROM_delete(0x2000); //擦除EEPROM煽区
EEPROM_write(0x2000,time); //写入【比赛时间】数据保存
display(time/10,time%10,10,0); //显示设置比赛时间
}
}
//减值键,支持连按
if(key_jian==0&&zhu_f==1&&qiang_f==0) //判断是否在设置倒计时时间
{
delayms(7); //延时消抖
if(key_jian==0) //再次判断按键按下
{
if(time!=0) //比赛时间最小值0S
time--; //比赛时间-1S
EEPROM_delete(0x2000); //擦除EEPROM煽区
EEPROM_write(0x2000,time); //写入【比赛时间】数据保存
display(time/10,time%10,10,0); //显示设置比赛时间
}
}
//选手按键
qiangda_num=qianda();
if(qiangda_num!=0) //判断是否有选手按下按键
{
if(zhu_f!=2&&qiang_f==0&&wan_f==0)//如果还没有开始抢答时按下
{
zhu_f=1;
buzz=0; //蜂鸣器报警
qiang_f=1; //抢答犯规标记
number=qiangda_num;
led_kongzhi(number,1,0);
}
else
if(zhu_f==2&&wan_f==0) //在开始抢答时按下
{
wan_f=1; //标记抢答完成
zhu_f=0; //主持人标记复位
TR0=0; //关闭倒计时定时器
number=qiangda_num;
led_kongzhi(number,1,0);
bajing(); //提示有人抢答完成
}
}
}
/********************************************************* 函数名称:void main() 函数作用:主函数函数 参数说明: *********************************************************/
void main()
{
uchar i=0;
T0_init(); //定时器初始化
if(key_jian==0)
{
delayms(100);
if(key_jian==0)
{
EEPROM_delete(0x2000); //擦除EEPROM煽区
EEPROM_write(0x2000,30); //写入【比赛时间】数据保存
}
}
time=EEPROM_read(0x2000); //读取存储的【比赛时间】数据
for(i=0;i<9;i++)
{
led_kongzhi(i,1,1);
delayms(10);
}
for(i=9;i>0;i--)
{
led_kongzhi(i-1,0,1);
delayms(10);
}
led_kongzhi(0,0,0);
while(1) //死循环
{
scan(); //按键检测处理
if(zhu_f==0&&wan_f==0) //判断是否还没进入比赛阶段
分享的资源有
(1)基于51单片机的八路抢答器系统设计毕业论文完整版;
(2)Proteus仿真文件;
(3)Keil C程序文件;
(4)元器件清单;
(5)Visio流程图;
(6)原理图及PCB文件;
资源分享如下
资源获取方法
资源获取方法
资源获取方法
重要的事情说三遍!!!!!!!!!!!,
获取完整的八路抢答器设计论文、Proteus仿真、C程序、PCB及原理图、Visio流程图、元器件清单等全套资料。请微信搜索关注公众号:交院小智
版权声明
本文为[蒋宇智]所创,转载请带上原文链接,感谢
https://blog.csdn.net/JiaoDaBoy/article/details/105797035
边栏推荐
- 解决ssh配置文件优化以及连接慢的问题
- Docker篇 (五) MySQL的安装
- AT89C51单片机的数字电压表开发,量程0~5V,proteus仿真,原理图PCB和C程序等
- C语言知识点精细详解——初识C语言【1】——你不能不知的VS2022调试技巧及代码实操【1】
- 电子秤称重系统设计,HX711压力传感器,51单片机(Proteus仿真、C程序、原理图、论文等全套资料)
- 处理 mkdir:无法创建目录“aaa“:只读文件系统
- Processing MKDIR: unable to create directory 'AAA': read only file system
- Pass in external parameters to the main function in clion
- C语言p2选择分支语句详解
- 时间复杂度计算举例
猜你喜欢
TLS/SSL 协议详解 (28) TLS 1.0、TLS 1.1、TLS 1.2之间的区别
x509证书cer格式转pem格式
TUN 设备原理
C语言知识点精细详解——初识C语言【1】——你不能不知的VS2022调试技巧及代码实操【1】
循环队列的基本操作,你学会了吗?
Tongxin UOS php7 2.3 upgrade to php7.0 two point two four
统信UOS PHP7.2.3升级至PHP7.2.24
Nacos uses demo as configuration center (IV)
一篇博客让你学会在vscode上编写markdown
MQ-2和DS18B20的火灾温度-烟雾报警系统设计,51单片机,附仿真、C代码、原理图和PCB等
随机推荐
krpano全景之vtour文件夹和tour
Flop effect
555定时器+74系列芯片搭建八路抢答器,30s倒计时,附Proteus仿真等
json date时间日期格式化
Use of ansible and common modules
Qt界面优化:鼠标双击特效
ssh限制登录的四种手段
处理 mkdir:无法创建目录“aaa“:只读文件系统
JS format time
单片机的函数信号发生器,输出4种波形,频率可调,原理图,仿真和C程序
SSH 通过跳板机连接远程主机
JS progress bar, displaying the loading progress
source insight via samba
进入新公司,运维工程师从下面这几项了解系统的部署
Man man notes and @ reboot usage of crontab
mysql锁数据库锁
顺序栈的基本操作
循环队列的基本操作(实验)
sar命令详解
基础正则表达式