第一步:跳线帽串起SIGNAL引脚和P34引脚
第二步:需要一个计数器来计脉冲数(上升沿数) 用T0来计数
TMOD 低四位配置为0101(十六位不可重装载)
用stp生成计数器代码
修改代码
加上:TMOD |= 0x05; //TMOD 0101配置计数模式(修改低四位)
/* 定时器0中断初始化函数 */
void Timer0Init(void) //0毫秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟1T模式(修改高四位,即定时器1的模式)
TMOD &= 0xF0; //设置定时器模式(低四位清0)
TMOD |= 0x05; // 0101配置计数模式(修改低四位) √
TL0 = 0x00; //设置定时初值
TH0 = 0x00; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
第三步:需要一个定时器来计1秒 用T1来计时
定时器1中断序列号为3 (interrupt 3)
用stp生成新的定时器代码
再加两行代码
ET1 = 1;
EA = 1;
interrupt 1---> interrupt 3
修改代码
/*定时1中断初始化函数*/
void Timer1Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x20; //设置定时初值
TH1 = 0xD1; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1; // √
EA = 1; // √
}
/*定时器1中断服务函数*/
void Timer1Server() interrupt 3 // √
{
if(++Key_Slow_Down == 10) Key_Slow_Down = 0;//键盘减速专用
if(++Seg_Slow_Down == 500) Seg_Slow_Down = 0;//数码管减速专用
if(++Seg_Pos == 8) Seg_Pos = 0;
Seg_Disp(Seg_Pos,Seg_Buf[Seg_Pos],Seg_Point[Seg_Pos]);
Led_Disp(Seg_Pos,ucLed[Seg_Pos]);
if(++Timer_1000Ms == 1000) //实时读取频率值
{
Timer_1000Ms = 0;
Freq = TH0 << 8 | TL0; //将TH0和TL0中计的数储存在频率Freq变量里
TH0 = TL0 = 0; //程序
}
}
第四步:函数显示freq
Seg_Buf[3] = Freq / 10000 % 10;
Seg_Buf[4] = Freq / 1000 % 10;
Seg_Buf[5] = Freq / 100 % 10;
Seg_Buf[6] = Freq / 10 % 10;
Seg_Buf[7] = Freq % 10;