本文主要是介绍蓝桥杯单片机——NE555频率测量(13),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、原理分析
频率(frequency)是单位时间内完成周期性变化的次数,是描述周期运动频繁程度的量,常用符号f或ν表示,单位为秒分之一,符号为s-1,符号为Hz。
NE555模块是一个纯硬件的设计,不需要底层驱动。其编程非常简单,主要是计算一秒钟之内有多少个频率响应,所说的频率响应即计数器计数时溢出的个数。在蓝桥杯的板子上,NE555是一个信号发生电路,通过滑动变阻器Rb3可以改变输出信号的频率。
二、程序编写
实现功能:
1.上电开机运行时,关闭蜂鸣器、继电器和8个LED指示灯。
2.用跳线帽将J3中的SIGNAL与P34短接,使NE555发生的信号输入到单片机的P34引脚。
3.单片机测量信号频率,并显示在数码管中,频率数据显示用5位数码管,单位是Hz,当显示长度不足5位时,未使用到的数码管熄灭,在最左边的1位数码管用“F”作为提示符。
#include <reg52.h>
unsigned int count_f=0;// 存放临时得出的频率值
unsigned int dat_f=0; // 存放1s的频率最终值
unsigned char count_t=0; // 定时1s的计数变量
unsigned char smg_nodot[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char smg_dot[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
void Init_timer()//定时、计数器初始化
{//定时器0用作计数,8位重装方式TH0=0XFF;TL0=0XFF;//定时器1用作定时,定时时间是50msTH1=(65535-50000+1)/256;TL1=(65535-50000+1)%256;TMOD=0X16;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;
}
void service_T0() interrupt 1
{count_f++;
}
void service_T1() interrupt 3
{TH1=(65535-50000+1)/256;TL1=(65535-50000+1)%256;count_t++;if(count_t==20) //1s{dat_f=count_f;//取出这1s的频率count_f=0;count_t=0;}
}
//数码管显示模块
void Delay_SMG(unsigned int t)
{while(t--);
}
void DisplaySMG_Bit(unsigned char pos,unsigned char dat)
{P2=0XE0;P0=0xff;//先全部关掉数码管,避免显示不正常P2=0xC0;P0=0x01<<pos;P2=0xE0;P0=dat;
}
void DisplaySMG()
{DisplaySMG_Bit(0,0x8e);Delay_SMG(100);DisplaySMG_Bit(1,0xff);Delay_SMG(100);DisplaySMG_Bit(2,0xff);Delay_SMG(100);if(dat_f>9999){DisplaySMG_Bit(3,smg_nodot[dat_f/10000]);//万位Delay_SMG(100);}if(dat_f>999){DisplaySMG_Bit(4,smg_nodot[(dat_f/1000)%10]);//千位Delay_SMG(100);}if(dat_f>99){DisplaySMG_Bit(5,smg_nodot[(dat_f/100)%10]);//百位Delay_SMG(100);} if(dat_f>9){DisplaySMG_Bit(6,smg_nodot[(dat_f/10)%10]);//十位Delay_SMG(100);}DisplaySMG_Bit(7,smg_nodot[dat_f%10]);//个位Delay_SMG(100);P2=0xC0;P0=0xff;//消隐P2=0xE0;P0=0xff;
}
void main()
{P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;//关闭蜂鸣器,LED等 Init_timer();while(1){DisplaySMG();}
}
这篇关于蓝桥杯单片机——NE555频率测量(13)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!