.
void Delay_ms(uint time) //延时函数 {
uint i,j;
for(i=time;i>0;i--) for(j=125;j>0;j--); }
void LED4_Display (void) { unsigned char code *led_table; // uchar i;
//显示第1位
led_table = LED_0F + LED[1]; i = *led_table; LED_OUT(0x04);
LED_OUT(i); RCLK = 0; RCLK = 1;
//显示第2位
led_table = LED_0F + LED[2]; i = *led_table; LED_OUT(0x08);
LED_OUT(i); RCLK = 0; RCLK = 1;
//显示第3位
led_table = LED_0F + LED[3]; i = *led_table; LED_OUT(0x01); LED_OUT(i);
RCLK = 0;
.
显示函数 查表指针 // .
}
RCLK = 1;
//显示第4位
led_table = LED_0F + LED[4]; i = *led_table; LED_OUT(0x02);
LED_OUT(i); RCLK = 0; RCLK = 1;
void LED_OUT(uchar X) //输出函数 {
uchar i;
for(i=8;i>=1;i--) {
if (X&0x80) DIO=1; else DIO=0; X<<=1; SCLK = 0; SCLK = 1; } }
void time0_init() {
TMOD|=0x01; TH0=0x3c; TL0=0xb0;
//定时器初始化(TIMER0)
//定时器0 定时模式 计数范围65536 //定时初值50ms
TR0=0; //暂停定时器0 }
void time1_init() //计数器初始化(T1) {
TMOD|=0x50; //定时器1 计数模式,计数范围65536 TH1=0; //计数初值0 TL1=0;
TR1=0; //暂停计数器
.
.
}
void str_init() //开中断 {
EA=1; ET0=1; ET1=1; }
void time0_event() interrupt 1 //定时器0中断 {
static uchar i; i++;
TH0=0x3c; //定时初值50ms TL0=0xb0;
if(i==20) //循环20次为1秒 {
i=0;
TR1=0; //停止计数 TR0=0; //停止定时
ff=(TH1*256+TL1); //求出频率值 就是1秒内脉冲次数 TH1=0; //计数值清零
TL1=0;
TH0=0x3c; //定时初值50ms TL0=0xb0;
start=1; //启动定时器开启变量 } }
void time1_event() interrupt 3 //定时器1中断 { int i=0xff; while(1) { P0=~i;
Delay_ms(500);
} }
void main()
.
.
{
uchar i,j;
uint a,b,c,d; uint ss[4];
time0_init(); //定时器初始化 time1_init();
str_init(); //开中断 while(1) {
if(start==1) {
TR0=1; //启动定时器 TR1=1; //启动计数器
start=0; //关闭启动变量位 保证1秒时间 }
j=0;
do //计算显示频率数值 {
ss[j]=ff; j++; }while(ff/=10);
a=ss[0]; b=ss[1]; c=ss[2]; d=ss[3]; LED[1]=b; LED[2]=a; LED[3]=d; LED[4]=c;
LED4_Display (); //调用显示函数 } }
.
.
.