资讯详情

蓝桥杯 01:蜂鸣器、继电器、LED的使用

前言

三月份报名参加蓝桥杯比赛,专门写博客记录学习。 

开发工具

开发板:CT107D 编译环境:Keil5

原理简介

以前学51单片机的时候,可以放置1(高电平)和0(低电平)LED、但是在CT107D 开发版也需要一些初始化

蜂鸣器原理图 :可知给 这个IO口置)蜂鸣器的使用可以完成。 再看 BUZZ 连接到单片机的那个 GPIO 口

清楚看见 BUZZ 连接在 P0^6 ,但是有一个(74)HC573)和 ULN2003 挡在中间. 我们使用蜂鸣器的想法是:

打开锁定器 P0^6(D7)控制Q7输入到IN7然后输出到OUT7端口即BUZZ端口。

如何打开锁存器呢?因为我们只需要控制我们只需要控制端口,即当,此时锁定器打开 电平受到影响 即:,若 ,则 电平状态不受影响影响,即等于上一个锁定器关闭时的电平状态。

我们现在需要给)端口置1(高电平)打开锁定器 再翻开发板原理图找: 74HC02 是非门电路,即 ,WR端口有跳线帽共地,WR为低电平。

(:代表非运算,0变1, 1变0; ||:或运算, 1 || 0 =1, 0 || 0 = 0;)

要使 ,即 , 所以 , 又因为, 所以

所以我们需要这样做 端口的电平为 低电平。

从原理图可以看出:的输出由高三位控制端口 翻阅74HC可以看到138译码器的芯片手册

A B C Y1 Y2…和原理图上的标号对应端口一致 X:不用在意 L: 低电平 H:高电平 不懂也没关系。我们去学长博客偷图: 可知P不同的电平排序代表不同的电平输出 我们想控制 为低电平, 即;P2口低五位电平不影响Y输出5低电平 。 我们的原理部分大致相同。 再理一下思路:

蜂鸣器程序代码

蜂鸣器部分:

sbit BEEP = P0^6;  //蜂鸣器接口   void BEPP_init() { 
          P2 = (P2&0X1F)| 0XA0;   // 1f , a0 均为16进制编码,可用计算器计算     /* 打开锁存器74HC573, P2上三位置为零(采用零位置和运算不改变下五位电平). 再使上三位等于1 0 1 (1使用或操作)控制Y5 */   BEEP = 0;   ///初始化,关闭蜂鸣器 } 

继电器

根据原理图,锁存器打开时 继电器由 P0^4 端口控制。 原理与蜂鸣器大致相同。

和蜂鸣器相同,同样是通过译码器使 Y5 = 0, 再经过非门操作打开锁存器

sbit RELAY = P0^4;  //继电器接口

void RELAY_init()
{ 
        
	P2 = (P2&0X1F)| 0XA0;  //原理一样,同样操控Y5
	RELAY = 0;  //初始化,关闭继电器

}

LED

原理图:在锁存器打开的情况下,P0口直接操控 LED灯,刚好都是八位。

和蜂鸣器不同的是,通过P2高三位操控译码器使 Y4 = 0, 再经过非门操作打开锁存器

void LED_init()
{ 
        
	P2 = (P2&0X1F) | 0X80; 
	/*打开锁存器74HC573, P2上三位置零(置零采用与运算不改变下五位电平) 再使上三位等于1 0 0 (置1采用或运算),操控Y4 */	
   
   
    P0 = 0XF0;  //初始化,点亮一半的灯

}

完整工程代码

#include <reg52.h>


sbit BEEP = P0^6;  //蜂鸣器接口
sbit RELAY = P0^4;  //继电器接口

void BEPP_init();  //蜂鸣器初始化
void LED_init();   //LED初始化
void delay(unsigned int m);  //简单的延时函数 
void RELAY_init();    //继电器初始化


void main()
{ 
        
	BEPP_init();  
	LED_init();
	while(1)
	{ 
        
		BEEP = 1;   
    delay(500);
		BEEP = 0;
    delay(500);
	}
}

void BEPP_init()
{ 
        
	P2 = (P2&0X1F)| 0XA0;    //打开锁存器74HC573, P2上三位置零(置零采用与运算不改变下五位电平),再使上三位等于1 0 1 (置1采用或运算),操控Y5
	BEEP = 0;   //初始化,关闭蜂鸣器
}

void RELAY_init()
{ 
        
	P2 = (P2&0X1F)| 0XA0;
	RELAY = 0;  //初始化,关闭继电器
}

void LED_init()
{ 
        
	P2 = (P2&0X1F) | 0X80;  //打开锁存器74HC573, P2上三位置零(置零采用与运算不改变下五位电平),再使上三位等于1 0 0 (置1采用或运算),操控Y4
	P0 = 0XF0;  //初始化,点亮奇数灯

}
void delay(unsigned int m)  //简单的延时函数
{ 
        
  unsigned int i;
	unsigned int j;
	for(i=0;i<m;i++)
		for(j=0;j<309;j++);
}

标签: j912中间继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台