ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-03-20 10:02:02  阅读:202  来源: 互联网

标签:P2 dat DisplaySMG 555 蓝桥 单片机 SMG Bit 100


文章目录

NE555定时器概述

  • 在NE555内部,有3个5K的电阻分压,故称555定时器
  • 555定时器的基本原理:.
  1. 低电平触发端TRIG和高电平触发端THR: .
  2. 两者电压均小于各自的参考电压时,U_0=1, 放电管截至
  3. 两者电压均大于各自的参考电压时,U_0=0, 放电管导通
  • NE555是一个纯硬件的设计,一旦硬件电路确定了,其功能也确定了,没有可编程的部分。
  • 在蓝桥杯的板子上,555定时器是一个信号发生电路,通过电位器Rb3可改变输出信号的频率。
    在这里插入图片描述

二、测量NE555的信号频率

  • CT107D单片机综合实训平台,上,利用NE555产生方波信号并测量其频率,具体功能要求如下:
  1. 上电开机运行时,关闭蜂鸣器、继电器和8个LED指示灯。
  2. 用短路环将J3中的NALP34短接,NE555发生的信号输入到单片机的P34引脚。
  3. 单片机测:量信号频率,并显示在数码管中,频率数据显示用5位数码管,单位是Hz,当显示长度不足5位时,未使用到的数码管熄灭,在最左边的1位数码管用“F"作为提示符。

三、设计思路

两个Timer

  1. 计数T0
  2. 定时T1(定时1秒)

四、一些参考

在这里插入图片描述4. 在这里插入图片描述
在这里插入图片描述

五、代码展示

#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();
	}
}

请添加图片描述

标签:P2,dat,DisplaySMG,555,蓝桥,单片机,SMG,Bit,100
来源: https://blog.csdn.net/m0_52592798/article/details/123601980

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有