//晶振:12M
//实验方法:首先要把51hei单片机开发板上的ne555的方波输出信号J7的第一脚用杜邦线
//引入P3.2口,数码管即可显示ne555震荡电路当前的频率值,旋动PR1电位器可
//发现数字有变化.
//原理:1秒钟内计数外部脉冲个数,如计数1000次,则表示频率为1000Hz
//1秒钟定时采用51单片机定时器0实现,外部脉冲由外部中断0引脚接入
#include
#include"51hei.h"
#define uchar unsigned char
uchar counter1;
sbit duan=P2^6; //74HC573的LE端 U5 LED的段选端
sbit wei=P2^7; //74HC573的LE端 U4 LED的位选端
unsigned int counter2,tmp;
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 共阳型数码管0—9显示
unsigned int dis[6];
uchar con[]={0xfe,0xfd,0xfb,0xf7,0xef}; //共阳型数码管控制端
init();
delay(uchar);
display();
jishu();
void main()
{guandz();
init();
while(1)
{
jishu();
}
}
//定时器0和外部中断0的初始化
init()
{
EA=1;
EX0=1;
ET0=1;
IT0=1;
TMOD=0x01;
TH0=0x3c;
TL0=0xaf;
TR0=1;
}
//延时程序
delay(uchar x)
{
uchar a,b;
for(a=x;a>0;a--)
for(b=20;b>0;b--);
}
//外部中断0中断程序
void external0() interrupt 0
{
tmp++;
}
//定时器0中断程序
void timer0() interrupt 1
{
TH0=0x3c;
TL0=0xaf;
counter1++;
}
//显示程序
display()
{
uchar i;
dis[0]=counter2/10000; //获取计数值的万位
dis[5]=counter2%10000;
dis[1]=dis[5]/1000; // 获取计数值的千位
dis[5]=dis[5]%1000;
dis[2]=dis[5]/100; // 获取计数值的百位
dis[5]=dis[5]%100;
dis[3]=dis[5]/10; // 获取计数值的十位
dis[4]=dis[5]%10; // 获取计数值的个位
for(i=0;i<5;i++) //依次显示万、千、百、十、个位,动态显示
{
// P0=0xff;
P0=con[i];
wei=1;
wei=0;
P0=table[dis[i]];
duan=1;
duan=0;
delay(1);
P0=0;
duan=1;
duan=0;
}
}
jishu()
{
if(counter1==20) //定时器定时50ms,故20次中断就表示1秒钟到达
{
counter2=tmp;
display();
tmp=0;
counter1=0;
}
else
display();
}
关键字:51单片机 外部中断 测频率
引用地址:
用51单片机的外部中断来测频率
推荐阅读最新更新时间:2024-03-16 13:08
51单片机控制PWM信号实现直流电机转速控制的方法
设计中采用了专门的芯片组成了PWM信号的发生系统并且对PWM信号的原理、产生方法以及如何通过软件编程对PWM信号占空比进行调节从而控制其输入信号波形等均作了详细的阐述。另外本系统中使用了红外对管对直流电机的转速进行测量,经过整形电路后将测量值送到单片机,并且最终作为反馈值输入到单片机进行PID运算从而实现了对直流电机速度的控制。在软件方面,文章中详细介绍了PID运算程序初始化程序等的编写思路和具体的程序实现。 1 单片机最小系统:单片机最小系统由51单片机,晶振电路,复位电路,电源组成。大家都比较熟悉,这里不再赘述。 2 四位数码管显示:在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型
[单片机]
基于STM32单片机和51单片机的人体健康监测仪设计方案
近年来,随着生活节奏加快,工作压力加大,不健康的作息等原因,导致猝死的事件频发,心率情况是身体状态的直接表现,所以做好心率监测可以大大避免一些突发情况的发生。整理了电路城上8个心率监测的电路方案,工程师们不妨动动手,给自己一份健康监测,当然电路城上也还有很多心率监测相关的设计,可以进一步探索。 1、基于STM32单片机的人体健康监测仪设计-蓝牙-心率-ADXL345电路设计方案(原理图+源码) 本设计由STM32F103C8T6单片机核心板电路+蓝牙模块电路+DS18B20温度传感器电路+心率检测传感器电路+0.96寸OLED屏显示电路+ADXL345加速度传感器电路+按键电路+蜂鸣器报警电路组成。 1、开机后,OLE
[单片机]
51单片机玩转物联网基础篇05-控制继电器
前言 本节我们开始学习如何使用51单片机控制继电器,有了继电器,我们可以使用单片机输出的低电平控制高电平期间工作,比如继电器接到220V用电器上,可通过单片机智能控制用电器。 一、基础知识 1.继电器简介 继电器是具有隔离功能的自动开关元件,实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用,广泛应用于遥控、遥测、通讯、自动控制、机电一体化及电力电子设备中,是最重要的控制元件之一,继电器可以分为很多种,本实验使用光耦隔离继电器,实物图如下: 2.继电器控制原理 继电器原理图如下所示: 从上图可知,给继电器模块供电后,红色LED灯就会被点亮,当给IO引脚输入底电平后,单片
[单片机]
基于51单片机的跳一跳小游戏 源程序
这段时间学习了LCD12864的无字库使用方法,借此设计了一个单片机跳一跳小游戏 主要功能:控制火材人跳动,判断是否跳在地板上。 不多说直接上图: 仿真原理图如下 总电图图 游戏电路图: LED控制电路图: 蜂鸣器电路图: 总流程图: 游戏界面: 单片机源程序如下: #include main.h unsigned char BGM_choose=1; //人物,地板的信息 /* ***************************************************** */ extern unsigned char mosaic_j1 ; extern unsigned char mo
[单片机]
基于51单片机的简易电梯系统的设计
1系统概述 1.1设计要求 根据所学的知识以及技能,利用MCS-51系列单片机为中心设计一个简易电梯系统,实现四层电梯的无故障运行,并用数码管和指示灯显示对应楼层和运行方向等基本信息。设计所用的单片机为STC89C52为主要的控制器,自带AD转换,当一边有按键按下时,另一边以数字的形式在数码管上显示出相应的数字信息。 选择合适的芯片进行驱动电路的设计; 运行状态精确显示; 平层误差不超过±1cm。 总体设计 总的设计框图如图1-1所示,由单片机模块、矩形按键模块以及系统信息模块三个大模块构成,它们的作用分别为: 单片机模块:数据输入输出的处理。 矩形按键模块:通过按键,将相关信息送入单片机处理。 系统信息模块:用若干
[单片机]
51单片机基础之定时器中断(二)
TMOD寄存器: 这里讲一下TMOD寄存器,这个寄存器可以选择开启定时器0还是1,还有可以决定定时器以什么方式工作。如图: 代码: #include reg51.h sbit LED=P2^0; typedef unsigned char u8; typedef unsigned int u16; void time1_init(void) { TMOD|=0x10; //TMOD是一个寄存器,用来决定定时器的工作方式,高四位决定定时器1,目前是工作方式1,即16位定时计数。 TH1=0xfc; //定时器高八位 TL1=0x18; //定时器低
[单片机]
C51单片机定时器/计数器中断功能详细分析(一)
我们首先需要了解什么是中断? 中断是指CPU在执行某一过程中由于外界原因必须暂停现在的事情,处理别的事情,处理完了再回去执行暂停的事情。 中断的优点? 1.分时操作。 2.实时响应 3.可靠性高 中断中用到的寄存器: 中断优先级寄存器IP IP寄存器: 作用是选择优先级的,解决中断优先级问题。 PX0:外部中断0优先级设定位 PT0:定时/计数器T0优先级设定位 PX1:外部中断0优先级设定位 PT1:定时/计数器T1优先级设定位 PS :串行口优先级设定位 PT2:定时/计数器T2优先级设定位 中断允许寄存器IE IE寄存器: EX0:外部中断0允许位; E
[单片机]
51单片机红外遥控解码
红外遥控发射芯片采用PPM编码方式,当发射器按键按下后,将发射一组108ms的编码脉冲。遥控编码脉冲由前导码、8位用户码、8位用户码的反码、8位操作码以及8位操作码的反码组成。通过对用户码的检验,每个遥控器只能控制一个设备动作,这样可以有效地防止多个设备之间的干扰。编码后面还要有编码的反码,用来检验编码接收的正确性,防止误操作,增强系统的可靠性。前导码是一个遥控码的起始部分,由一个9ms的低电平(起始码)和一个4. 5ms的高电平(结果码)组成,作为接受数据的准备脉冲。以脉宽为0. 56ms、周期为1. 12ms的组合表示二进制的“0”;以脉宽为1. 68ms、周期为2. 24ms的组合表示二进制的“1”。如果按键按下超过108m
[工业控制]