Micropython ESP32驱动CH455控制4位数码管

1、硬件

CH455驱动4位共阴数码管的原理图如下所示。

ESP32-S模块,用GPIO4作为SCL和GPIO16作为SDA。

2、软件

搭载Micropython的ESP32-S模块,驱动代码如下:

from machine import I2C, Pin
i2c = I2C(scl=Pin(4), sda=Pin(16),freq=100000)
i2c.start()
i2c.writeto(36, b'\x01')
i2c.writeto(52, b'\x79')
i2c.writeto(53, b'\x5b')
i2c.writeto(54, b'\x4f')
i2c.writeto(55, b'\x66')
i2c.stop()

3、代码解释:(H代表16进制、D代表10进制)

操作命令分为:设置系统参数命令、加载字数据命令、读取按键代码命令,由于仅仅只是驱动数码管显示,没用到按键,所以只涉及到前两个命令;

用python命令扫描IIC地址,(32、80、105、116是IIC电路挂载的其它芯片地址,剩下的都是CH455扫描的地址)

数据手册说,设置系统参数命令地址为48H 即72D,并没有扫描出来。

后面通过C案例中的操作,可以得到地址是7位。

((((unsigned char)(cmd>>7)&CH455_I2C_MASK)|CH455_I2C_ADDR)>>1);

即1001000 = 48H = 72D 右移一位 100100 = 24H = 36D,此时可以对比扫描的地址发现地址36是有扫描到的,所以操作命令是7位地址,最后一个是读写位(可能底层自动匹配读写位)。

同理可得到加载字数命令为68H、6aH、6cH右移一位,对应为34H、35H、36H、37H  =  52D、53D、54D、55D,对比发现,这四位地址也是有扫描到的。

1、首先设置系统参数,往36地址中写00000001,即数据 00000001B 表示 8 段模式,显示占空比为 8/8,关闭睡眠模式,开启显示和键盘;操作如下:

i2c.writeto(36, b'\x01')

2、设置完系统参数后,就可以显示数据了。52D、53D、54D、55D代表了4个数码管地址,自需要将下面对应8位LED数据写到对应的数码管地址,就可以让对应的数码管,显示对应的数据。

例如,让第一位数码管显示E,只需往52D(68H右移一位34H=52D)中写数据79D = 1111001B

i2c.writeto(52, b'\x79')

同理,让第二个数码管显示2、第三个数码管显示3、第四个数码管显示4:

i2c.writeto(53, b'\x5b')
i2c.writeto(54, b'\x4f')
i2c.writeto(55, b'\x66')

注:数码管的BCD编码如下,代表(0-F)

unsigned char BCD_decode_tab[0x10] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F,0X77, 0X7C, 0X58, 0X5E, 0X79, 0X71 };

Micropython ESP32驱动CH455控制4位数码管相关推荐

  1. 物联网开发笔记(23)- 使用Micropython开发ESP32开发板之控制4位数码管

    上一节我们讲解了如何控制单个数码管,这一节我们来一起学一下如何控制4位数码管. 一.目的 使用MicroPython开发ESP32控制4位数码管 二.环境 ESP32+数码管+Thonny IDE+电 ...

  2. 两个74HC595D驱动芯片控制三位数码管显示

    两个74HC595D驱动芯片控制三位数码管显示 概述 一.数码管引脚及使用概述 1.1位数码管显示方式 2.3位数码管 3.3位数码管电路图 二.74HC595D引脚及使用概述 1. 74HC595引 ...

  3. 8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8。

    8255总线实验 编写程序利用8255扩展单片机的IO口,控制8位数码管显示1-8. 程序: #include<reg51.h> #include<absacc.h> #def ...

  4. proteus仿真arduino控制两位数码管

    前面我们用arduino控制一位数码管,知道了控制数码管的原理.这里我们增加了一位,其显示的原理基本一样.只不过本质上不是两位同时点亮,而是轮换点亮.下面是原理图: 我们来看看代码的实现: int P ...

  5. protues用一片74hc595控制两位数码管

    前面的博文中我们介绍了一个arduino中用一片595来控制一位数码管,这里我们介绍一个595来控制两位数码管.两位数码管是应用最广泛的,如交通灯倒计时,计数器等都将用到两位数码管. 两位数码管的动态 ...

  6. 【单片机仿真项目】外部中断0和1控制两位数码管进行计数

    目录 1.外部中断0和1控制两位数码管进行计数 keil 代码 2.proteus 原理图 3.gif 动态图

  7. 单片机动态从00到99C语言,用51单片机控制 2位数码管动态显示 00 ~ 99

    ;用51单片机控制 2位数码管动态显示 00 ~ 99. ;从 00 开始显示,显示数字每隔一段时间加 1,一直到 99,然后回到 00. ;从 00 到 10 每隔 100ms 加 1: ;从 10 ...

  8. arduino控制一位数码管、控制二位数码管动态显示(用不到中断程序)

    目的: 1.利用arduino控制一位共阳极数码管显示 2.利用arduino控制二位共阳极数码管显示 前言: 前段时间,在网上看到了一个视频,是关于二位数码管动态显示的视频,感觉很新奇,就想把它做出 ...

  9. C#+Arduino控制4位数码管

    上一篇介绍了如何控制1位数码管,接下来就是控制4位数码管,其实就是4个一位数码管拼起来构成的,但是4位数码管的引脚只比一位数码管多了2个.通过查找资料可知,4位数码管中的a.b.c.d.e.f.g.d ...

最新文章

  1. ASP.NET 2.0数据处理之高级分页/排序
  2. 加强版Redis,又一款国产高性能KV存储数据库开源了!
  3. GraphQL query的schema校验
  4. python人脸关键点识别_用Face++实现人脸关键点检测
  5. pythonutf8转gbk,Python实现把utf-8格式的文件转换成gbk格式的文件
  6. 实时获取ccd图像_图像处理基础
  7. kafka开源版本quota限流功能缺陷
  8. 解决vscode卡顿,CPU占用过高的问题
  9. C#中使用GDI+实现复杂打印
  10. STM32中assert_param的使用
  11. java 密码生成器_[Java小白]WIFI纯数字密码字典生成器
  12. java 字节 占多少位_JAVA各种类型各占多少字节,多少位
  13. android dff播放器,无损音乐文件的整理(dff、dsf篇)
  14. git commit 规范不对导致报错subject may not be empty [subject-empty]type may not be empty [type-empty]
  15. 安徽工程大学计算机学院转专业,2021年安徽工程大学大一新生转专业及入学考试相关规定...
  16. 20155317 2016-2017-2 蓝墨云班课考题第2周
  17. please insert the disc labeled ‘Ubuntu 18.04.5 LTS _Bionic Beaver_ - Release amd64 (20200806.1)‘ in
  18. java 简单考试系统 ——java程序设计
  19. mysql查询第一行
  20. 码元携带多少比特信息?波特率和比特率的关系?

热门文章

  1. 计算机软考知识点,计算机软考网络工程师考试第四章知识点大全
  2. 华为通讯模组AT指令操作指南
  3. 【转】x.509证书在WCF中的应用(Web/IIS篇)
  4. 麦块服务器注册密码,我的世界麦块怎么认证_麦块我的世界盒子怎么用
  5. 给程序员当经纪人,程序员客栈完成300万元天使轮融资
  6. 有道桌面词典老是显示网络已断开的解决方案
  7. 【JavaScript】详解JavaScript中的replace()函数
  8. 三菱Q系列光纤通信模块数据传输
  9. python滚动截图(利用Puppeteer实现)
  10. 腾讯会议突然中断,录制的视频怎么恢复。如何找到腾讯会议保存的视频,腾讯会议怎样录制视频