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

  🍌
🍌🍌
作者简介:大家好啊,我叫DW,每天分享一些我新学到的知识,期待和大家一起进步
   🍋
 🍋🍋
 系列专栏:STM32
    🍎
  🍎🍎
🍎🍎🍎
 🍎小实验目标:利用38译码器驱动四位数码管🍎
 🍊如有写得不好的地方欢迎大家指正🍊

 🍊开发板:正点原子STM32F103Mini版🍊

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

1.译码器的基本概念

译码是编码的逆过程,它将输入的二进制码或BCD码“译成”相应的状态信息。实现这种功能的电路称为译码器。常用译码器有二进制译码器、二-十进制译码器和显示译码器等。译码器功能框图如下图所示:

当m=2^n时,称为二进制译码器,所以二进制译码器有n个输入端,2^n个输出端。译码器工作时,对于n变量的每一组输入代码,2^n个输出中仅有一个为有效电平,其余输出均为无效电平。常见的二进制译码器有2-4线译码器(74LS139)、3-8线译码器(74LS138)和4-16线译码器(74LS154)等等。本次使用使用的是74HC138N

STM32是一种基于ARM Cortex-M系列微控制器的嵌入式处理器平台,常用于工业控制、物联网设备等应用。要编写一个简单的三八(7段显示译码器)驱动程序,你需要遵循以下步骤: 1. **硬件连接**: - 将STM32的GPIO引脚连接到外部的七段显示码管,每个位对应一个LED和一个驱动电阻。 - 确定字输入引脚(例如PA0~PA3)作为译码信号,它们将通过组合来选择显示的字符。 2. **初始化GPIO**: - 配置相应的GPIO口为推挽输出模式,以便能直接驱动码管的LED。 3. **结构化程序**: - 创建一个函库,包含一组函用于生成7段显示对应的译码值,如`getSevenSegCode(char digit)`。 4. **实现译码逻辑**: - 编写一个主循环,接收用户输入的ASCII字符,将其转换为0-15的编码值,然后计算对应的7段显示代码。比如,A=0x3F,B=0x06等。 ```c uint8_t sevenSegCodes[] = { // 字0-9和一些特殊字符的7段显示代码 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; ``` 5. **驱动码管**: - 使用生成的7段显示代码,逐位设置GPIO输出,点亮相应的LED。 ```c void togglePin(GPIO_TypeDef* GPIOx, uint16_t Pin) { GPIOx->ODR ^= (1 << Pin); } void displayDigit(uint8_t digitCode) { for (int i = 0; i < 7; i++) { if (digitCode & (1 << i)) { togglePin(GPIOA, i); // 组索引映射到GPIO引脚位置 } } } ``` 6. **主循环和用户输入**: - 在无限循环中读取用户输入,解码并显示结果。 ```c while (1) { char userInput = ... // 用户输入获取 uint8_t decodedCode = getSevenSegCode(userInput); displayDigit(decodedCode); } ``` 记得处理中断和同步,特别是如果需要处理按键输入的话,并添加适当的错误检查。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

依点_DW

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

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

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

打赏作者

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

抵扣说明:

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

余额充值