微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 8051单片机抢答器C程序

8051单片机抢答器C程序

时间:11-13 来源:互联网 点击:

}

/**************************************************************************

* MAX7219_ShutdownStart()

*

* 描述: 进入 shutdown 模式

* Arguments : none

* Returns : none

***************************************************************************/

void MAX7219_ShutdownStart (void)

{

MAX7219_Write(REG_SHUTDOWN, 0);

}

/**************************************************************************

* MAX7219_ShutdownStop()

*

* 描述: 退出 shutdown 模式

* Arguments : none

* Returns : none

***************************************************************************/

void MAX7219_ShutdownStop (void)

{

MAX7219_Write(REG_SHUTDOWN, 1);

}

/**************************************************************************

* MAX7219_Init()

*

* Description: MAX7219初始化模块; 应该先于其他MAX7219函数而被调用

* Arguments : none

* Returns : none

***************************************************************************/

void MAX7219_Init (void)

{

DATA=1;

CLK=1;

LOAD=1;

MAX7219_Write(REG_SCAN_LIMIT,1);//这里设置的是扫描两个数码管

MAX7219_Write(REG_DECODE, 0x00);

MAX7219_SetBrightness(INTENSITY_MAX);//设置最大亮度显示

MAX7219_DisplayTestStart();

MAX7219_DisplayTestStop();

MAX7219_ShutdownStop();

MAX7219_Clear();

}

/**************************************************************************

* Delay_100us()

*

* 描述: 延时100us,主要用在消除开关抖动

* Arguments : none

* Returns : none

***************************************************************************/

void Delay10ms(void)

{

unsigned char i,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

/**************************************************************************

* GetHostStartKey()

*

* Description: 取得主持人开始按键的键值

* Arguments : none

* Returns : 1-->主持人按键; 0-->主持人未按键

***************************************************************************/

Bool GetHostStartKey (void)

{

if (HOST_START ==1)

return 0;

else

Delay10ms ();//如果发现主持人按键接通,要先延时100us,防止抖动

if (HOST_START==1)

return 0;

else

return 1;//延时时候还是接通,则判断为该键确实按下

}

/**************************************************************************

* GetHostCancelKey()

*

* Description: 取得主持人取消按键的键值

* Arguments : none

* Returns : 1-->主持人按键; 0-->主持人未按键

***************************************************************************/

Bool GetHostCancelKey (void)

{

if (HOST_CANCEL ==1)

return 0;

else

Delay10ms ();//如果发现主持人按键接通,要先延时100us,防止抖动

if (HOST_CANCEL ==1)

return 0;

else

return 1;//延时时候还是接通,则判断为该键确实按下

}

/**************************************************************************

* GetCounter

*

* Description: 取得预先设置的倒计时时间

* Arguments : none

* Returns : none

***************************************************************************/

void GetCounter(void)

{

beginNum=1;//在所有开关都没有拨动的时候倒计时为1秒,比设置为0秒要好

intrCounter=20;//每一秒对应的中断次数为20次

if (SWITCH1_3==1)

{

beginNum+=3;

}

if (SWITCH2_2==1)

{

beginNum+=2;

}

if (SWITCH3_2==1)

{

beginNum+=2;

}

if (SWITCH4_1==1)

{

beginNum+=1;

}//以上判断语句为判断拨码开关状态

intrCounter=20*beginNum;//计算总扫描次数

}

/**************************************************************************

* GetPressed

*

* Description: 从P1口连接抢答端的四位来判断抢答情况

* Arguments : Byte KeyState-->P1 state

* Returns : 抢答端的号码 ; 0-->没人抢答

***************************************************************************/

Byte GetPressed(Byte KeyState)

{

Byte key;//记录抢答端的号码

KeyState&=0x0f;//取P1口的低四位

switch (KeyState)

{

case 0x0f: key=0;break;//全高,无人抢答

case 0x0e: key=1;break;//只有P1.1,key1抢答

case 0x0d: key=2;break;//只有P1.2,key2抢答

case 0x0b: key=3;break;//只有P1.3,key3抢答

case 0x07: key=4;bre

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top