【蓝桥杯单片机】一、基本器件的操作

1、M74HC573M1R锁存器基本介绍

跟其他开发板不同的,这块开发板控制数码管、LED、蜂鸣器和继电器的是锁存器和P0。所以在学习之前我们先介绍一下锁存器相关的概念。

1.1、RS锁存器(RS latch)

在这里插入图片描述
真值表:

R(赋零)S(置)Q解释
00Q保持
011
100
11X不允许这种情况

1.2、D锁存器(D latch)

原理图:
在这里插入图片描述
EN= 0时,输出状态保持不变。(锁住)
EN =1时,输出随输入状态而改变。当D=0,Q=0,当D=1,Q=1 。

1.3、M74HC573M1R

在这里插入图片描述

74HC573的八个锁存器都是透明的D型锁存器.当使能 (LE)为高 时,Q输出将 随数据(D)输入而变。当使能 (LE)为低时,输出将锁存在已建立的数据电平上。
74hc573的OE引脚在使用时 通常与GND连接在一起,通过LE来选择锁存器的锁存与使用状态。

1.4、应用(以LED灯为例)

原理图:
在这里插入图片描述
LE决定是否能透过去改变灯亮灭的状态,即Y4C决定(1透0不透)所以这里我们提出疑问Y4C如何控制 ?
Y4控制Y4C
在这里插入图片描述
内部逻辑图:在这里插入图片描述
WR通过这个跳线帽默认相当于接地,再通过一个或非门对于Y4C没有影响

在这里插入图片描述
所以Y4CY4控制 ,它们两个是相反的关系。那么Y4又如何控制呢?
74HC138译码器控制Y4
在这里插入图片描述
在这里插入图片描述
被选中的Y为0其他的都为1。
在这里插入图片描述
总结:Y4CY4控制并且相反所以Y4C被选中时为1,即可以透过相应的锁存器改变值,没选选中的就被锁存器锁住,不能改变相应的值。可以得出结论可以通过P25 P26 P27 选择相应的锁存器工作状态。

1.5、锁存器操作总结

这张表需要背下来:

功能YP27P26P25对应十六进制值
LEDY41000X80
数码管-位选Y61100XC0
数码管-段选Y71110XE0
外设(继电器、蜂鸣器)Y51010XA0
关闭0000X00

1.6、 锁存器打开关闭代码

在蓝桥杯单片机实训板上操作上述4个外设必须满足两个条件:

  1. 锁存器选通控制某个外设的通道
  2. P0被赋予相应的值。
    操作顺序:对P0赋值->打开锁存器->关闭锁存器
    方法一:
	P0=0XFF; //关闭所有LED灯
	P2=0X80; //打开锁存器控制LED灯
	P2=0; //关闭锁存器

方法二(严谨写法):

  P0=0xFF; //准备的数据
  P2=P2 & 0x1F | 0x80;//选择的锁存器
  /*
  解释:&0x1F : & 0001 1111 将前三位清0其他未不变 
       (&有0为0常用来位清零 需要清零位为0其他不变位为1)
        |0x80 : | 1000 0000 将第一位置1其他未不变 
       (1有1为1常用来位置1 需要置1位为1其他不变位为0)
  */
  P2 &= 0x1F; //关闭锁存器

2、LED灯

2.1、LED灯怎么才能发光?

满足如图所示阳极为1阴极为0即可(具体原理可以百度搜索)
LED灯怎么才能发光?
而开发板上的LED是共阳极,所以对应IO口为低电平时候LED灯才能点亮。

2.2、LED灯操作封装成函数

led显示函数

void Led_Disp(unsigned char ucLed)
{
	P0 = (~ucLed);
	P2 = P2 & 0X1F | 0x80;//led
	P2 &= 0X1F;
}

led处理函数

void	Led_Proc(void)
{
	if(Led_Slow_Down) return;
	Led_Slow_Down = 1;
 //具体实现逻辑
}

//定时器中加入
	Led_Disp(ucLed);//用于LED显示

2.3、LED灯操作练习

习题:对于LED灯L1~L8起始让奇数灯点亮偶数灯熄灭,1s后奇数灯熄灭偶数灯点亮。

#include <STC15F2K60S2.H>


void Delayms(int ms)		//@12.000MHz
{
	unsigned char i, j;
  while(ms--)
  {
    i = 12;
    j = 169;
    do
    {
      while (--j);
    } while (--i);
  }
}

void main()
{
  //关闭LED,蜂鸣器,继电器
  P0=0xff;
  P2=0x80;
  P2=0x00;
  
  P0=0x00;
  P2=0xa0;
  P2=0x00;
  
  while(1)
  {
    P00=0;
    P01=1;
    P02=0;
    P03=1;
    P04=0;
    P05=1;
    P06=0;
    P07=1;
    P2=0x80;
    P2=0x00;
    Delayms(1000);
    P00=1;
    P01=0;
    P02=1;
    P03=0;
    P04=1;
    P05=0;
    P06=1;
    P07=0;
    P2=0x80;
    P2=0x00;
    Delayms(1000);
  }

}

3、蜂鸣器

3.1、蜂鸣器怎么才能发声?

在这里插入图片描述
在这里插入图片描述

3.2、蜂鸣器操作练习

习题:让蜂鸣器每隔1s响一次。

#include <STC15F2K60S2.H>

void Delayms(int ms)		//@12.000MHz
{
	unsigned char i, j;
  while(ms--)
  {
    i = 12;
    j = 169;
    do
    {
      while (--j);
    } while (--i);
  }
}

void main()
{
  //关闭LED,蜂鸣器,继电器
  P0=0xff;
  P2=0x80;
  P2=0x00;
  
  P0=0x00;
  P2=0xa0;
  P2=0x00;
  
  while(1)
  {
    P06=1;
    P2=0xa0;
    P2=0x00;
    Delayms(1000);
    P06=0;
    P2=0xa0;
    P2=0x00;
    Delayms(1000);
  }

}

4、继电器

4.1、继电器如何使L10点亮?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.1、继电器操作练习

习题:继电器吸合一秒后关闭一直循环下去

#include <STC15F2K60S2.H>


void Delayms(int ms)		//@12.000MHz
{
	unsigned char i, j;
  while(ms--)
  {
    i = 12;
    j = 169;
    do
    {
      while (--j);
    } while (--i);
  }
}

void main()
{
  //关闭LED,蜂鸣器,继电器
  P0=0xff;
  P2=0x80;
  P2=0x00;
  
  P0=0x00;
  P2=0xa0;
  P2=0x00;
  
  while(1)
  {
    P04=1;
    P2=0xa0;
    P2=0x00;
    Delayms(1000);
    P04=0;
    P2=0xa0;
    P2=0x00;
    Delayms(1000);
  }

}

附:常用模板(一)

主函数

void main()
{
  //关闭外设
  P0=0xff;
  P2=0x80;
  P2=0x00;
  
  P0=0x00;
  P2=0xa0;
  P2=0x00;
  

  while(1)
  {

  }

}

delay

void Delayms(int ms)		//@12.000MHz
{
	unsigned char i, j;
  while(ms--)
  {
    i = 12;
    j = 169;
    do
    {
      while (--j);
    } while (--i);
  }
}

注释模板(考试用不上,但以后写工程养成好习惯)

/**
  * @brief  这里写简介
  * @param  输入参数
  * @retval 返回值
  */

常用简短定义

typedef unsigned char uchar;
typedef unsigned int uint;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值