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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 二、蜂鸣器与继电器的基本控制 -> 正文阅读

[嵌入式]二、蜂鸣器与继电器的基本控制

首先让8路LED指示灯闪烁3遍熄灭,接着依次点亮LED指示灯,继电器吸合一会后断开,然后依次熄灭LED指示灯,蜂鸣器鸣叫一会后关闭,程序循环实现上述功能。

目录

1、蜂鸣器与继电器电路

1、ULN2003(约等于放大倍数较大的三极管)

2、继电器

3、蜂鸣器

2、程序代码

1、自己写的:

2、标准代码


1、蜂鸣器与继电器电路

?WR低,Y5低-->Y5C高(或非,锁存器连通)

CBA = 101(选Y5)

1、ULN2003(约等于放大倍数较大的三极管)

? ? ?中间是非门!!

2、继电器

?N_RELAY接低(OUT5-->(非门)IN5-->Y5C)--->线圈通电,继电器吸合

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?OUT5低,IN5高,P04高(Y5C高)P0 = 0001 0000 = 0x10? ? ? ? ? ? ? ? ?

3、蜂鸣器

N_BUZZ接低(叫),IN7高,P06高?P0 = 0100 0000 = 0x40

2、程序代码

1、自己写的:

#include "reg52.h"

sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;//位定义

void Delay (unsigned int t)//延时函数
{
	while(t--);
	while(t--);
}

void BUZZER()//蜂鸣器
{
	HC138_C = 1;
	HC138_B = 0;
	HC138_A = 1;//选Y5
	
	P0 = 0x40;//P06高 = 0100 0000,蜂鸣器叫
	Delay(60000);
	Delay(60000);
	
	P0 = 0x00;//蜂鸣器关闭
}

void DIODE()//继电器
{
	HC138_C = 1;
	HC138_B = 0;
	HC138_A = 1;//选Y5,Y5C高 锁存器连通
	
	P0 = 0x10;//P04高 = 0001 0000,继电器吸合
	Delay(60000);
	Delay(60000);
	
	P0 = 0x00;//继电器断开
}

void LEDRunning()//灯
{
	unsigned char i;
	
	HC138_C = 1;
	HC138_B = 0;
	HC138_A = 0;//选Y4,Y4C高 锁存器连通
	
	for (i = 1; i <= 3; i++)//闪烁3遍
	{
		P0 = 0x00;//全亮
		Delay(60000);
		Delay(60000);
		
		P0 = 0xff;//全灭
		Delay(60000);
		Delay(60000);
	}
	
	for (i = 1; i <= 8; i++)//熄灭,接着依次点亮
	{
		P0 = 0xff << i;//全灭;位移一位,添一个0(亮),左移
		Delay(60000);
		Delay(60000);
	}
	
	DIODE();//继电器
	
	for (i = 1; i <= 8; i++)//依次熄灭
	{
		P0 = ~(0xff << i);
		Delay(60000);
		Delay(60000);
	}
	
	BUZZER();//蜂鸣器
	
}

void main()//主函数
{
	while(1)
	{
		LEDRunning();
	}
}

运行后存在问题:

1、初始时继电器和蜂鸣器都在运行(改进:写一个初始化系统函数,放在主函数中while之前)

2、继电器吸合并断开后,灯无法依次熄灭(被跳过),蜂鸣器叫,然后接着闪烁循环。

3、Y4、Y5的选择繁琐,需简化代码(switch)。

分析代码:

void DIODE()//继电器
{
	HC138_C = 1;
	HC138_B = 0;
	HC138_A = 1;//选Y5,Y5C高 锁存器连通
	
	P0 = 0x10;//P04高 = 0001 0000,继电器吸合
	Delay(60000);
	Delay(60000);
	
	P0 = 0x00;//继电器断开
}

//引用继电器之和的程序
    
    DIODE();//继电器
	
    	for (i = 1; i <= 8; i++)//依次熄灭
	    {
	    	P0 = ~(0xff << i);
	    	Delay(60000);
	    	Delay(60000);
	    }
	
	    BUZZER();//蜂鸣器

DIODE(继电器)函数引用后,CBA = 101(选Y5)

而灯依次熄灭则需要CBA = 100(选Y4)

2、标准代码

#include "reg52.h"

sbit HC138_A = P2^5;
sbit HC138_B = P2^6;
sbit HC138_C = P2^7;

void Delay(unsigned int t)//延时函数
{
	while(t--);
	while(t--);
}

void InitHC138(unsigned char n)//简化选择
{
	switch(n)
	{
		case 4:
			HC138_C = 1;
			HC138_B = 0;
			HC138_A = 0;//选Y4
		break;
		case 5:
			HC138_C = 1;
			HC138_B = 0;
			HC138_A = 1;//选Y5
		break;
		case 6:
			HC138_C = 1;
			HC138_B = 1;
			HC138_A = 0;//选Y6
		break;
		case 7:
			HC138_C = 1;
			HC138_B = 1;
			HC138_A = 1;//选Y7
		break;
	}
}

//void OutPutP0(unsigned char channel, unsigned char dat)简化
//{
//	InitHC138(channel);
//	P0 = dat;
//}

void InitSystem()//初始化系统(关闭继电器与蜂鸣器)
{
	InitHC138(5);//选Y5
	
	P0 = 0x00; //关闭继电器与蜂鸣器
}

void LEDRunning()
{
	unsigned char i;
	
	InitHC138(4);//选Y4 
	
//LED指示灯闪烁3遍	
	for(i = 0; i < 3; i++)
	{
		P0 = 0x00;//D1~8为低,LED点亮
		Delay(60000);
		Delay(60000);
		P0 = 0xff;//D1~8为高,LED熄灭
		Delay(60000);
		Delay(60000);
	}
	
//然后熄灭,接着依次点亮LED指示灯(i初始不能为0->移0位)
	for (i = 1; i <= 8; i++)
	{
		P0 = 0xff << i;//0xff:全灭(然后熄灭) 移1位,补充一个0(亮)
		Delay(60000);
		Delay(60000);
	}
	
//继电器吸合一会后断开
	InitHC138(5);//选Y5 CBA=101
	
	P0 = 0x10;//吸合,P04高-->P0=0001 0000=0x10
	Delay(60000);
	Delay(60000);
	P0 = 0x00;//断开
	
//选Y4!!!!!!!
	InitHC138(4);//选Y4:CBA = 100(C为高位);(Y4C得高)
	
//依次熄灭指示灯	
	for (i = 1; i <= 8; i++)
	{
		P0 = ~(0xff << i);//取反
		Delay(60000);
		Delay(60000);
	}
	
//蜂鸣器鸣叫一会后关闭
	InitHC138(5);//选Y5 CBA=101
	
	P0 = 0x40;//叫,P06高-->P0=0100 0000=0x40
	Delay(60000);
	Delay(60000);
	P0 = 0x00;//关闭
}

void main()//主函数
{
	InitSystem();
	while(1)
	{
		LEDRunning();
	}
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:45:17  更:2022-01-25 10:45:47 
 
开发: 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:22:58-

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