我是靠谱客的博主 善良香氛,最近开发中收集的这篇文章主要介绍【C51】基于51单片机的简易频率计(附代码、无需外设、小白简单易上手)基于51单片机的简易频率计(无需外设、小白简单易上手),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

基于51单片机的简易频率计(无需外设、小白简单易上手)


  代码较为简单,大概思路是通过定时器单位时间内外部中断上升沿触发的次数来计算实际频率。

/基于51单片机的简易频率计

#include<reg51.h>
#include<intrins.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int

sbit P11=P1^1;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};    //七段显示0到9
/// 0    1   2    3   4     5    6    7    8   9 	     //无小数点
uchar code LEDcode01[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; 	 //七段显示0到9
/ 0    1   2    3   4     5    6    7    8   9 	    //有小数点
uchar date1=0,date2=0,date3=0,date4=0;
uint count=0,time_count=0,sum=0;

  int H,L;
void aaa(void);
 void delay(n);
 void initial();
 void delayms(uint t)
{
	uint a;
	for(;t>0;t--)
		for(a=0;a<200;a++);		  //延时函数
}
  

  

void initial()			   //定时器初始化
{
 TMOD |=0x12;					  //使用模式2,16位定时器
 TH0=0x06;				//	 0.25ms
 TL0=0x06;
 EA=1;            //总中断打开
 ET0=1;           //定时器中断打开
 TR0=1;           //定时器开关打开  
 EX0 = 1;
 IT0 = 1;

	H=0Xfe;
	L=0X14;
//	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH1=0xfe;			//重新赋值,方式1是16位计数器,不能硬件重装初始值
    TL1=0x14;			    //定时0.01ms
//	EA=1;            //总中断打开
	ET1=1;           //定时器中断打开
	TR1=1;           //定时器开关打开
	EX1=1;
	IT1=0;
//	PX0=1;
//	PX1=1;
}
  void input() interrupt 0
{
	  count++;

	}


 void timer0() interrupt 1
{
	time_count++;
	if(time_count==4000)
	{
		sum=count;
		time_count=0;
		count=0;
	}
}
 void Timer0_isr(void) interrupt 3 using 1
{
	TH1=H;		  //重新赋值,方式1是16位计数器,不能硬件重装初始值
	TL1=L;
	P11=!P11;	 
}	 
  void Key_INT1(void) interrupt 2 using 2
{
	 delayms(800);
	 H=H;
	 L=L+10;
/*	 if(L<256)
	 {    
  		H=H;
		L=L+10;
	}
	else if(L>256)
	{
		H=0xff;
		L=L-256+10;
	}
	else if(H=0xff  && L>0x14)
	  {
	  	H=0xfe;
		L=0x14;
	  }	*/


}

 

void aaa(void)			                  //共阳极数码管显示函数,注意小数点使用table1数组
{	
	char qian,shi,ge,bai;
	qian=sum/1000;
	bai=(sum%1000)/100;
	shi=(sum%100)/10;
	ge=(sum%10);		   //取百分位
	P2=0x17;			                  //片选
	P0=table[ge];
	delay(1);			  
	P0=0xff;			                 //段选

	P2=0x1b;
	P0=table[shi];
	delay(1);
	P0=0xff;

	P2=0x1d;
	P0=table[bai];
	delay(1);
	P0=0xff;

	  P2=0x1e;
	P0=table[qian];
	delay(1);
	P0=0xff;
		
}
 void delay(int n)			                  //延时函数,大概1ms左右
{
int m,d;
for(m=92;m>0;m--)
for(d=n;d>0;d--);
}	
  main()
{	 
initial()	;
  	while(1)
	{
	   
	   aaa()	;
	
	}

  }
//阿汪先生的博客.ws

最后

以上就是善良香氛为你收集整理的【C51】基于51单片机的简易频率计(附代码、无需外设、小白简单易上手)基于51单片机的简易频率计(无需外设、小白简单易上手)的全部内容,希望文章能够帮你解决【C51】基于51单片机的简易频率计(附代码、无需外设、小白简单易上手)基于51单片机的简易频率计(无需外设、小白简单易上手)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部