资讯详情

14.[STM32]数电学了三八译码器一脸懵,一文带你从理论到实践

?? ??? 大家好,我叫你。DW,每天分享一些我学到的新知识,期待和大家一起进步 ?? ??? 系列专栏:STM32 ?? ??? ??? ??小实验目标:用38译码器驱动四位数字管 ??如果你写得不好,欢迎你纠正。

??开发板:正原子STM32F103Mini版??

??38译码器芯片:SN74HC138N?? 2022年5月5日创作时间

1.译码器的基本概念

实现此功能的电路称为译码器。常用的译码器包括二进制译码器、二进制译码器和显示译码器。如下图所示:

当m=2^n称为二进制码器,因此二进制码器有n个输入端,2^n个输出端。译码器工作时,每组输入n变量代码,2^n只有一个输出是有效电平,其余输出是无效电平。常见的二进制译器有2-4线译码器(74LS139)、3-8线译码器(74LS4-16线译码器(74)LS154)等等。这次使用的是74HC138N译码器。逻辑图如下图所示:

从真值表可以看出,

2. 代码编写

在上节课上,单位数码管可以通过稍加修改点亮四位数码管。13.[STM32]从原理出发,带您驱动单位数码管

#define A0 GPIO_Pin_0 #define A1 GPIO_Pin_1 #define A2 GPIO_Pin_2 #define E3 GPIO_Pin_3 #define CMD_PROT GPIOA  ///电平配置 #define A0_High  GPIO_SetBits(CMD_PROT,A0) #define A0_Low   GPIO_ResetBits(CMD_PROT,A0)  #define A1_High  GPIO_SetBits(CMD_PROT,A1) #define A1_Low   GPIO_ResetBits(CMD_PROT,A1)  #define A2_High  GPIO_SetBits(CMD_PROT,A2) #define A2_Low   GPIO_ResetBits(CMD_PROT,A2)  #define E3_High  GPIO_SetBits(CMD_PROT,E3) #define E3_Low   GPIO_ResetBits(CMD_PROT,E3)

下一步是编写一个选择哪个数字管点亮的函数,从38译码器真值表可以知道,

void DW_Smg_Dispaly(u8 num){    u8 code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-F      switch(num)  {   //000  选择第一个数码管 Y0非 输出低电平         ///第一个数字管显示0   case 0:   A2_Low;   A1_Low;   A0_Low;   GPIO_Write(Smg_PROT,0x00);//清屏减少鬼影     E3_High;   GPIO_Write(Smg_PROT,code[0]);   break;      //001 选择第二个数码管 Y1非  输出低电平         // 第二个数字管显示1   case 1:   A2_Low;   A1_Low;   A0_High;   GPIO_Write(Smg_PROT,0x00);   E3_High;   GPIO_Write(Smg_PROT,code[1]);   break;      //Y2 非     case 2:   A2_Low;   A1_High;   A0_Low;   GPIO_Write(Smg_PROT,0x00);   E3_High;   GPIO_Write(Smg_PROT,code[2]);   break;      case 3:   A2_Low;   A1_High;   A0_High;   GPIO_Write(Smg_PROT,0x00);   E3_High;   GPIO_Write(Smg_PROT,code[3]);   break;      default:   break;    }  delay_ms(1);   } 

最后编写main.c函数可以显示我们想要的数据

//main.c #include "sys.h" #include "delay.h" #include "usart.h" #include "DW_Smg.h"     int main(void)  {       delay_init();       //延迟函数初始化     DW_Smg_UserConfig();     while(1){      for(u8 i=0;i<4;i  )   {        DW_Smg_Dispaly(i);       }  }  } 

好了,一起来看结果吧!

用的线比较多,接线时一定要多检查几次。

今天的分享到此为止。感谢您耐心阅读。如果你觉得有用,给你一个

??????

参考资料: 1.STM32固件库手册 2.正点原子STM32不完全手册_库函数版本 3.参考视频 4.数字电子技术基础

数据已上传,需要自取

标签: 集成电路sn74ls164n

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

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