基于单片机的八路抢答器的设计-创新互联
1.设计要求:
为企业提供做网站、成都网站建设、网站优化、全网整合营销推广、竞价托管、品牌运营等营销获客服务。创新互联拥有网络营销运营团队,以丰富的互联网营销经验助力企业精准获客,真正落地解决中小企业营销获客难题,做到“让获客更简单”。自创立至今,成功用技术实力解决了企业“网站建设、网络品牌塑造、网络营销”三大难题,同时降低了营销成本,提高了有效客户转化率,获得了众多企业客户的高度认可!1.以单片机为核心,设计一个八位竞赛抢答器:同时供八名选手或八个代表队比赛,分别用八个按钮S0~S7表示。
2.设置一个系统清除和抢答控制开关S,开关由主持人控制。
3.抢答器具有锁存与显示功能。即选手按按钮,锁存相应的编号,并在优先抢答选手的编号一直保持到主持人将系统清除为止。
4.抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。
5.当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间为0.5s左右。
6.参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。
7.如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。
2.流程图:
3.Protues原理图:
效果图:
4.单片机代码:
#include#define u8 unsigned char
#define u16 unsigned int
sbit highone = P3^0; //倒计时数码管高标志位
sbit lowone = P3^1; //倒计时数码管低标志位
sbit hightwo = P3^2; //选手编号数码管高标志位
sbit lowtwo = P3^3; //选手编号数码管低标志位
sbit set = P3^5; //清除/设置时间按钮
sbit start = P3^6; //开始按钮
sbit voice = P3^7; //蜂鸣器输出位
sbit key1=P1^0; //选手1号按钮
sbit key2=P1^1; //选手2号按钮
sbit key3=P1^2; //选手3号按钮
sbit key4=P1^3; //选手4号按钮
sbit key5=P1^4; //选手5号按钮
sbit key6=P1^5; //选手6号按钮
sbit key7=P1^6; //选手7号按钮
sbit key8=P1^7; //选手8号按钮
u8 code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极
u8 xianshi[]={0x3f,0x3f,0x3f,0x3f};
u8 Tpointer=30; //时间指针
u8 Allpointer=0; //总指针
u8 tp=30; //时间副指针
u16 mm = 0; //寄存抢答选手号
u8 done = 0; //计时完成标志和抢答完成标志
u16 i;
u16 q;
u16 w;
void delay(u16 h) //延时函数
{
while(h--);
}
void shujuchuli() //数据处理函数
{ //处理时间显示数据和选手号显示数据
xianshi[0]=number[tp/10]; //整除10作为倒计时十位
xianshi[1]=number[tp%10]; //取余数运算作为倒计时个位
xianshi[2]=0x3f;
xianshi[3]=number[mm]; //作为选手号个位
}
void xuanze() //选择函数函数
{ //选择标志位接通对应的数码管
u8 k;
for(k=0;k<4;k++)
{
switch(k)
{
case(0): //显示倒计时数码管低位
highone=0;lowone=1;hightwo=0;lowtwo=0;P0=xianshi[k];delay(10);break;
case(1): //显示倒计时数码管高位
highone=1;lowone=0;hightwo=0;lowtwo=0;P0=xianshi[k];delay(10);break;
case(2): //显示选手编号数码管低位
highone=0;lowone=0;hightwo=0;lowtwo=1;P2=xianshi[k];delay(10);break;
case(3): //显示选手编号数码管高位
highone=0;lowone=0;hightwo=1;lowtwo=0;P2=xianshi[k];delay(10);break;
}
P0=0x00; //消影
P2=0x00; //消影
}
}
void checksetkey2() //检测设置时间按钮函数,用于调整抢答时间
{
if(set==0)
{
delay(1000); //消抖
if(set==0)
{
if(Tpointer<60)
{
Tpointer= Tpointer+1;
tp= tp+1;
}
else
{
Tpointer=0;
tp=0;
}
}
while(!set)
{
xuanze();
}
}
}
代码完整版请转:https://download.csdn.net/download/weixin_47675608/74047012
由于篇幅有限相应的代码和仿真图已经上传(包括程序和课程设计报告),有需要的自取:https://download.csdn.net/download/weixin_47675608/74047012
压缩包内容包括(Protues仿真,单片机程序和单片机课程设计报告)
课程设计报告目录
对您有帮助的话,请点赞、评论、收藏、转发加关注。您的鼓励才是作者创作的动力,求打赏。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
当前题目:基于单片机的八路抢答器的设计-创新互联
文章URL:http://myzitong.com/article/iijpo.html