IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 十八、555定时器与频率测量 -> 正文阅读

[嵌入式]十八、555定时器与频率测量

利用NE555产生方波信号测量其频率,要求如下:

①上电开机运行时,关闭蜂鸣器、继电器、8个LED指示灯。

②用跳线帽将J3中的NAL与P34短接NE555发生的信号输入到单片机的P34(定时器0)引脚。

单片机测量信号频率,并显示在数码管中,频率数据显示用5位数码管单位是Hz,当显示长度不足5位时,未使用到的数码管熄灭,在最左边的1位数码管用“F”作为提示符。

用两个定时器:

T0定时器计数:1S计数多少次 => 频率(在单位时间内完成周期性变化的次数叫做频率)

T1定时器定时:1S

#include "reg52.h"

unsigned char code SMG_duanma[18] = {
	//  0   1    2    3    4    5    6    7
		0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
	//  8   9    A10  B11  C12  D13  E14  F15
		0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,
	// -16  .17
		0xbf,0x7f};  //共阳数码管

unsigned char Hz = 0;		
		
void InitHC138(unsigned char n)
{
	switch(n)
	{
		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;
	}
}

//****************************************************************************
void Init_Timer()
{
	TMOD = 0x16;//查手册
	
//定时器0:用作计数(8位重装模式)
	TH0 = 0xff;
	TL0 = 0xff;
	ET0 = 1;
	TR0 = 1;
	
//定时器1:用作定时(1Hz:1s一个频率;1s = 1000ms = 20*50ms)	
	TH1 = (65535 - 50000 + 1) / 256;
	TL1 = (65535 - 50000 + 1) % 256;//+1:有1us的误差
	ET1 = 1;
	TR1 = 1;
	
	EA = 1;//打开总中断
}

unsigned int count_Hz = 0;//计算频率(又要计算下一秒的频率)
unsigned int dat_Hz = 0;//缓存上一秒的频率
unsigned char count = 0;//1s

void ServiceTimer0() interrupt 1//定时器0中断服务函数(计数)
{
	count_Hz++;
}

void ServiceTimer1() interrupt 3//定时器1中断服务函数(定时)
{
	TH1 = (65535 - 50000 + 1) / 256;
	TL1 = (65535 - 50000 + 1) % 256;//无自动重装
	
	count++;
	if (count == 20)//1s
	{
		dat_Hz = count_Hz;//1s时间到,把计算出的频率取出来
		count_Hz = 0;//清零,计算下一秒频率
		count = 0;
	}
}

//****************************************************************************

void InitSystem()//初始化系统
{
	InitHC138(4);//关LED
	P0 = 0xff;
	InitHC138(5);//关闭蜂鸣器、继电器
	P0 = 0x00;
}

void SMG_Bit(unsigned pos, unsigned char dat)
{
	InitHC138(7);
	P0 = 0xff;//消影
	InitHC138(6);
	P0 = 0x01 << pos;
	InitHC138(7);
	P0 = dat;
}

void DelaySMG(unsigned int t)
{
	while(t--);
}

//12345
//个位:12345 % 10 = 1234.5 = 5
//十位:12345 / 10 = 1234.5 = 1234 % 10 = 123.4 = 4
//百位:12345 / 100 = 123.45 = 123 % 10 = 12.3 = 3
//千位:12345 / 1000 = 12.345 = 12 % 10 = 1.2 = 2
//万位:12345 / 10000 = 1.2345 = 1
void ShowSMG()//数码管动态显示频率
{
	SMG_Bit(7,SMG_duanma[dat_Hz%10]);//个位1
	DelaySMG(500);
	if (dat_Hz > 9)//9 => 9 / 10 = 0.9 = 0 % 10 = 0
	{
		SMG_Bit(6,SMG_duanma[(dat_Hz/10)%10]);//十2(12 / 10 = 1.2 = 1 % 10 = 0.1 = 1)
		DelaySMG(500);
	}
	if (dat_Hz > 99)
	{
		SMG_Bit(5,SMG_duanma[(dat_Hz/100)%10]);//百3
		DelaySMG(500);
	}
	if (dat_Hz > 999)
	{
		SMG_Bit(4,SMG_duanma[(dat_Hz/1000)%10]);//千4
		DelaySMG(500);
	}
	if (dat_Hz > 9999)
	{
		SMG_Bit(3,SMG_duanma[dat_Hz/10000]);//万5
		DelaySMG(500);
	}
	
	SMG_Bit(2,0xff);//不显示
	DelaySMG(500);
	SMG_Bit(1,0xff);//不显示
	DelaySMG(500);
	if (dat_Hz < 10000)
	{
		SMG_Bit(0,SMG_duanma[15]);//“F”提示符
		DelaySMG(500);
	}
}

void main()
{
	InitSystem();
	Init_Timer();
	while(1)
	{
		ShowSMG();
	}
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:51:48  更:2022-02-09 20:53:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:48:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码