目录

  • 1、74HC595电路
    • 引脚功能
    • 电路连接
      • 级联
  • 2、按键矩阵原理
  • 3、扫描驱动程序
    • 引脚初始化
    • 输出设置
    • 扫描读取
  • 3、参考资料
  • 资料获取

.

1、74HC595电路

引脚功能

管脚序号 符号 管脚功能
10 SCLR‾\overline{SCLR}SCLR 复位端(低电平有效)
11 SCK 数据输入时钟端,上升沿移位
12 RCK 输出存储器锁存时钟端(下降沿,输出状态保持不变;上升沿,8 位锁存移位寄存器中的状态值并行输出)
13 G‾\overline{G}G 输出使能端,为低电平使,输出选通;为高电平时,输出高阻态
14 SER 串行数据输入端
15、1~7 Q0~Q7 八位数据并行输出端
9 Q7` 串行数据输出端
8 GND 电源地
16 Vcc 电源端

不同原理图对74HC595引脚符号的标注不同,但对应引脚的功能都是相同的。

.

电路连接


将输出使能引脚 G# 下拉,使之可以输出数据。
复位引脚 SCLR# 上拉,不需要进行复位。
ESP32的GPI/O33连接 数据输入端 SER ,输出串行数据。
ESP32的GPI/O26连接 数据输入时钟端 SCK ,产生发送数据时需要的时钟。
ESP32的GPI/O27连接 锁存寄存器时钟端 RCK ,控制数据输出状态的保持。

级联


级联方法
需要将其中一个595的串行数据输出引脚连接到另一个的数据输入引脚上。
两个595芯片的数据时钟引脚,锁存器引脚分别连接到相同的单片机控制引脚。

数据写入
先写入的数据往后移,例如输入 0000 0000 0000 0101 ,若是从低位开始输入,则第一个数据应该是1,第二个是0,第三个是1,第四个是0,第五个是0,…
输入完成后对 RCK引脚发送一个上升沿,然后发送一个下降沿,使其输出的引脚状态保持。
OUT_0~OUT15的状态应为:0000 0000 0000 0101

.

.

在键盘的原理图设计时,为了在编程时方便写按键扫描驱动,将输出的位置对调了一下,即OUT_0设为OUT_15,OUT_1设为OUT_14,其余部分也是如此。

.

.

2、按键矩阵原理


以上为部分按键矩阵,通过二极管的单向导通特性实现按键放冲突(所有按键同时按下也不会高低电平直接连接)。

.

扫描方法
初始化:
74HC595芯片引脚全部输出低电平,即OUT0~OUT13全为低电平,
5个输入引脚设置为下拉输入。
扫描:
扫描时仅将其中一个的输出状态设为1,其余设为0,然后读取5个输入引脚的状态。
反复上述步骤13次即可扫描一遍键盘状态。

.

.

.

3、扫描驱动程序

引脚初始化

引脚初始化函数为 void pin_init();

输出设置

驱动程序 void write_hc595(uint8_t loc)
将 OUT_loc 设定为1,其余为0。

void write_hc595(uint8_t loc)
{//将锁存时钟引脚置低//原来为高电平,此时为低电平,产生下降沿//保持原来的数据状态,防止在写入新数据时输出引脚也随着新数据变化digitalWrite(STC_PIN, LOW);for (uint8_t j = 0; j < 16; j++){//将时钟引脚置低,//原来为高电平,此时为低电平,产生下降沿digitalWrite(SHC_PIN, LOW);//如果当前数据位需要置1if (j == loc){digitalWrite(OUT_PIN, HIGH);//数据引脚拉高,写入1}else//否则置0。{digitalWrite(OUT_PIN, LOW);//数据引脚拉低,写入0}digitalWrite(SHC_PIN, HIGH);//将时钟引脚置高,//原来为低电平,此时为高电平,产生上升沿,写入的数据向后移,并将数据引脚的状态保存。}//将锁存时钟引脚置高//原来为低电平,此时为高电平,产生上升沿//将8位锁存移位寄存器中保存的的状态值并行输出digitalWrite(STC_PIN, HIGH);delayMicroseconds(1); //此处需要延迟1us,保证输出状态稳定
}

扫描读取

示例

 pin_init();  //引脚初始化iir_begin(); //开启IIR滤波uint8_t IN_P[5] = {IN0, IN1, IN2, IN3, IN4};uint8_t KEY_STATE[KEYBOARD_ROW][KEYBOARD_COLUMN] = {};for (;;){//如果允许键盘读取get_scan_keyboard()返回1,否则返回0if (get_scan_keyboard() == 1){//逐列扫描for (int i = 0; i < KEYBOARD_ROW; i++){//逐行读取for (int j = 0; j < KEYBOARD_COLUMN; j++){//将对应列置1,其余列置0。write_hc595(j);//读取对应行的输入引脚状态KEY_STATE[i][j] = digitalRead(IN_P[i]);}}//由于回车键单独使用一个GPI/O引脚检测,所以KEY_STATE[ENTER_X][ENTER_Y] = !digitalRead(ENTER_PIN);//将扫描得出的状态写入队列,提供给其他任务读取。xQueueOverwrite(KEYBOARD_SATE_QUEUE, &KEY_STATE);}}

.

.

3、参考资料

1、百度百科 74HC595
https://baike.baidu.com/item/74HC595/9886491?fr=aladdin

.

.

资料获取

全部工程文件进ESP32工程群(483217976)自行下载,所有文件在 ESP32键盘 目录下。

原理篇2、按键扫描电路与驱动程序相关推荐

  1. TM1650和AIP650 按键扫描、LED驱动程序

    摘要:按键扫描.LED驱动二合一 TM1650和AIP650两款芯片 拥有LED驱动显示以及按键扫描的功能.并且在使用上可以随意替换,驱动程序也是同一个. 驱动程序:需要自行修改init函数: 按键获 ...

  2. 以STC的单片机为例A/D做按键扫描应用原理介绍

    以STC单片机为例A/D做按键扫描应用原理介绍 矩阵按键扫描或者是多个按键扫描,我们通常想到的可能大多是通过多个IO口来搭建按键扫描电路,例如下面的4X4矩阵按键,今天来介绍的是通过引入模拟量信号采集 ...

  3. STM32矩阵按键扫描冲突问题

    最近做了一个项目,有个部分用到了矩阵扫描的原理,要检测按键是否按下去执行一个动作.一开始硬件工程师的原理图实现是设计成传统矩阵按键方式,大致原理如下所示: 这种硬件实现方式当去检测单个按下.一整行按下 ...

  4. 【摘录】MTK按键扫描原理及相关代码

    一.MTK按键扫描原理: 不同的MTK平台内部提供的按键数目各有不同,但是扫描原理大致一样,这里以MTK6253为例来讲解记录. MTK提供6*7共42个矩阵键盘,加上Power键总共43个按键,其中 ...

  5. 2.8 STM32_按键扫描_安富莱

    1.程序优点 扩展性非常强,功能比较齐全: bsp_key按键驱动程序用于扫描独立按键,具有软件滤波机制,采用FIFO机制保存键值.可以检测如下事件: 按键按下. 按键弹起. 长按键. 长按时自动连发 ...

  6. Android卡顿掉帧问题分析之原理篇

    当用户抱怨手机在使用过程中存在卡顿问题的时候,会严重影响用户对手机品牌的好感和应用APP的体验,从而导致用户对手机品牌的忠诚度降低或应用APP的装机留存率下降.所以无论是手机设备厂商还是应用APP开发 ...

  7. HAL库STM32CuBe实现按键扫描芯片STM32F407

    芯片STM32F407ZGT6 注意:这芯片的按键不是矩阵按键 分类: 按结构原理分: 触点式开关按键 无触点开关按键 接入方式 独立式按键 矩阵式键盘 ----------------------- ...

  8. 木马冰河之原理篇(深入浅出看木马)

    主题:木马冰河之原理篇(转载) 在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖 ...

  9. 内存映射和多功能LED控制器驱动芯片/带按键扫描的LED驱动芯片(IC)-VK16K33A/B/C,内置RC振荡器,最大16seg和8com

    品牌:永嘉微电/VINKA ­工程服务,技术支持 型号:VK16K33A/B/C 封装:SOP28/24/20 年份:新年份 概述: VK16K33是一个内存映射和多功能LED控制器驱动程序.VK16 ...

最新文章

  1. Hive查询结果输出文件
  2. 屏蔽基于对话框的MFC程序中按下ESC关闭窗口的功能
  3. 计算机网络与通信02339,4月全国高等教育自学考试计算机网络与通信试题及答案解析.docx...
  4. mysql执行代码段_mysql的event schedule 可以让你设置你的mysql数据库再某段时间执行你想要的动作...
  5. python如何创建工程预设_新手如何发布第一个 Python 项目开源包?
  6. ps批量修改名片文字_PS批量制作多项字幕条
  7. 计算机声卡的步骤,声卡调试教程
  8. 手把手教你 VSCode搭建STM32开发环境
  9. 声事件识别之时域短时过零率
  10. 乐优商城_第5章_-vue入门
  11. Pandas + Pyecharts | ADX游戏广告投放渠道综合分析
  12. 《失业七个月,面试六十家公司》的深圳体验
  13. 查看患者信息java_Java通过反射查看类的信息示例
  14. NPOI写Excel,Microsoft.Office.Interop.excel.dll 转换Excel为PDF
  15. shell脚本明文密码隐藏且加密
  16. Node中间件和路由器
  17. 乌班图服务器账号密码忘了,如何在Ubuntu 20.04 LTS服务器中重置Sudo密码
  18. 祝全天下老师教师节快乐
  19. 《23种设计模式之单例模式(4种实现)》
  20. codewars练习(5)backwardsPrime--提交失败-Execution Timed Out (12000 ms)

热门文章

  1. IHT发布全球首个房产ATO项目,加速进入酒店和旅游房产市场
  2. 总结两个Javascript的哈稀对象的一些编程技巧
  3. 多传感器融合定位 第六章 惯性导航结算及误差模型
  4. 20多岁女人14件事决定一生
  5. 阿里云服务器云盘在线扩容
  6. [源码解析] 机器学习参数服务器ps-lite (1) ----- PostOffice
  7. android平板电脑怎么才能连接电脑,怎么将安卓平板电脑装在车上 主板又是怎么连接上去的...
  8. Microsoft Visual Studio 2019 下载与离线安装教程
  9. SAP 外向交货的包装功能
  10. CityGML标准文档(8)(正文——CityGML概述)