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

Posted 阿汪先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C51基于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单片机的简易频率计(附代码无需外设小白简单易上手)的主要内容,如果未能解决你的问题,请参考以下文章

单片微机原理P3:80C51外部拓展系统

基于80C51单片机,编写电子时钟,要求有电路图、PCB图和代码(C语言或者VB)

我想用C51单片机的定时器0工作方式2输出一个PWM。它的频率要怎么设置???

C51单片机的问题:认能告诉我,为啥led1灯不灭,或者程序哪有问题,芯片频率是12MHZ的.

51单片机简易MP3程序驱动蜂鸣器播放

谁能告诉我下单片机80c51的各引脚的作用?