蓝桥杯之单片机学习(十八)——555定时器与频率测量

简介: 蓝桥杯之单片机学习(十八)——555定时器与频率测量

NE555定时器概述


在NE555内部,有3个5K的电阻分压,故称555定时器。

555定时器的基本原理:.

1.低电平触发端TRIG和高电平触发端THR: .

2.两者电压均小于各自的参考电压时,U_0=1, 放电管截至。

3.两者电压均大于各自的参考电压时,U_0=0, 放电管导通。

NE555是一个纯硬件的设计,一旦硬件电路确定了,其功能也确定了,没有可编程的部分。

在蓝桥杯的板子上,555定时器是一个信号发生电路,通过电位器Rb3可改变输出信号的频率。

0a2653c851af460fa595bd959398a8f1.png


二、测量NE555的信号频率


在CT107D单片机综合实训平台,上,利用NE555产生方波信号并测量其频率,具体功能要求如下:

1.上电开机运行时,关闭蜂鸣器、继电器和8个LED指示灯。

2.用短路环将J3中的NAL与P34短接,NE555发生的信号输入到单片机的P34引脚。

3.单片机测:量信号频率,并显示在数码管中,频率数据显示用5位数码管,单位是Hz,当显示长度不足5位时,未使用到的数码管熄灭,在最左边的1位数码管用“F"作为提示符。


三、设计思路


两个Timer


1.计数T0

2.定时T1(定时1秒)


四、一些参考



2d65d23f6d4748949b924e4057485923.png4cebaac233b3433da32a72337a77fc60.png


五、代码展示


#include <reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
uint count_f = 0;   //计算频率
uint dat_f = 0;     //缓存上一秒频率
uchar count_t = 0;  //计算时间
uchar code SMG_duanma[18] = 
  {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  0x88,0x80,0xc6,0xc0,0x86,0x8e,
  0xbf,0x7f};//分别是0-9(对应下标),A-F,“-”,“.”
//配置HC138
void SelectHC138(uchar channel)
{
  switch(channel)
  {
  case 4:    //LED
    P2 = (P2 & 0X1F) | 0X80;
  break;
  case 5:    //蜂鸣器和继电器
    P2 = (P2 & 0X1F) | 0Xa0;
  break;
  case 6:    //位码
    P2 = (P2 & 0X1F) | 0Xc0;
  break;
  case 7:    //段码
    P2 = (P2 & 0X1F) | 0Xe0;
  break;
  case 0:    //锁住所有寄存器
    P2 = (P2 & 0X1F) | 0X00;
  break;
  }
}
void Initsys()
{
  SelectHC138(5);
  P0 = 0X00;//关闭蜂鸣器和继电器
  SelectHC138(4);
  P0 = 0XFF;//关闭LED
}
void Delay_SMG(uint t)
{
  while(t--);
}
//在pos位码上,显示value段码
void DisplaySMG_Bit(uchar pos, uchar value)
{
  SelectHC138(6);
  P0 = 0X01 << pos;
  SelectHC138(7);
  P0 = value;
}
void Init_Timer()
{
  //定时器0用作计数,8位重装
  TH0 = 0XFF;
  TL0 = 0XFF;
  //定时器1用作定时,定时时间50ms
  TH1 = (65535 - 50000 + 1) / 256;
  TL1 = (65535 - 50000 + 1) % 256;
  TMOD = 0X16;//0001 0110
  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)
  {
  dat_f = count_f;
  count_f = 0;
  count_t = 0;
  }
}
void Display_SMG_F()
{
  DisplaySMG_Bit(0, SMG_duanma[15]);
  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_duanma[dat_f / 10000]);
  Delay_SMG(100);
  }
  if(dat_f > 999)
  {
  DisplaySMG_Bit(4, SMG_duanma[(dat_f / 1000) % 10]);
  Delay_SMG(100);
  }
  if(dat_f > 99)
  {
  DisplaySMG_Bit(5, SMG_duanma[(dat_f / 100) % 10]);
  Delay_SMG(100);
  }
  if(dat_f > 9)
  {
  DisplaySMG_Bit(6, SMG_duanma[(dat_f / 10) % 10]);
  Delay_SMG(100);
  }
  DisplaySMG_Bit(7, SMG_duanma[dat_f % 10]);
  Delay_SMG(100);
  SelectHC138(6);
  P0 = 0XFF;
  SelectHC138(7);
  P0 = 0XFF;
}
void main()
{
  Initsys();
  Init_Timer();
  while(1)
  {
  Display_SMG_F();
  }
}

0a2653c851af460fa595bd959398a8f1.png

相关文章
|
3月前
【51单片机】通过定时器中断 在8位数码管显示时间
【51单片机】通过定时器中断 在8位数码管显示时间
|
3月前
|
算法
51单片机不用定时器的数码管倒计时
51单片机不用定时器的数码管倒计时
|
4月前
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
蓝桥杯之单片机学习(终)——关于之前文章的错误及更正(附:第十四届蓝桥杯单片机赛题)
|
5月前
|
物联网 Linux 芯片
学习嵌入式是选择单片机还是Linux?
单片机通常指的是一种集成了处理器、存储器和各种外设接口的微控制器芯片,常见的有STC、51系列、AVR、ARM Cortex-M等。单片机具有低成本、低功耗、实时性强等特点,适用于对资源要求较低、功耗要求较低、实时性要求较高的嵌入式系统。学习单片机开发可以让您深入了解嵌入式系统的底层原理和硬件编程,对于对嵌入式系统底层开发感兴趣的人来说,是一个很好的选择。
136 4
|
6月前
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
定时器+按键控制LED流水灯模式+定时器时钟——“51单片机”
|
6月前
|
存储 搜索推荐 IDE
新手如何快速上手学习单片机?
新手如何快速上手学习单片机?
121 0
|
6月前
|
存储 编译器 C语言
单片机学习之路一些常见的疑问也是我的个人学习总结
单片机学习之路一些常见的疑问也是我的个人学习总结
129 0
|
6月前
|
人工智能 算法 Java
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-1005 数字游戏
107 0