八人抢答器讲解_课程设计题一:八人抢答器

要求:

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;               //修改倒计时第二处,共两处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值