标题:
单片机八路抢答器proteus仿真图及C语言源代码
[打印本页]
作者:
王培鹏
时间:
2017-4-14 22:04
标题:
单片机八路抢答器proteus仿真图及C语言源代码
51单片机做的八路抢答器仿真原理图:
0.png
(14.25 KB, 下载次数: 109)
下载附件
2017-4-14 22:25 上传
单片机c语言源代码如下:
//名称:八路抢答器
//功能:主持人按下按键开始抢答,此时抢答灯闪烁
//十秒内抢答,如果没有抢答的则直接复位
//如果有人抢答成功,则其他人抢答无效,60s内答完超过60s自动复位
//回答期间抢答灯常亮,回答的人方灯闪烁,直到回答完毕,灯常亮表明回答有效
//如果超过60s自动复位,回答结束主持人打开按键,复位。
#include<reg51.H>
sbit Presenter=P2^0;
sbit K=P3^2;
bit Presenter_flag=0,flag;//主持人按键标志位,仅允许一个数据通过标志位
unsigned char Timer=0,i; //时间标志
unsigned char ren=0xff;
bit x=0;
void System_Init();
void System_Rest();
void main()
{
System_Init();
while(1)
{
if(Presenter_flag) //主持人按键按下时开始系统
{
K=1;
if(K==1) //主持人按键起开
{break;
Presenter_flag=0;
}
}
else
System_Rest();
}
}
void System_Init()
{
EA=1; //打开中断
EX0=1;
IT0=1;
TMOD=0x01;
ET0=1;
TH0=(65535-50000)/256; //50ms
TL0=(65535-50000)%256;
Presenter=0;
TR0=0;
}
void System_Rest()
{
P0=0xff; //复位设置:在主持人按键起开或者,抢答时间超过10s或者答题时间超过60s
P1=0xff;
TR0=0;
Presenter=0;
flag=1;
i=0;
Timer=0;
}
void into() interrupt 0
{
Presenter_flag=1;//主持人按键按下
TR0=1;
}
void Timer0() interrupt 1
{
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
i++;
if(i==20) //1s钟
{
i=0;
Timer++;
P1=0xff;
if((Timer<10)&&(P1==0xff)&&(flag==1)) //10s抢答时间,10s内如果无人抢答则复位
{
Presenter=~Presenter; //抢答指示灯闪烁
}
else if((Timer>=10)&&(P1==0xff)&&(flag==1))
{
Presenter_flag=0;
Timer=0;
i=0;
}
P1=0xff;
if((Timer<=60)&&(P1!=0xff)&&(flag==1)) //答题时间,60s没答完则复位
{
ren=P1;
Presenter=1;
flag=0;
}
if(flag==0)
{
if(x==0)
{x=1;P0=0xff;}
else if(x==1)
{x=0;P0=ren;}
}
if((flag==0)&&(P1==0xff))
{P0=ren;TR0=0;flag=1;}
if((Timer>60)&&(P1!=0xff))
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
0.png
(51.69 KB, 下载次数: 122)
下载附件
2017-4-14 22:26 上传
抢答器的仿真工程文件和源代码下载:
八路抢答器.zip
(72.99 KB, 下载次数: 65)
2017-4-14 22:04 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1