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

#include<stc15f2k60s2.h>#defineucharunsignedchar//定义无符号字符类型uchar#defineuintunsignedint//定义无符号整型类型uintucharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x8e};//数字0~9,“-”,“关”,“F”ucharyi,er,san,si,wu,…

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

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

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

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

主要特点:

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

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

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

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

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

引脚位:

        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的测量和显示。如下图所示:

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

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

设计内容:

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

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

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

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

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

#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          
}

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vimrc简易配置

    vimrc简易配置最近在练习写脚本,但格式老搞得我头疼,查了半天发现了vimrc;在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号、语法高亮度显示、智能缩进等功能。环境是centos7.6的系统直接修改即可vim~/.vimrc不过我的位置在另一个地方(估计是系统不一样吧)vim/etc/vimrcsetnu#显示行数syntaxenabl…

    2022年6月6日
    60
  • Spring Boot 2.x: 定时给对象发送天气

    Spring Boot 2.x: 定时给对象发送天气使用Java写一个定时给对象发送天气的功能前言技术栈快速创建实例pom.xml文件新建接收天气api的实体天气接口封装的天气api简单演示获取天气api与发送邮件的逻辑设置发送账号信息配置appliction.properties控制层启动类效果源码地址前言不知不觉,又到了雨季,你对象是不是经常忘记带伞呢,这个时候写一个自动定时发送邮件的程序,提醒她带伞,会不会对你崇拜有加呢,当然,如果你对象是一位攻城狮,当我没讲~技术栈SpringBoot2.3.1Jdk1.8Maven快速创

    2022年7月27日
    8
  • [计算机网络]交换机VLAN的作用和原理

    [计算机网络]交换机VLAN的作用和原理本节将讨论什么是交换机VLAN产生的原因,以及如何起作用的

    2022年8月10日
    7
  • STM32的NVIC和中断的总结「建议收藏」

    STM32的NVIC和中断的总结「建议收藏」前言:1.要想学习STM32中断,要先掌握STM32对优先级的定义;2.有51单片机开发经验会比较容易理解中断优先级;3.本篇博文基于STM32F103ZET6芯片和3.5.0标准库编写;4.本篇博文从寄存器入手,最终实现编程的步骤;如有不足之处,还请前辈多多指教;一基础知识1.cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断。(本博文只介绍

    2022年5月28日
    30
  • [LeetCode]Remove Duplicates from Sorted Array

    [LeetCode]Remove Duplicates from Sorted Array

    2022年1月27日
    41
  • 模型运营是做什么的(概念模型数据库)

    编者注:文中超链接如果不能访问可以点击“阅读原文”访问本文原页面;读者可以查看将于2019年9月23至26日在纽约举办的Strata数据大会上的议题——模型开发、管理和运…

    2022年4月17日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号