基于51单片机八路抢答器设计(Proteus仿真+Keil源码+设计文档+原理图等)附下载链接!
提供对应的Proteus仿真电路图,Keil程序源码(C语言),原理图,模块资料、元件清单、设计文档、程序流程图等电子资料参考学习,文末附全部资料的下载链接。
01设计要求
设计一个基于51单片机八路抢答器设计系统:
主要功能:
① 设计一个8路抢答器。
② 有一个开始按钮,按下开始后才能开始抢答。
③ 能显示抢答成功的组号。
02系统概述
该系统利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间为60秒,倒计时为5秒时蜂鸣器报警,选手抢答成功后显示选手编号以及剩余时间。
03Proteus仿真![在这里插入图片描述]()
04示例代码
#include <reg52.h>
sbit spk = P2^0; // 蜂鸣器
sbit keyks = P3^0; // 开始键
sbit keytz = P3^1; // 暂停键
sbit keyqc = P3^2; // 清除复位键
sbit key1~key8 = P1; // 8路选手抢答键
int djs, djs1, flag;
void main(void)
{
djs1 = 60;
Timer0_init();
spk = 1;
LOOP1:
djs = djs1;
djsxs22(); // 待机界面
// 待机:1号键调整倒计时时长
if(!key1)
{
delayms(3);
if(!key1)
{
while(!key1);
while(1)
{
TR0 = 0; djsxs();
if(!key2){ delayms(8); if(!key2){while(!key2); djs1++;} }
if(!key3){ delayms(8); if(!key3){while(!key3); djs1--;} }
if(!key1){ while(!key1); goto LOOP1; }
}
}
}
// 按下开始键,启动倒计时
if(!keyks)
{
delayms(3);
if(!keyks)
{
while(!keyks);
TR0 = 1;
while(1)
{
djsxs();
// 暂停功能
if(!keytz){ delayms(3); if(!keytz){while(!keytz); TR0=0; flag=0; spk=1;} }
// 继续计时
if(!keyks){ delayms(3); if(!keyks){while(!keyks); TR0=1;} }
// 八路抢答检测(计时运行时有效)
if(TR0 == 1)
{
if(!key1 || !key2 || !key3 || !key4 || !key5 || !key6 || !key7 || !key8)
{
spk=0; delayms(3);
if((!key1||!key2||!key3||!key4||!key5||!key6||!key7||!key8))
{
while((!key1||!key2||!key3||!key4||!key5||!key6||!key7||!key8));
spk=1; flag=0; TR0=0;
// 显示抢答选手号,等待清除复位
while(1){ djsxs1();djsxs(); if(!keyqc){while(!keyqc);goto LOOP1;} }
}
}
}
// 最后5秒蜂鸣标记
if(djs <= 5) flag = 1;
// 倒计时结束锁定,只能清除复位
if(djs == 0)
{
flag = 0; spk = 1;
while(1){ if(!keyqc){while(!keyqc); goto LOOP1;} }
}
}
}
}
}
05原理图

注:
源码使用Keil4或Keil5打开
仿真使用的是Proteus8.13及以上版本,版本过低可能会打不开。
06资料获取
1)项目完整资料获取链接:下载链接
2)Keil、Proteus各个版本安装包: 下载链接


浙公网安备 33010602011771号