/***********************************************************
实验名称:5路抢答器示例程序
程序说明:按键S17,S18,S19,S20分别代表4路抢答器,抢答成功后,数码管显示相应的代号,并有声音提醒,
每次抢答后要等约两秒钟的时间才能进行下一轮抢答。
实验平台:http://item.taobao.com/item.htm?spm=a1z10.1.w4.1.31ea74&id=14613428506
***********************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit K1 = P3^0; sbit K2 = P3^1;
sbit K3 = P3^2; sbit K4 = P3^3;//K1~K4分别对应S17~S20
sbit BEEP = P3^5; //蜂鸣器控制端口P35
uchar temp;
void beep(); //蜂鸣器
void delay0(uchar x); //x*0.14MS
/******************************************/
/* 延时子程序 */
/******************************************/
void delay1(uchar x)
{ uchar j;
while((x--)!=0)
{ for(j=0;j<125;j++)
{;}
}
}
void delay(uint ms)
{
uchar t;
while(ms--)
{
for(t = 0; t < 120; t++);
}
}
void beep()
{
unsigned char i;
for (i=0;i<100;i++)
{
delay0(4);
BEEP=!BEEP; //BEEP取反
}
BEEP=1; //关闭蜂鸣器
delay1(250); //延时
}
void delay0(uchar x) //x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}
/******************************************/
/* 主程序 */
/******************************************/
main()
{
P0 = 0xff;
P1 = 0xff;
while(1)
{
P0 = 0xc0; //显示“0”
P1 = 0x01;
P3 = 0xff; //置P3.0-3.3为输入状态
_nop_();
temp = P3;
while(temp==0xff)
{
temp = P3;
temp=temp&0xff;
}
if(K1==0)
{ beep();
P0 = 0xf9; //显示”1“
delay(2000);
}
else if(K2==0)
{ beep();
P0 = 0xa4; //显示”2“
delay(2000);
}
else if(K3==0)
{ beep();
P0 = 0xb0; //显示“3”
delay(2000);
}
else if(K4==0)
{ beep();
P0 = 0x99; //显示“4”
delay(2000);
}
}
}
文章评论(0条评论)
登录后参与讨论