Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >蓝桥杯单片机—-NE555频率测量

蓝桥杯单片机—-NE555频率测量

作者头像
全栈程序员站长
发布于 2022-07-28 11:23:16
发布于 2022-07-28 11:23:16
1.3K02
代码可运行
举报
运行总次数:2
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

NE555 (Timer IC)为8脚时基集成电路,NE555是属于555系列的计时IC的其中的一种型号,555系列IC的接脚功能及运用都是相容的,只是型号不同的因其价格不同其稳定度、省电、可产生的振荡频率也不大相同;而555是一个用途很广且相当普遍的计时IC,只需少数的电阻和电容,便可产生数位电路所需的各种不同频率之脉波讯号。

主要特点:

1.只需简单的电阻器、电容器,即可完成特定的振荡延时作用。其延时范围极广,可由几微秒至几小时之久。

2.它的操作电源范围极大,可与TTL,CMOS等逻辑电路配合,也就是它的输出电平及输入触发电平,均能与这些系列逻辑电路的高、低电平匹配。

3.其输出端的供给电流大,可直接推动多种自动控制的负载。

4.它的计时精确度高、温度稳定度佳,且价格便宜。

引脚位:

Pin 1 (接地) -地线(或共同接地) ,通常被连接到电路共同接地。

Pin 2 (触发点) -这个脚位是触发NE555使其启动它的时间周期。触发信号上缘电压须大于2/3 VCC,下缘须低于1/3 VCC 。

Pin 3 (输出) -当时间周期开始555的输出脚位,移至比电源电压少1.7伏的高电位。周期的结束输出回到O伏左右的低电位。于高电位时的最大输出电流大约200 mA 。

Pin 4 (重置) -一个低逻辑电位送至这个脚位时会重置定时器和使输出回到一个低电位。它通常被接到正电源或忽略不用。

Pin 5 (控制) -这个接脚准许由外部电压改变触发和闸限电压。当计时器经营在稳定或振荡的运作方式下,这输入能用来改变或调整输出频率。

Pin 6 (重置锁定) – Pin 6重置锁定并使输出呈低态。当这个接脚的电压从1/3 VCC电压以下移至2/3 VCC以上时启动这个动作。

Pin 7 (放电) -这个接脚和主要的输出接脚有相同的电流输出能力,当Pin3为低电平时,Pin7对地为低阻态(对地导通),当Pin3为高电平时,Pin7对于为高阻态

Pin 8 (V +) -这是555计时器IC的正电源电压端。供应电压的范围是+4.5伏特(最小值)至+16伏特(最大值)。

NE555在蓝桥杯单片机省赛中只考过一次,是在第十届省赛中,要求使用NE555完成对Pinlv的测量和显示。如下图所示:

接下来我们要做的就是对第十届蓝桥杯省赛里关于频率测量这部分做一个单独的简单程序设计。

设计内容:

1.按照上图显示格式显示采集到的频率值显示在数码管上;

2.频率数据显示使用 6 位数码管,当显示的数据长度不足 6 位时,未使用到的数码管位应熄灭。

说明:频率测量功能需将竞赛板 J3-SIGNAL 引脚与 P34 引脚短接。频率大小调节通过板子上的RB3来实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<stc15f2k60s2.h>

#define uchar unsigned char   //定义无符号字符类型uchar
#define uint unsigned int     //定义无符号整型类型uint

uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x8e};//数字0~9,“-”,“关”,“F”
uchar yi,er,san,si,wu,liu,qi,ba;   //定义字符型变量yi,er,san,si,wu,liu,qi,ba,当作数码管显示控制变量

uint fan,fan_send,zheng,zheng_send,trie,pinlv,time;
bit flag=0;

void delayms(int ms);          //延时函数
void allinit();                //初始化函数
void display1(uchar yi,uchar er);   //第一、二段数码管函数
void display2(uchar san,uchar si);  //第三、四段数码管函数
void display3(uchar wu,uchar liu);  //第五、六段数码管函数
void display4(uchar qi,uchar ba);   //第七、八段数码管函数
void Timer0Init(void);		//5微秒@12.000MHz
void Timer1Init(void);		//1毫秒@12.000MHz
void Frequency();         //频率测量显示函数

void main()//主函数
{
	allinit();                  //初始化函数
	Timer0Init();
	Timer1Init();
	yi=1;er=2;san=3;si=4;wu=5;liu=6;qi=7;ba=8;//让数码管依次显示1~8,用来检验数码管显示函数程序是否有误
	while(1)
	{
		Frequency();              //频率测量显示函数
		display1(yi,er);          //第一、二段数码管函数
		display2(san,si);         //第三、四段数码管函数
		display3(wu,liu);         //第五、六段数码管函数
		display4(qi,ba);          //第七、八段数码管函数
	}
}
void Frequency()           //频率测量显示函数
{
	yi=12;er=11;san=11;
	if(pinlv>=10000){si=pinlv/10000;wu=pinlv%10000/1000;liu=pinlv%1000/100;qi=pinlv%100/10;ba=pinlv%10;}
	else if(pinlv>=1000){si=11;wu=pinlv/1000;liu=pinlv%1000/100;qi=pinlv%100/10;ba=pinlv%10;}
	else if(pinlv>=100){si=11;wu=11;liu=pinlv/100;qi=pinlv%100/10;ba=pinlv%10;}
	else if(pinlv>=10){si=11;wu=11;liu=11;qi=pinlv/10;ba=pinlv%10;}
}
void Timer0Init(void)		//5微秒@12.000MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0xC4;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	TF0 = 0;		//清除TF0标志
//	TR0 = 1;		//定时器0开始计时
}
void time0() interrupt 1
{
	if(P34==0)
	{
		fan++;
		if(flag==0)
		{
			flag=1;
			zheng_send=zheng;
			zheng=0;
		}
	}
	else if(P34==1)
	{
		zheng++;
		if(flag==1)
		{
			flag=0;
			fan_send=fan;
			fan=0;
		}
	}
}
void Timer1Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x40;		//定时器时钟1T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0x20;		//设置定时初值
	TH1 = 0xD1;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	EA=1;ET1=1;
}
void time1() interrupt 3
{
	trie++;
	if(trie==969)
	{
		TR0 = 1;ET0=1;
	}
	else if(trie==999)
	{
		TR0 = 0;ET0=0;
		trie=0;
		time=(zheng_send+fan_send)*5;
		pinlv=1000000/time;
	}
}
void delayms(int ms)//延时函数
{
	uint i,j;
	for(i=ms;i>0;i--)
		for(j=845;j>0;j--);
}
void allinit()//初始化函数
{
	P2=0XA0;P0=0X00;      //关闭蜂鸣器继电器
	P2=0X80;P0=0XFF;      //关闭所有LED灯
	
	P2=0XC0;P0=0XFF;      //选中所有数码管段选
	P2=0XFF;P0=0XFF;      //关闭所有数码管
}
void display1(uchar yi,uchar er)//第一、二段数码管函数
{
	P2=0XC0;P0=0X01;               //选中第一个数码管位选
	P2=0XFF;P0=tab[yi];            //让第一个数码管显示yi指向的值
	delayms(1);                    //延时1ms
	
	P2=0XC0;P0=0X02;               //选中第二个数码管位选
	P2=0XFF;P0=tab[er];            //让第一个数码管显示er指向的值
	delayms(1);	                   //延时1ms
}
void display2(uchar san,uchar si)//第三、四段数码管函数
{
	P2=0XC0;P0=0X04;               //选中第s三个数码管位选
	P2=0XFF;P0=tab[san];           //让第一个数码管显示san指向的值
	delayms(1);                    //延时1ms
	
	P2=0XC0;P0=0X08;               //选中第四个数码管位选
	P2=0XFF;P0=tab[si];            //让第一个数码管显示si指向的值
	delayms(1);	                   //延时1ms
}
void display3(uchar wu,uchar liu)//第五、六段数码管函数
{
	P2=0XC0;P0=0X10;               //选中第五个数码管位选
	P2=0XFF;P0=tab[wu];            //让第一个数码管显示wu指向的值
	delayms(1);                    //延时1ms
	
	P2=0XC0;P0=0X20;               //选中第六个数码管位选
	P2=0XFF;P0=tab[liu];           //让第一个数码管显示liu指向的值
	delayms(1);	                   //延时1ms
}
void display4(uchar qi,uchar ba)//第七、八段数码管函数
{
	P2=0XC0;P0=0X40;               //选中第七个数码管位选
	P2=0XFF;P0=tab[qi];            //让第一个数码管显示qi指向的值
	delayms(1);                    //延时1ms
	
	P2=0XC0;P0=0X80;               //选中第八个数码管位选
	P2=0XFF;P0=tab[ba];            //让第一个数码管显示ba指向的值
	delayms(1);                    //延时1ms          
}

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128745.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
蓝桥杯单片机必备知识—–(8)NE555测频
已经使用跳线帽将P34和NE555的输出端接在一起了,关乎NE555,有些许数电基础的都明白,NE555就是改变RB3,改变负载电阻,使其输出方波的频率发生改变,其中并不涉及任何对NE555的编程,当然你也没法对其编程。
全栈程序员站长
2021/04/15
1.3K0
蓝桥杯单片机NE555编程
蓝桥杯单片机中的NE555模块的编程,其实是很简单。简单来说就是计算一秒钟之内有多少个频率响应。中间所谓的频率响应也就是计算定时器作为计数器时候溢出的个数而已。能够考察的点就是这样子了,也要稍微了解,之后进行编程,就能够熟练掌握了。
全栈程序员站长
2021/11/15
6390
蓝桥杯单片机DS18B02温度测量(小数点显示)
DS18B02芯片可以说是在蓝桥杯中是极为常考的一个芯片模块了,熟练掌握是必须的。 简单说明一下吧:温度读取时候呢?首先读出的是温度的低八位,其次读出的是温度的高八位,组成一个16位的二进制值就是DS18B20测量到的温度值。16位中的高5位代表着温度值的正负,一般环境下就没有必要考虑了,因为我们身边的环境温度都是高于零度的啦。最低的4位呢是小数位,需要显示小数位的时候就需要进行处理,没有这方面的要求时候可以直接忽略了。
全栈程序员站长
2021/12/23
9340
蓝桥杯单片机必备知识—–(1)显示函数
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100132.html原文链接:
全栈程序员站长
2021/04/15
5700
单片机入门:数码管滚动显示
数码管从左到右依次滚动显示0~7,程序通过每次仅循环选通一只数码管! 仿真图如图所示: 程序如下: #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]= { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 }; void DelayMS(uint x) {
电子工程师成长日记
2022/07/21
1.4K1
单片机入门:数码管滚动显示
蓝桥杯单片机定时器1的编码以及数码管的动态显示
简单使用蓝桥杯单片机上面的定时器,进行设置一个简单的秒表吧,用于练手,同时熟练操作定时器的操作以及熟练数码管的动态显示,虽然简单,但是也两个知识点都是常考的,也是必须掌握的模块喔。
全栈程序员站长
2021/11/15
4150
4.10 51单片机-使用计数器测量NE555脉冲频率
STC90C51RC/RD+系列单片机内部设置的两个16位定时器/计数器T0和T1都具有计数方式和定时方式两种工作方式。对每个定时器/计数器(T0和T1),在特殊功能寄存器TMOD中都有一控制-C/T来选择T0或者T1为定时器还是计数器。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每12个时钟或者每6个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚(T0为P3.3,T1为P3.3),则为计数方式,每来一个脉冲加1。
DS小龙哥
2022/01/10
1.7K0
4.10 51单片机-使用计数器测量NE555脉冲频率
新概念51单片机C语言教程纠错(3)「建议收藏」
这一次错误在课本P140页例6.6.1中,这个例子在proteus仿真中再一次刷新了我的认知。
全栈程序员站长
2022/06/28
5450
蓝桥杯单片机必备知识—–(5)独立按键
1.放在while(1)一直扫描按键是否按下 2.放在中断中 中断一次扫描按键是否按下 注:大型项目会放在中断中进行,一直扫描会占用过多资源,如果参加比赛则可以在while中一直使用循环
全栈程序员站长
2021/04/15
5330
蓝桥杯单片机DS1302实时时间设计(时间暂停、启动设置)
蓝桥杯单片机DS1302时间设计,这也是蓝桥杯中常考的一个模块。对于DS1302的操作也是非常简单的,只需要简单记住控制写入以及读出的地址位便可,其余都是在调用官方提供的底层驱动代码,只要会调用就能够轻松编写出一个实时时钟了。
全栈程序员站长
2021/11/15
1.6K0
单片机从入门到送走.第一天下
本来应该搞点电子元件然后装模作样的看看你现象啥的,but,我就懒得弄了,直接调试就行。
云深无际
2022/02/09
2200
单片机从入门到送走.第一天下
蓝桥杯单片机必备知识—–(11)EEPROM
由于EPROM操作的不便,后来出的主板上BIOS ROM芯片大部分都采用EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程ROM)。EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,不必将资料全部洗掉才能写入,彻底摆脱了EPROM Eraser和编程器的束缚。EEPROM在写入数据时,仍要利用一定的编程电压,此时,只需用厂商提供的专用刷新程序就可以轻而易举地改写内容,所以,它属于双电压芯片。借助于EEPROM芯片的双电压特性,可以使BIOS具有良好的防毒功能,在升级时,把跳线开关打至“on”的位置,即给芯片加上相应的编程电压,就可以方便地升级;平时使用时,则把跳线开关打至“off”的位置,防止CIH类的病毒对BIOS芯片的非法修改。所以,仍有不少主板采用EEPROM作为BIOS芯片并作为自己主板的一大特色。 IIC.H添加
全栈程序员站长
2021/04/16
6510
蓝桥杯单片机必备知识—–(11)EEPROM
八路抢答器单片机c语言程序_八路抢答器单片机c语言程序
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
全栈程序员站长
2022/11/01
1K0
单片机led点阵显示程序_LED点阵
文件打包:链接: https://pan.baidu.com/s/1oHSAIY6qVA7qFFWUvMvJEA 密码: snyg
全栈程序员站长
2022/11/01
9430
蓝桥杯单片机必备知识—–(3)pcf8591–ADC
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100131.html原文链接:
全栈程序员站长
2021/04/15
6270
蓝桥杯单片机AT24C02芯片上电自启动编程「建议收藏」
蓝桥杯单片机AT24C02芯片上电自启动读取数据,写入数据的实现也是挺重要的一个模块,往年的考试就有考到过,下面就来解说一下具体的分析过程吧。
全栈程序员站长
2022/07/11
4690
蓝桥杯单片机必备知识—–(7)温度传感器整数和浮点数
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100139.html原文链接:
全栈程序员站长
2021/04/14
5360
51单片机的中断及其使用方法
比如说我正在厨房用煤气烧一壶水,这样就只能守在厨房里,苦苦等着水开——如果水溢出来浇灭了煤气,有可能就要发生一场灾难了。
緣來
2020/01/02
2.1K0
蓝桥杯单片机必备知识—–(9)超声波测距
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。 超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。 测距的公式表示为:L=C×T 式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。 超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量,虽然目前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。 由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。
全栈程序员站长
2021/04/16
8030
蓝桥杯单片机必备知识—–(9)超声波测距
蓝桥杯单片机必备知识—–(12)串口通讯
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100133.html原文链接:
全栈程序员站长
2021/04/15
8800
推荐阅读
相关推荐
蓝桥杯单片机必备知识—–(8)NE555测频
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档