完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
8位抢答器
利用51单片机设计一个8位抢答器。按下按钮,倒计时10s,初始状态LED处于熄灭状态,最后5s倒计时伴随LED闪烁。有玩家抢答或者计时结束时,LED灯常亮。开始计时后的任意状态下再次按下按钮,抢答器重置。 Proteus布线图 代码 变量说明: ***it LED = P3^1; //led ***it key4=P3^4; //TO计时器 uint xian[4]={0};//数据存储 uint N=20;//Time=50ms*20=1s uint begin=0;//判断开始和结束 uint counter=10;//计时10s uint player=0;//玩家号码 uint flag=0;//有玩家抢答,暂停 uchar p1=0x00; 初始化: void init() { TMOD=0x01; TH0=(65536-41500)/256; TL0=(65536-41500)%256; ET0=1; TR0=0; EX0=1; IT0=1; EA=1; } 主函数: void main(void) { init(); counter=10; LED=1; SPEAKER=1; while(1) { flag=0; LED=1; if(begin) { if(P1!=0xFF)//判断非法抢答 { player=15;//非法抢答显示“F” flag=1; //停止抢答判断 } else if(!flag) { Begin_a(); } } else { counter=10; player=0; xianshi(counter); } xianshi(counter); } } 比如三号玩家违规抢答(即在裁判开始之前就按下抢答健),则如下显示: 开始抢答: void Begin_a() { TR0=1; while(begin&&counter) { //**** if(!flag) //如果已有玩家抢答将不再作此判断 { judge(); } if(N==20) { N=0; counter--; if(counter<6)//倒计时5s闪烁 { LED=0; delay(300); LED=1; } } xianshi(counter); } //**** TR0=0; LED=0; } 判断抢答玩家: void judge() //判断抢答玩家号码 { switch(P1)//如果一下八位中任意玩家抢答:记录该玩家号码 { //并关闭计时器,LED常亮,终止判断程序 case ~0x01:{player=1;TR0=0;LED=0;flag=1;break;} case ~0x02:{player=2;TR0=0;LED=0;flag=1;break;} case ~0x04:{player=3;TR0=0;LED=0;flag=1;break;} case ~0x08:{player=4;TR0=0;LED=0;flag=1;break;} case ~0x10:{player=5;TR0=0;LED=0;flag=1;break;} case ~0x20:{player=6;TR0=0;LED=0;flag=1;break;} case ~0x40:{player=7;TR0=0;LED=0;flag=1;break;} case ~0x80:{player=8;TR0=0;LED=0;flag=1;break;} default:{player=0;} } } 显示: void xianshi(count) { xian[0]=count%10; xian[1]=count/10; xian[3]=player; P2=~0x08; P0=~display[xian[0]]; delay(10); P2=~0x04; P0=~display[xian[1]]; delay(10); P2=~0x01; P0=~display[player]; delay(10); } 中断0: void Int0()interrupt 0 //INT0 { begin++; begin=begin%2; } T0计时中断: void initT0() interrupt 1 //T0 { TH0=(65536-41500)/256; TL0=(65536-41500)%256; // 50ms N++; } |
|
|
|
只有小组成员才能发言,加入小组>>
3308 浏览 9 评论
2988 浏览 16 评论
3490 浏览 1 评论
9049 浏览 16 评论
4083 浏览 18 评论
1167浏览 3评论
601浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
592浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2329浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1892浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 10:09 , Processed in 1.156896 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号