单片机程序源码:
/*******************************************************************************
* 标题: 三路抢答器 *
* 时间 2018年8月5日17:59:20 *
* *
* 实验说明:在10s的时间内,三位选手进行按键抢答,如果1号抢答,那么数码管将显示*
1号选手的号码。并且蜂鸣器响,以此类推。如果10s时间到,蜂鸣器响,选手 *
无法进行抢答 *
********************************************************************************
* 实验心得:做法相对简单,注意共阴数码管还是共阳数码管 *
********************************************************************************/
#include
//IO口定义
#define GPIO_DIG P0
#define GPIO_SHOW P2
sbit LSA=P3^0;
sbit beep=P1^5;
sbit K1=P3^1;
sbit K2=P1^0;
sbit K3=P1^1;
sbit K4=P1^2;
//--定义全局变量--//
typedef unsigned int u16;
unsigned char code DIG_CODE[18]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned int Ge=0;
unsigned int Shi=1;
unsigned int num=0;
unsigned int Res=10;
unsigned int flag=0;
//全局函数
void DigDisplay();
void delay(u16 i)
{
while(i--);
}
void main()
{
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0x0B0;
EA = 1;
ET0 = 1;
TR0 = 1;
DigDisplay();
}
void DigDisplay()
{
unsigned char i;
unsigned int j;
while(1)
{
for(i=0;i<2;i++)
{
switch(i) //位选,选择点亮的数码管,
{
case(0):
LSA=0;
GPIO_DIG=DIG_CODE[Shi];//发送段码
break;//显示第0位
case(1):
LSA=1;
GPIO_DIG=DIG_CODE[Ge];//发送段码
break;//显示第1位
}
/****************************************************************************/
/*消隐函数要在数码管更新频率很快的条件下,才起作用,手动更换数码管位选完全达不到这么快的速度,因此在这种情况下也是没必要用消隐的 */
j=10; //扫描间隔时间设定
while(j--);
GPIO_DIG=0x00;//消隐
}
if(K1==0)
{
Res=10;
flag=0;
}
else if(K2==0)
{
GPIO_SHOW=~DIG_CODE[1];
while(1)
{
beep=~beep;
delay(10);
if(K1==0)
{
Res=10;
flag=0;
GPIO_SHOW=~DIG_CODE[17];
break;
}
}
}
else if(K3==0)
{
GPIO_SHOW=~DIG_CODE[2];
while(1)
{
beep=~beep;
delay(10);
if(K1==0)
{
Res=10;
flag=0;
GPIO_SHOW=~DIG_CODE[17];
break;
}
}
}
else if(K4==0)
{
GPIO_SHOW=~DIG_CODE[3];
while(1)
{
beep=~beep;
delay(10);
if(K1==0)
{
Res=10;
flag=0;
GPIO_SHOW=~DIG_CODE[17];
break;
}
}
}
}
}
void Int1() interrupt 1
{
TMOD = 0x01;
TH0 = 0x3C;
TL0 = 0x0B0;
num++;
if(num==20)
{
num=0;
flag++;
Res--;
Ge=Res%10;
Shi=Res/10;
}
if(flag==10)
{
while(1)
{
beep=~beep;
delay(10);
if(K1==0)
{
Res=10;
flag=0;
break;
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』