|
单片机8位抢答器及仿真和源程序 希望对大家有用
单片机源程序如下:
- //名称:八路抢答器
- //功能:主持人按下按键开始抢答,此时抢答灯闪烁
- //十秒内抢答,如果没有抢答的则直接复位
- //如果有人抢答成功,则其他人抢答无效,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)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
八位抢答器.zip
(72.99 KB, 下载次数: 34)
|
评分
-
查看全部评分
|