栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

选择器:

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

在原理图的右边,可以看到有一个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段码:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982838.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号