当前位置: 首页 > news >正文

Linux下编写zlg7290驱动(1)

大家好,今天给大家介绍Linux下编写zlg7290驱动(1),文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。

在智能仪表中,经常会用到键盘、数码管等外设。因此,一个稳定、占用系统资源少的人机对话通道设计非常重要。
传统的键盘与数码管解决方案,由于键盘与数码管是分离的,因而电路连接比较复杂,不管是独立式键盘还是矩阵式键盘,都会浪费微控制器的端口资源,而且都需要人为进行去抖动处理,且抗干扰性差。
而数码管部分,不管是静态显示方式还是动态显示方式,在不进行锁存器扩展的前提下。仍然要占用8根I/O端口线,这将严重浪费系统的端口资源。

ZLG7290可完全克服上述弊端。它采用I2C总线接口,与微控制器的连接仅需两根信号线,硬件电路比较简单。而且可以驱动8位共阴数码管或64只独立LED、64只独立按键,并可提供自动消除抖动、连击键计数等功能。这对于传统的键盘与数码管解决方案,无疑是不可想象的。强大的功能,丰富的资源,良好的接口,使得ZLG7290比传统的键盘与数码管解决方案且有更大的优越性。因此,在现代智能仪表的设计中,通过ZLG7290可为系统设计工程师设计出良好的人机对话通道,从而提供了一种理想的解决方案。

本文介绍linux下zlg7290驱动的编写。

1. Zlg7290介绍

zlg7290可以驱动64个独立按键和8个共阴极数码管,64只按键中,前 56 个按键是普通按键 K1~K56,后 8 个为功能键 F0~F7,当然这8个按键也可以当普通按键使用。

本文分两部分介绍这两部分驱动的说明。

1.1. 芯片引脚图

图 芯片引脚图

1.2. 参考原理图

图 参考原理图

1.3. 按键相关寄存器:

芯片I2C从机地址

1.4. 按键相关寄存器:

键值寄存器 Key(地址: 01H)

如果某个普通键(图 3.1 中的 K1~K56)被按下,则微控制器可以从键值寄存器 Key中读取相应的键值 1~56。如果微控制器发现 ZLG7290B 的 INT 引脚产生了中断请求,而从Key 中读到的键值是 0,则表示按下的可能是功能键。键值寄存器 Key 的值在被读走后自动变成 0。

功能键寄存器 FunctionKey(地址: 03H)

ZLG7290B 还提供有 8 个功能键(图 3.1 中的 F0~F7)。功能键常常是配合普通键一起使用的,就像电脑键盘上的 Shift、 Ctrl 和 Alt 键。当然功能键也可以单独去使用,就像电脑键盘上的 F1~F12。当按下某个功能键时,在 INT 引脚也会像按普通键那样产生中断信号。功能键的键值是被保存在 FunctionKey 寄存器中的。功能键寄存器 FunctionKey 的初始值是FFH,每一个位对应一个功能键,第 0 位( LSB)对应 F0,第 1 位对应 F1,依次类推,第 7位( MSB)对应 F7。某一功能键被按下时,相应的 FunctionKey 位就清零。功能键还有一个特性就是“二次中断”,按下时产生一次中断信号,抬起时又会产生一次中断信号;而普通键只会在被按下时产生一次中断。

1.5. 数码管相关寄存器:

显示缓冲区 DpRam0~DpRam7(地址: 10H~17H)

DpRam0~DpRam7 这 8 个寄存器的取值直接决定了数码管的显示内容。每个寄存器的8 个位分别对应数码管的 a,b,c,d,e,f,dp 段, MSB 对应 a, LSB 对应 dp。例如大写字母 H 的字型数据为 6EH(不带小数点)或 6FH(带小数点)。

图一 数码管段位定义

显示编码表

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,

差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。(点击找小助理免费领取)

扫码进群领资料icon-default.png?t=N7T8https://s.pdb2.com/pages/20230519/16QijNiGb32IFIn.html

相关文章:

  • zustand状态管理工具(react)
  • python桶排序
  • 江山易改本性难移之ZYNQ SDK QSPI固化bug及其解决方法
  • C#灵活的任务调度组件FluentScheduler
  • 「Movie-web」一个非常简洁独特的电影网站开源项目
  • 【Flutter 开发实战】Dart 基础篇:最基本的语法内容
  • 华为路由器及交换机基础配置命令大全
  • element plus自定义组件表单校验
  • 视频做成二维码查看?多格式视频二维码生成器的使用方法
  • 轮询定时器 清除 + vue2.0
  • 剑指offer题解合集——Week3day7
  • LeetCode 83. 删除排序链表中的重复元素
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现
  • 【JAVA】在 Queue 中 poll()和 remove()有什么区别
  • 从零开始搭建一个个人博客并部署发布
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 4个实用的微服务测试策略
  • Angular2开发踩坑系列-生产环境编译
  • C语言笔记(第一章:C语言编程)
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Java小白进阶笔记(3)-初级面向对象
  • JS题目及答案整理
  • laravel 用artisan创建自己的模板
  • Quartz初级教程
  • Redis 懒删除(lazy free)简史
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • TypeScript实现数据结构(一)栈,队列,链表
  • 前嗅ForeSpider教程:创建模板
  • 浅谈Golang中select的用法
  • 如何设计一个微型分布式架构?
  • 使用parted解决大于2T的磁盘分区
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 7行Python代码的人脸识别
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​比特币大跌的 2 个原因
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • (10)STL算法之搜索(二) 二分查找
  • (九)c52学习之旅-定时器
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十) 初识 Docker file
  • .java 9 找不到符号_java找不到符号
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .net通用权限框架B/S (三)--MODEL层(2)
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @Autowired和@Resource的区别
  • [2023-年度总结]凡是过往,皆为序章
  • [BZOJ 3282] Tree 【LCT】
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [ffmpeg] av_opt_set 解析
  • [HAOI2016]食物链
  • [hdu 2896] 病毒侵袭 [ac自动机][病毒特征码匹配]
  • [Latex学习笔记]数学公式基本命令