蓝桥杯单片机选择器和锁存器

选择器:

首先我们需要知道选择器控制是怎么控制的锁存器

在原理图的右边,可以看到有一个74HC138的选择器,通过P25,P26,P27来间接的控制Y7C,Y6C,Y5C,Y4C

锁存器:

锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题。

Y4C的主要功能:控制LED。

Y7C的主要功能:控制数码管。

Y6C的主要功能:控制数码管的位选。

Y5C的主要功能:控制蜂鸣器和LED10。

以上所有的选择器在选着之后都可以通过位操作来控制,比如说说今年的国赛里面让MOTOR输出一个脉冲,我们就可以先选着Y5C之后,通过控制P0^6在指定IO。

代码分享:

这个代码完美解决了,数码管和LED同时在工作的时候导致的双方的出现错误。

void Set_HC573(unsigned char channel, unsigned char dat)
{
  P0 = dat;                      //待设置数据
  switch(channel)                //选通锁存器
  {
    case 4:
      P2 = (P2 & 0x1f) | 0x80;  //Y4输出0,LED控制
    break;
    case 5:
      P2 = (P2 & 0x1f) | 0xa0;  //Y5输出0,蜂鸣器和继电器控制
    break;
    case 6:
      P2 = (P2 & 0x1f) | 0xc0;  //Y6输出0,数码管位选
    break;
    case 7:
      P2 = (P2 & 0x1f) | 0xe0;  //Y7输出0,数码管段码
    break;
    case 0:
      P2 = (P2 & 0x1f) | 0x00;  //所有锁存器不选择
    break;
  }
  P2 = (P2 & 0x1f) | 0x00;      //设置完成,关闭所有锁存器
}

实战代码:

硬件初始化:

 关闭LED,SMG,BUZZ

void DisplaySMG_All(unsigned char value)
{
  Set_HC573(6, 0xff);    //使能所有数码管
  Set_HC573(7, value);  //数码管显示内容  
}

void Hardware_init()
{
  Set_HC573(0, 0x00);        //关闭所有锁存器
  Set_HC573(5, 0x00);        //关闭蜂鸣器和继电器
  Set_HC573(4, 0xff);        //关闭全部LED灯
  DisplaySMG_All(0xff);      //关闭全部数码管
}

 数码管的动态显示:

通过调用DisplaySMG_Bit(0,0xef);控制第一位所需要显示的数字或字母.

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

void DisplaySMG_Bit(unsigned char pos, unsigned char value){  Set_HC573(6, 0x01 << pos);    //数码管的段位  Set_HC573(7, value);          //数码管显示内
  delay(300);  Set_HC573(6, 0x01 << pos);          Set_HC573(7, 0xff);            //消隐}

 可以通过如下工具来计算出value所需要的段码

 

 0~9段码:

unsigned char code smg_duanma[]={0xC0,0xF9,0xA4,0xB0,
                    0x99,0x92,0x82,0xF8,0x80,0x90};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chen_kng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值