/*****************************************************************************
MCS8051-III学习板演示程序
(c) Copyright 2007-2007,广州恒芯电子
All Rights Reserved
*****************************************************************************/
/*****************************************************************************
程序说明
名称: MCS8051-III学习板演示程序(无线模块接收)
功能: 实现无线模块接收,并在数码管显示
版本:2007-07-01
*****************************************************************************/
/*****************************************************************************
硬件说明
单片机: 兼容MCS-51单片机/STC89C51
晶振频率: 12MHz
*****************************************************************************/
#include "regx52.h"
/****************************************************************************
说明: 程序预定义
*****************************************************************************/
#define LED7A_STATUS P1_7/*数码管第一位控制引脚(0为有效,1为无效)*/
#define LED7B_STATUS P1_6/*数码管第二位控制引脚(0为有效,1为无效)*/
#define LED7C_STATUS P1_5/*数码管第三位控制引脚(0为有效,1为无效)*/
#define LED7D_STATUS P1_4/*数码管第四位控制引脚(0为有效,1为无效)*/
#define LED7_STATUS P0/*数码管状态引脚(0为有效,1为无效)*/
#define RF_DATA P2 /*从P2口0-3接收数据*/
#define RF_VT P3_3 /*无线接收脉冲检测*/
/****************************************************************************
说明: 变量定义
*****************************************************************************/
code unsigned char m_ucLedTab[]=
{
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff
};/*数码管十六进制编码表*/
code unsigned char RF_table[]=
{
0x00,0x08,0x04,0x12,0x02,0x10,0x06,0x14,0x01,0x09, /*从'0'到'9'*/
0x05,0x13,0x03,0x11,0x07,0x15,0xFF /*从'A'到'F'*/
};
unsigned char m_ucLedBuf[4];/*七段数码管显示值缓存*/
/****************************************************************************
名称: Delay
说明: 程序延时
参数: 无
返回: 无
*****************************************************************************/
void Delay();
/****************************************************************************
名称: Led7Scan()
说明: 数码管动态扫描处理程序
参数: 无
返回: 无
*****************************************************************************/
void Led7Scan();
/*****************************************************************************
程序开始
*****************************************************************************/
void main()
{
unsigned char i,RF_Buf=0;/*计数值置0*/
/*T0中断设定*/
TMOD=0x01;/*使用T0:GATE=0,C/T=0(定时),M1 M0=01(工作方式1)*/
TH0=0xec;/*定时时间5毫秒*/
TL0=0x78;
ET0=1;/*允许T0中断*/
TR0=1;/*使T0工作*/
EA=1;/*总中断开启*/
m_ucLedBuf[0]=16;/*千位数*/
m_ucLedBuf[1]=16;/*取出百位数*/
while(1)
{
if(RF_VT==0)
{
Delay();/*延时*/
i=P2 & 0x0f;
RF_Buf=RF_table[i];
m_ucLedBuf[2]=RF_Buf/16;/*取出十位数*/
m_ucLedBuf[3]=RF_Buf%16;/*取出个位数*/
}
}
}
/*****************************************************************************
名称: Interrupt1Handler
说明: T0中断入口
参数: 无
返回 :无
*****************************************************************************/
void Interrupt1Handler() interrupt 1
{
Led7Scan();/*数码管动态扫描处理程序*/
TH0=0xec;/*重新设置T0定时值*/
TL0=0x78;
}
/****************************************************************************
名称: Delay
说明: 程序延时
参数: 无
返回: 无
*****************************************************************************/
void Delay()
{
unsigned char a;
for(a=0;a<200;a++);
}
/****************************************************************************
名称: Led7Scan()
说明: 数码管动态扫描处理程序
参数: 无
返回: 无
*****************************************************************************/
void Led7Scan()
{
static unsigned char a=0;
switch(a)/*判断数码管动态扫描值*/
{
case 0:/*处理数码管第一位*/
LED7D_STATUS=1;/*设置数码管第四位为无效*/
LED7A_STATUS=0;/*设置数码管第一位位有效*/
break;
case 1:/*处理数码管第二位*/
LED7A_STATUS=1;/*设置数码管第一位为无效*/
LED7B_STATUS=0;/*设置数码管第二位位有效*/
break;
case 2:/*处理数码管第三位*/
LED7B_STATUS=1;/*设置数码管第二位为无效*/
LED7C_STATUS=0;/*设置数码管第三位位有效*/
break;
case 3:/*处理数码管第四位*/
LED7C_STATUS=1;/*设置数码管第三位为无效*/
LED7D_STATUS=0;/*设置数码管第四位位有效*/
break;
}
LED7_STATUS=m_ucLedTab[m_ucLedBuf[a]];/*将显示码送数码管状态引脚*/
a++;/*数码管动态扫描值加1,若该值4则置为0*/
if(a>3)
a=0;
}