目录
一、电路原理分析
图1 LED灯电原理图路
图2 蜂鸣器、继电器控制原理图
从图1、图2中可知,LED灯、蜂鸣器、继电器的控制与数码管的控制过程类似,都是通过P0口输出信息,通过由74HC138译码控制U6、U9锁存器,使被控对象工作。
从图1知,P0口输出低电平灯亮,高电平灯灭。74HC138的Y4控制锁存。
从图2知,U9输出通过ULN2003驱动控制蜂鸣器、继电器,由于ULN2003内部的达林顿管输入/输出是反向的,图中的蜂鸣器、继电器一端已经接电源VCC,所以P0口输出高电平使蜂鸣器鸣响(继电器吸合),P0口输出高电平停止蜂鸣器鸣响(继电器释放)。具体控制过程分别是:P0.4引脚信息控制继电器,P0.6引脚信息控制蜂鸣器。74HC138的Y5控制锁存。
二、程序设计
LED灯、蜂鸣器、继电器控制资源与数码管显示电路控制资源完全相同,P0口输出控制信息,P2.5~P2.7控制74HC138译码信息控制74HC573锁存器,所以,将它们的控制程序插在数码管显示程序的后面(也可以编写子函数在主函数中调用)。
1、LED灯程序设计
LED灯以L1为例,定义LED灯信息变量和亮灭标志变量,用S7键进行亮灭控制。
(1)变量定义
unsigned char Lamp=0xff;//灯初始信息全灭
bit L1_LM=0; //1--亮 0--灭
(2)数码管程序中添加部分
if(L1_LM)Lamp=Lamp&0xfe; //1亮 L1对应位清0
else Lamp=Lamp|0x01; //0灭 L1对应位置1
P0=Lamp; //灯信息
hc138(4); //输出
hc138(0); //锁存
(3)S7键功能
L1_LM=!L1_LM; //L1亮灭标志取反
// Led1++; //原功能
// if(Led1==10)Led1=0; //原功能
2、蜂鸣器、继电器程序设计
蜂鸣器用S6键控制,继电器用S5键控制。
(1)变量定义
unsigned char BR_data=0x00; //蜂鸣器、继电器初始不动作
bit Buzz=0; //1--鸣响 0--停止 蜂鸣器标志位
bit Relay=0; //1--吸合 0--断开 继电器标志位
(2)数码管程序中添加部分
//蜂鸣器、继电器控制
if(Buzz)BR_data=BR_data|0x40; //1鸣响 对应位置1
else BR_data=BR_data&0xbf; //0停止 对应位清0
if(Relay)BR_data=BR_data|0x10; //1吸合 对应位置1
else BR_data=BR_data&0xef; //0断开 对应位清0
P0=BR_data; //蜂鸣器继电器控制信息
hc138(5); //输出
hc138(0); //锁存
(3)S6键功能
Buzz=!Buzz; //蜂鸣器标志位取反
// Led1++; //原功能
// if(Led1==10)Led1=0; //原功能
(4)S5键功能
Relay=!Relay; //继电器标志位取反
// Led1++; //原功能
// if(Led1==10)Led1=0; //原功能
https://download.csdn.net/download/weikangcekong/89310811?spm=1001.2014.3001.5503