风风雨雨二十载,多少bug在心间。
代码编译不通过,急得抓耳直挠腮。
回想当年恩师讲,基础知道全忘干。
忙里偷闲回首看,权当引玉的抛转。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
电路图
按键功能说明:
S2(SET)为抢答开始按键;
S3(OK)、S4(+)、S5(-)为1号、2号、3号抢答者抢答按键。
LED状态指示灯说明:
P10对应的LED灯为抢答开始指示灯;
P11对应的LED灯为抢答结束指示灯或者说禁止抢答指示灯;
P12、P13、P14分别为1号、2号、3号抢答成功指示灯。
抢答时间倒计时LED指示功能使用P15、P16、P17对应的LED灯。
倒计时工作说明:
抢答时间30S,按下抢答开始键时,开始计时同时P15、P16、P17对应的LED灯亮起。当抢答时间剩余20S时,P15对应的LED灭掉。当抢答时间剩余10S时,P16对应的LED灭掉。当抢答时间剩余0S时,P17对应的LED灭掉。同时蜂鸣器超时报警鸣叫,鸣叫时长2s。
功能说明:
(1)系统上电,P11指示灯亮起,其余所有指示灯全部熄灭,禁止抢答,所有抢答键无效,对应的抢答成功指示灯不会亮起。
(2)当S2抢答开始按键按下,P10连接的LED亮起,P11连接的LED熄灭,P15、P16、P17对应的倒计时指示灯亮起,抢答开始,同时定时器0开始定时30S,30S定时时间到,若无人抢答,则本次抢答结束,P11亮起同时蜂鸣器鸣约2秒(通过定时器1实现),然后蜂鸣器停止鸣叫。
(3)当抢答开始后,S3、S4、S5任意按键按下,抢答成功,则对应的LED亮起,同时蜂鸣器鸣叫约2秒然后停止,同时P11亮起,P10熄灭,本次抢答结束。
(4)三者任意一者抢答成功,其他抢答则无法继续抢答,抢答无效,只有当再次按下S2开始键,才可以进行下一轮抢答。
程序设计
#include
sbit beep=P3^0;//蜂鸣器
sbit s1=P2^1;//s1,s2,s3为三个人手中的按键,复位按键为主持人
sbit s2=P2^2;
sbit s3=P2^3;
sbit d1=P2^4; //分别对应三人的led灯
sbit d2=P2^5;
sbit d3=P2^6;
unsigned char a[4]={0x3f,0x06,0x5b,0x4f};//0,1,2,3的字形码
void main()
{
P0=a[0];//0的字形码输送给P0
P2=0x0f;//初始化,让led灭
beep=0;//蜂鸣器初始化
while(1)
{
if(s1==0&&s2==1&&s3==1) //若s1按下
{
d1=1;beep=!beep;P0=a[1];//d1亮,喇叭响,数码管显示1
}
if(s2==0&&s1==1&&s3==1)
{
d2=1;beep=!beep;P0=a[2];
}
if(s3==0&&s1==1&&s2==1)
{
d3=1;beep=!beep;P0=a[3];
}
}
}
文章评论(0条评论)
登录后参与讨论