📄 frcount.c
字号:
/*--------------------------------------------------
程序功能:利用单片机定时计数器,测量信号频率
入口参数:
出口参数:
程序编写:zqp
创建时间:2007-8-9
联系方式:QQ:30871641
修改日志:
NO.1:显示定时时间改为10MS,便于软件仿真
---------------------------------------------------*/
#include <AT89X52.H>
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7, //位选通代码
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //共阴代码
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10}; //显示缓冲区,只用六位
unsigned char temp[8]; //暂存数组
unsigned char dispcount; //显示计数变量
unsigned char T0count; //T0计数变量
unsigned char timecount; //定时计数变量
bit flag; //1秒到标志位
unsigned long x; //被测频率值(没处理)
/*--------------------------------------------------
程序功能:初始化,处理数据,T0用作计数
入口参数:
出口参数:
---------------------------------------------------*/
void main(void)
{
unsigned char i;
TMOD=0x15; //T1用作定时,定时方式1,T0用作计数,方式1
TH0=0; //T0计数初值为0
TL0=0;
TH1=(65536-10000)/256; //T1定时10ms
TL1=(65536-10000)%256;
TR1=1; //启动定时器T1
TR0=1; //启动计数器T0
ET0=1; //允许TO中断
ET1=1; //允许T1中断
EA=1; //允许总中断
while(1)
{
if(flag==1)
{
flag=0;
x=T0count*65536+TH0*256+TL0; //处理一秒内计的脉冲个数
for(i=0;i<8;i++)
{
temp[i]=0;
}
i=0;
while(x/10) //把计数结果各位分离出来,保存在数组temp[]中
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<6;i++) //把数组temp[]中的计数结果传送给数组dispbuf[]
{
dispbuf[i]=temp[i];
}
timecount=0; //计时变量清零
T0count=0; //计数变量清零
TH0=0; //计数器T0初值清零
TL0=0;
TR0=1; //重起计数器T0
}
}
}
/*--------------------------------------------------
程序功能:T0中断服务程序
入口参数:
出口参数:T0count
---------------------------------------------------*/
void t0(void) interrupt 1 using 0
{
T0count++; //T0计数,当TH0,TL0计数溢出后,T0count加1,即计数65536后
}
/*--------------------------------------------------
程序功能:T1中断服务程序 显示数据
入口参数:
出口参数:TR0, flag, P0口位选通口, P2口数据口
---------------------------------------------------*/
void t1(void) interrupt 3 using 0
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
timecount++;
if(timecount==100) //如果一秒到
{
TR0=0; //停止计数
timecount=0; //计时变量清零
flag=1; //标志变量置1,通知主程序进行数据处理
}
P2=dispcode[dispbuf[dispcount]];
P0=dispbit[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -