您的位置 首页 硬件

51单片机简易频率计源代码

定时器0设置定时时间1秒定时器1设置计数1秒内的脉冲数量includereg51h>defineucharunsignedchardefineuintunsign

//守时器0 设置守时时刻1秒 守时器1 设置计数1秒内的脉冲数量

#include
#define uchar unsigned char
#define uint unsigned int
uint ff; //承受频率值
uchar start=1; //守时器,计数模式发动变量
code uchar seg[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
code uchar tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay(uint k) //延时函数
{
while(k–);
}
void show(uint k) //数值显现函数
{
static uchar i,j;
uint ss[5];
i=0;
do
{
ss[i]=k%10;
i++;
}while(k/=10);
for(j=0;j {
P0=seg[ss[j]];
P2=tab[j];
delay(100);
P0=0xff;
P2=0xff;
}
}
void time0_init()
{
TMOD|=0x01; //守时器0 守时形式 计数规模65536
TH0=0x3c; //守时初值50ms
TL0=0xb0;
TR0=0; //暂停守时器0
}
void time1_init()
{
TMOD|=0x50; //守时器1 计数形式,计数规模65536
TH1=0; //计数初值0
TL1=0;
TR1=0;//暂停计数器
}
void str_init() //守时器中止
{
EA=1;
ET0=1;
}
void time0_event() interrupt 1
{
static uchar i;
i++;
TH0=0x3c; //守时初值50ms
TL0=0xb0;
if(i==20)
{
i=0;
TR1=0; //中止计数
TR0=0; //中止守时
ff=(TH1*256+TL1); //求出频率值 便是1秒内脉冲次数
TH1=0; //计数值清零
TL1=0;
TH0=0x3c; //守时初值50ms
TL0=0xb0;
start=1; //发动守时器敞开变量
}
}
void main()
{
time0_init();
time1_init();
str_init();
while(1)
{
if(start==1)
{
TR0=1; //发动守时器
TR1=1; //发动计数器
start=0; //封闭发动变量位 确保1秒时刻
}
show(ff);
}
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/318356.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部