程序
#include <STC15F2K60S2.H>
#include <hc138_hs.H>
unsigned int Count = 0; //定义计数变量,计算频率
unsigned int Frequence = 0; //频率
//定时器初始化函数
void Timer_Init(void)
{
TMOD |= 0x06; //设置定时器0为计数器,八位自动重装载,定时器1为定时器,16位自动重载载
ET0 = 1;
ET1 = 1;
EA = 1; //开启定时器中断
TH0 = 0xFF; //设置初值,使P3^4每产生一个脉冲,触发一次定时器0中断
TL0 = 0xFF;
TL1 = 0x18; //设置处置,使定时器1每1ms参生一次中断
TH1 = 0xFC;
TR0 = 1; //打开定时器0
TR1 = 1; //打开定时器1
}
//定时器0中断服务函数
void Timer0_Handler() interrupt 1
{
Count++; //频率加一
}
//定时器1中断服务函数,,每1ms触发一次
void Timer1_Handler() interrupt 3
{
static int i =0;
i++;
if(i>=200) //0.2s进来一次
{
Frequence = Count * 5; //读取当前的频率值
Count = 0; //Count清零
i = 0; //i清零
}
}
/* 应用 */
void main(void)
{
Timer_Init();
while(1)
{
//频率
smg_SetOne(1,Frequence/10000);
smg_SetOne(2,Frequence%10000/1000);
smg_SetOne(3,Frequence%1000/100);
smg_SetOne(4,Frequence%100/10);
smg_SetOne(5,Frequence%10);
}
}
效果