8051单片机抢答器C程序
ak;//只有P1.4,key4抢答
}
/*
switch (KeyState)
{
case 0x00: key=0;break;//全高,无人抢答
case 0x01: key=1;break;//只有P1.0,key1抢答
case 0x02: key=2;break;//只有P1.1,key2抢答
case 0x04: key=3;break;//只有P1.2,key3抢答
case 0x08: key=4;break;//只有P1.3,key4抢答
}
*/
//上面是在用高电平来判断抢答状态时的程序,经证明不知道为何无效
return key;
}
/**************************************************************************
* IT0_Init
*
* Description: 初始化计时器T0的状态
* Arguments : none
* Returns : none
***************************************************************************/
void IT0_Init(void)
{
TMOD=0x01;//设置T0在方式1下工作
TH0=0x3C;
TL0=0xAF;//这两个寄存器存的是计数器的计数开始的值,计算发现这两个值累加至溢出后正好是50ms
ET0=1;//使T0中断可以溢出
EA=1;//开启总中断
TF0=0;//溢出位清零
TR0=1;//开启T0
}
/**************************************************************************
* Timer0_Overflow() interrupt 1
*
* Description: 中断溢出服务程序, 采用的是中断方式1, 后面最好不加using选择寄存器组以免与系统用在主程序的寄存器冲突
* Arguments : none
* Returns : none
***************************************************************************/
void Timer0_Overflow() interrupt 1
{
static Byte second=20;//用20次中断来判断1秒
TH0=0x3C;
TL0=0xAF;
second--;
intrCounter--;
/*
if (second==0)//每隔一秒的操作
{
MAX7219_DisplayChar(DIG_2,co
second=20;//重新赋值每秒计数器
if (intrCounter==0)
{
TR0=0;//关闭T0计数器
isStart=1;//计时结束,进入正常抢答
//SPEAKER_start();//开始抢答的声音
}
//待显示"0"以后就开始抢答
else
{
//SPEAKER_count();//倒计时声音
}
}
*/
if (second==0)//每隔一秒的操作
{
//if (showNum!=1) SPEAKER_count();//倒计时声音
//else SPEAKER_start();//开始抢答的声音
MAX7219_DisplayChar(DIG_2,co
second=20;//重新赋值每秒计数器
}//待显示"0"以后就开始抢答
if (intrCounter==0)
{
TR0=0;//关闭T0计数器
isStart=1;//计时结束,进入正常抢答
}
}
/**************************************************************************
* PressedHandle
*
* Description: 按键处理
* Arguments : Byte keyPressed-->按下的按键
* Returns : none
***************************************************************************/
void PressedHandle(Byte keyPressed)
{
MAX7219_Clear();//LED clear
MAX7219_DisplayChar(DIG_2,co
}
/**************************************************************************
* GetOrFoulHandle(Bool state)
*
* Description: 正常抢答或是犯规处理
* Arguments : Bool state-->是GET和FOUL两个宏的取之之一
* Returns : none
***************************************************************************/
void GetOrFoulHandle(Bool state)
{
if (!state)
{
MAX7219_DisplayChar(DIG_1,LED_FOUL);//如果是犯规的话左边的LED要显示"F",foul
}
}
/**************************************************************************
* CancelHandle()
*
* Description: 处理主持人取消倒计时
* Arguments : none
* Returns : none
***************************************************************************/
void CancelHandle()
{
MAX7219_DisplayChar(DIG_1,LED_C);
MAX7219_DisplayChar(DIG_2,LED_L);//主持人取消倒计时之后,两个数码管显示"CL"-->cancel
}
/**************************************************************************
* delayus()
*
* Description: 延时程序
* Arguments : t-->us
* Returns : time delayed
***************************************************************************/
void delayus(unsigned char t )
{
unsigned char j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
/**************************************************************************
* SPEAKER_count/start/foul/get()
*
* Description: speaker发声程序->计数/开始/犯规/抢答 四种声音
* Arguments : none
* Retur
8051单片机抢答 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)