资讯详情

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

51hei原创文章欢迎转载但是必须保留版权,频率输入在定时器1口就行了. //定时器0 设置定时时间1秒 定时器1 设置计数1秒内的脉冲数量 #include <reg51.h> #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<i;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 =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); } } -电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台