原创 【博客大赛】抢答器设计

2012-11-18 20:15 896 9 9 分类: MCU/ 嵌入式

/***********************************************************
实验名称: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);
  }

 }
 }

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条