概述
要求:
1、八人抢答逻辑:只有一个最先抢答有效。
2、在主持人控制下,10秒内抢答有效。
3、采用数码管显示抢答10秒倒计时,若有抢答直接结束,显示结果。
4、抢答结束后用数码管显示抢答结果:抢答有效人编号;若有异常(提前抢答,犯规),显示抢答人编号和E,本次抢答结束 。
5、设主持人控制键、复位键。
控制键:启动抢答
复位键:系统复位
6、开始、正常结束、抢答结束、违规抢答采用声音提示。
7、最后5S开始倒计时的时候有滴滴滴的计时音。
一、Protues仿真图:
二、程序源码:
因为注释非常的全,这里就不再进行讲解了。
/*******************************************************************************
================================================================================
【平 台】STC89C51_sumjess平台
【编 写】sumjess
【E-mail 】1371129880@qq.com
【软件版本】V2.0
【最后更新】2019年06月10日
【相关信息参考下列地址】
【网 站】
https://blog.csdn.net/qq_38351824
http://www.51hei.com/bbs/mcu-2-1.html
---------------------------------------------------------------------------------
【dev.env.】MDK4.02及以上版本
【Target 】STC89C51
第一次修订:2019/05/09
第二次修订:2019/05/21
第三次修订:2019/06/10
【problem 】
(1)库内补充的不全面;
(2)库内解释部分不全面;
(3)库内还存在一定的bug;
【direction】
下一步的目标就是把库继续集成!
【explain 】
为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!
【warning】
目前程序中暂无错误 !
---------------------------------------------------------------------------------
没有完美的代码,只有不断的奉献,大家一起努力;
赠人玫瑰手留余香,欢迎大家反馈bug!
================================================================================
********************************************************************************/
#include
#include
sbit smg1=P2^4;//定义数码管第一位
sbit smg2=P2^6;//定义数码管第二位
sbit smg3=P2^7;//定义数码管第三位
sbit smg4=P2^5;
sbit keyks=P2^2;//定义开始按键
sbit keytz=P2^1;//定义停止按键
sbit keyqc=P2^0;//定义清除按键
sbit key1=P1^4;//定义1号抢答选手
sbit key2=P1^5;//定义2号抢答选手
sbit key3=P1^6;//定义3号抢答选手
sbit key4=P1^7;//定义4号抢答选手
sbit key5=P3^4;//定义5号抢答选手
sbit key6=P3^5;//定义6号抢答选手
sbit key7=P3^6;//定义7号抢答选手
sbit key8=P3^7;//定义8号抢答选手
sbit spk=P1^0;//定义蜂鸣器
int djs,js=0; //djs和bt是初始倒计时时间
unsigned char flag=0;
int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80,0x9b};
void delayms(uint z) //毫秒
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Timer0_init()//定时器0初始化
{
js=0;
TMOD=0x01;//设置定时器0为工作方式1(M1M0为01)
TH0=(65536-45872)/256;//装初值11.0592M晶振定时50ms数为45872
TL0=(65536-45872)%256;
ET0=1;//开定时器0中断
EA=1;//开总中断
}
void timer0() interrupt 1 using 1//定时器0中断服务函数
{
TH0=(65536-45872)/256;//装初值11.0592M晶振定时50ms数为45872
TL0=(65536-45872)%256;
js++;//叠加20次
if(flag==1)//
{
if(js<8) spk=0;//蜂鸣器响
else spk=1;//蜂鸣器停
}
if(js==20)
{
js=0;//清空
djs--;//产生1s的倒计时
}
}
void djsxs() //显示倒计时函数
{int b1,b2;
b1=djs/10;
b2=djs%10; //将倒计时时间分成高低位
P0=table[b1];
smg2=0;
delayms(3);
smg2=1; //显示十位数字
P0=table[b2];
smg3=0;
delayms(3); //显示个位数字
smg3=1;
}
void djsxse() //第二位数码管显示 E
{
P0=0x9b;//第三位数码管显示E
smg2=0;
delayms(3);
smg2=1;
}
void djsxs30() //第三位数码管显示 -
{
P0=0x80;//第三位数码管显示-
smg4=0;
delayms(3);
smg4=1;
}
void djsxs22() //4位数码管显示- - - -
{
P0=0x80;//第一位数码管显示-
smg1=0;
delayms(3);
smg1=1;
P0=0x80;//第二位数码管显示-
smg4=0;
delayms(3);
smg4=1;
P0=0x80;//第三位数码管显示-
smg2=0;
delayms(3);
smg2=1;
P0=0x80; //第四位数码管显示-
smg3=0;
delayms(3);
smg3=1;
}
void djsxs1() //第一位数码管显示1
{
P0=table[1]; //第一位数码管显示1
smg1=0;
delayms(3);
smg1=1;
}
void djsxs2() //第一位数码管显示2
{
P0=table[2];
smg1=0;
delayms(3);
smg1=1;//第一位数码管显示2
}
void djsxs3() //第一位数码管显示3
{
P0=table[3];
smg1=0;
delayms(3);
smg1=1; //第一位数码管显示3
}
void djsxs4() //第一位数码管显示4
{
P0=table[4];
smg1=0;
delayms(3);
smg1=1; //第一位数码管显示4
}
void djsxs5() //第一位数码管显示5
{
P0=table[5];
smg1=0;
delayms(3);
smg1=1; //第一位数码管显示5
}
void djsxs6() //第一位数码管显示6
{
P0=table[6];
smg1=0;
delayms(3);
smg1=1;//第一位数码管显示6
}
void djsxs7() //第一位数码管显示7
{
P0=table[7];
smg1=0;
delayms(3);
smg1=1; //第一位数码管显示7
}
void djsxs8() //第一位数码管显示8
{
P0=table[8];
smg1=0;
delayms(3);
smg1=1; //第一位数码管显示8
}
void main()
{
int djs1=10; //修改倒计时第一处,共两处
Timer0_init(); //初始化定时器中断
spk=0;delayms(500);spk=1; //蜂鸣器不响
djs=10; //修改倒计时第二处,共两处
最后
以上就是饱满板栗为你收集整理的八人抢答器讲解_课程设计题一:八人抢答器的全部内容,希望文章能够帮你解决八人抢答器讲解_课程设计题一:八人抢答器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复