蓝桥杯单片机篇:NE555 频率测量

主要是配置定时器0为外部脉冲计数模式

main.c

#include "mycode.h"
unsigned char key_value=0,len=0;
unsigned short int t=0,m=0,w,i=0;
bit flag=0;
void main()
{
	SystemInit();
	Timer0Init();
	Timer1Init();
//	uart1();
	EA  = 1;
//	Init_time();
	while(1)
	{
		w=m;
		while(w)
		{
			len++;
			w/=10;
		}
		while(len)
		{
			display(8-len,m%((int)pow(10,len))/((int)pow(10,len-1)));
			len--;
		}
	}
}

void timer0() interrupt 1
{
	t++;
}
void timer1() interrupt 3
{
	i++;
	if(i>=500)
	{
		m=t*2;
		i=0;
		
		t=0;
	}
	
}

mycode.c

#include "mycode.h"
unsigned char code numb[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0xbf

};


unsigned char getkey(void)
{
	if(!s7)//
	{
		delay_ms(10);
		if(!s7)
		{
			while(!s7);
			return s7_press;
		}
	}
	if(!s6)//
	{
		delay_ms(10);
		if(!s6)
		{
			while(!s6);
			return s6_press;
		}
	}
	if(!s5)//
	{
		delay_ms(10);
		if(!s5)
		{
			while(!s5);
			return s5_press;
		}
	}
	if(!s4)//
	{
		delay_ms(10);
		if(!s4)
		{
			while(!s4);
			return s4_press;
		}
	}
	return 0;
}

void display(unsigned char x,unsigned char dat)
{
	HC138(7,0xff);
	HC138(6,1<<x);
	HC138(7,numb[dat]);
	delay_us(500);
}

char putchar(char c)
{
    SBUF=c;
		while(!TI);
		TI = 0;
    return c;
}

void Timer0Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x80;		//定时器时钟1T模式
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x04;		// 配置为P34脉冲引脚计数
	TL0 = 0xff;		//设置定时初始值
	TH0 = 0xff;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0 = 1;
}
void Timer1Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x40;		//定时器时钟1T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0x20;		//设置定时初始值
	TH1 = 0xD1;		//设置定时初始值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	ET1 = 1;
}
//系统初始化配置
void SystemInit(void)
{
	HC138(4,0xff);
	HC138(5,0x00);
	HC138(0,0x00);
}
void uart1(void)
{
		SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xC7;		//设置定时初始值
	TH1 = 0xFE;		//设置定时初始值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
	ES  = 1;
}
void delay_us(unsigned int t)		//@12.000MHz
{
	while(t--)
		{
	_nop_();
	_nop_();
	_nop_();
	_nop_();}
}

void delay_ms(unsigned int t)		//@12.000MHz
{
	unsigned char i, j;
	while(t--){
	i = 12;
	j = 169;
	do
	{
		while (--j);
	} while (--i);}
}

mycode.h

#ifndef __MYCODE_H__
#define __MYCODE_H__
#include <reg52.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <absacc.h>
#include <intrins.h>
#include "iic.h"
#include "onewire.h"
#include "ds1302.h"  

#define HC138(x,y)  {P2&=0x1f;P2|=(x<<5);P0=y;}
sfr AUXR  = 0x8e;
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;

#define s7_press 1
#define s6_press 2
#define s5_press 3
#define s4_press 4
void Timer0Init(void);		//1毫秒@12.000MHz
void Timer1Init(void);		//1毫秒@12.000MHz
unsigned char getkey(void);
void uart1(void);
void display(unsigned char x,unsigned char dat);
void SystemInit(void);
void delay_us(unsigned int t);		//@12.000MHz
void delay_ms(unsigned int t);		//@12.000MHz
#endif


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蓝桥杯是中国最大的IT技能竞赛之一,其中单片机部分常用的教程是关于NE555定时器的。NE555是一种常用的集成电路,广泛应用于电子电路中的定时和脉冲生成等功能。以下是关于NE555的教程内容: 1. NE555的基本原理:NE555是一种8引脚的集成电路,包含比较器、RS触发器和输出驱动器等功能。它可以通过外部元件连接来实现不同的定时和脉冲生成功能。 2. NE555的引脚功能: - 引脚1(GND):接地引脚,连接到电路的地线。 - 引脚2(TRIG):触发引脚,用于接收外部触发信号。 - 引脚3(OUT):输出引脚,输出NE555产生的脉冲信号。 - 引脚4(RESET):复位引脚,用于复位NE555。 - 引脚5(CTRL):控制引脚,用于控制NE555的工作模式。 - 引脚6(THR):比较器阈值引脚,用于设置比较器的阈值电平。 - 引脚7(DISCH):放电引脚,用于控制输出引脚的放电过程。 - 引脚8(VCC):电源引脚,连接到正电源。 3. NE555的工作模式: - 单稳态模式:NE555在接收到触发信号后,输出一个固定时间的脉冲信号。 - 双稳态模式:NE555在接收到触发信号后,输出一个持续时间取决于外部元件的脉冲信号。 - 震荡模式:NE555通过外部元件的连接,产生一定频率和占空比的方波信号。 4. NE555的应用: - 时钟电路:NE555可以用作时钟电路的计时元件,实现定时功能。 - 脉冲生成器:NE555可以用作脉冲信号的生成器,用于控制其他电路的工作。 - 呼吸灯效果:NE555可以通过改变占空比来实现呼吸灯效果。 - 频率测量NE555可以通过测量输出信号的频率来实现频率测量功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值