树莓派25/100 - 显示自定义字符
树莓派Pico可以通过I2C控制在1602显示屏输出文字,1602可比以前的八段码功能强大多了,不仅可以显示数字,还可以显示多达32个字符,现在可以把Pico板载的温度传感器的数值显示在这块“大”屏上了。
import machine
import utime
from pico_i2c_lcd import I2cLcdi2c = machine.I2C(0, sda=machine.Pin(0), scl=machine.Pin(1), freq=400000)
I2C_ADDR = i2c.scan()[0]
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)while True:reading = sensor_temp.read_u16() * conversion_factor# 0.706V的时候是27度, 每增加0.001721V,温度下降1度temperature = 27 - (reading - 0.706)/0.001721lcd.move_to(0,0)lcd.putstr("Temp: {:6.2f} \xdfC\n".format(temperature))utime.sleep(2)
代码里只需要注意这一行:
lcd.putstr("Temp: {:6.2f} \xdfC\n".format(temperature))
1602的字符集只支持ASCII码以及少量扩展ASCII码,\xdf是扩展ASCII码,代表摄氏度“℃”符号里的左边的小圈圈。官方给出的码表见下图:
需要注意一下,标准ASCII码表晨几个符号与平常的不一样,货币符号和左右箭头。
1602还有一块CGRAM区,可以存放8个自定义的字符,一个字符的点阵为5列x8行,最下方的一行经常被光标占据,所以基本也不能用。一个字模可以用8个字节来表示,如下图。
这个网站里有一个在线的字模设计小程序,省得像我一样在Excel里画。
lcd_api.py里有一个custom_char(id, byte_array)函数,id只能是0到7之间,表示第几个自定义字符。
#lcd.custom_char(id, byte_array)
lcd.custom_char(4,[0x04,0x1F,0x15,0x1F,0x15,0x1F,0x04,0x00])
custom_char()只负责将字模写入CGRAM,显示还需要用putstr(),字符编码就是\x00 ~ \x07。
import machine
import utime
from pico_i2c_lcd import I2cLcdi2c = machine.I2C(0, sda=machine.Pin(0), scl=machine.Pin(1), freq=400000)
I2C_ADDR = i2c.scan()[0]
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)#前4个用来画温度计图标
lcd.custom_char(0, [0x0E,0x11,0x1C,0x1F,0x1C,0x11,0x0E,0x00])
lcd.custom_char(1, [0x00,0x1F,0x00,0x1F,0x00,0x1F,0x00,0x00])
lcd.custom_char(2, [0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00])
lcd.custom_char(3, [0x00,0x1E,0x01,0x01,0x01,0x1E,0x00,0x00])
lcd.custom_char(4,[0x04,0x1F,0x15,0x1F,0x15,0x1F,0x04,0x00]) #申
lcd.custom_char(5,[0x04,0x1F,0x02,0x04,0x08,0x10,0x0F,0x00]) #之
lcd.custom_char(6,[0x04,0x15,0x15,0x1F,0x04,0x15,0x1F,0x00]) #出
lcd.custom_char(7,[0x0E,0x0A,0x0E,0x00,0x1F,0x15,0x1F,0x00]) #品lcd.putstr("\x00\x01\x01\x01\x02\x02\x03\n") #用自定义字符画了一个温度计
lcd.putstr("\x04\x05\x06\x07") #本来想输出“申龙斌之作品”,可惜5x8点阵实在太小了sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)while True:reading = sensor_temp.read_u16() * conversion_factor# 0.706V的时候是27度, 每增加0.001721V,温度下降1度temperature = 27 - (reading - 0.706)/0.001721lcd.move_to(7,0) #第7列,第0行lcd.putstr("{:6.2f} \xdfC\n".format(temperature))utime.sleep(2)
代码里,我用7个字符(4种字模)画了一个小温度计,想显示汉字就有点太难了,5x8字模太小了,只能放入几个简单的字。
参考文献:
https://www.8051projects.net/lcd-interfacing/index.php
这个系列里有9篇文章。
https://peppe8o.com/using-i2c-lcd-display-with-raspberry-pi-pico-and-micropython/
https://www.handsonembedded.com/lcd16x2-hd44780-tutorial-1/
这个系列文章里有6篇文章。
推荐阅读:
树莓派Pico开发系列文章
树莓派25/100 - 显示自定义字符相关推荐
- 单片机c语言字符发送函数,求1602显示自定义字符 ℃ 的C语言程序,在写入和读函数多点说明,因为是初学者,...
#include __CONFIG(0X1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define rs RA1 #define rw RA2 ...
- Lcd1602液晶 基础教程 常用指令 自定义字符
此文章,你将会看到,或了解到 工作电压电流 引脚对应关系 基本操作时序 相关指令说明 显示一个字符 自定义字符的方法 工作电压电流 工作电流:2mA(5V) 背光Led:10-20mA 引脚对应关系 ...
- 让你的LCD1602显示用户自定义字符 Arduino-LiquidCrystal库的createChart()介绍
LCD1602内置了一些字库,我们可以直接使用它.但当用户希望显示字库之外的字符时,该怎么做呢? LCD1602提供了8个5X8的自定义字符(字形),使用LiquidCrystal库中的createC ...
- 基于51单片机点亮LCD1602+自定义字符
1602有8位的数据口和4位的数据口,今天我们用到的是8位的数据口.废话不多说,直接上原理图 8位数据口一定要加上拉电阻,要不然驱动不了. 写数据和写命令的时序 清屏指令 开显示指令 显示字符的地址 ...
- 使Vim将所有空格显示为字符
我找不到让Vim将所有空白显示为字符的方法. 我发现的只是关于制表符,尾随空格等. #1楼 我对这个问题的所有其他答案感到沮丧,因为它们都没有以有用的方式突出显示空格字符. 将空格显示为字符对于空白格 ...
- linux远程登录显示,SSH远程登录显示自定义警告信息
SSH远程登录显示自定义警告信息On 2015年9月9日 by admin >Linux服务器经常需要通过ssh服务远程登录操作.为了提醒登录着,或者非法入侵者,我们可以自定义设置警告或提醒信息 ...
- win11/windows重命名时,命名栏只显示一个字符,而看不到全名?据说是系统分辨率和屏幕分辨率不匹配造成的?但如何解决呢?
问题 重命名时候只能显示一个字符.举个例子:比如我想将文件改名为12345.在我输入12之后,文件名仅显示2,继续打3时候仅显示3,而12不显示了.输入完12345之后文件名仅显示5.但是当按回车后, ...
- OpenLayers标记地图点及点击地图点显示自定义弹出框
css代码(设置弹出框样式) /*设置弹出框样式*/.ol-popup {position: absolute;background-color: #eeeeee;-webkit-filter: dr ...
- 海康摄像头实时显示与字符叠加详解
1.说明 文章详细叙述了海康摄像头的两种实时显示方法--基于SDK 解码显示和基于数据流回调显示,并且讲述了这在两种显示方法下如何往画面添加字符和图像,最后比较了这两种方法的优劣.文章全程给以详细的程 ...
- ECharts如何制作省份地图并在地图上显示自定义图标/散点图
之前一直被客户提的一个需求烦恼着,他要只显示某个省份的地图,并且呢要在地图上显示小车的图标,还有其它一些点的信息.我以前只用过echarts做过图表,没做过地图,所以自己也是网上看了很多并且看了很多a ...
最新文章
- 服务机器人---多传感器融合
- 2013年第四季度总结报告
- 中国齿轮行业竞争分析与投资规模预测报告2021-2027年
- 百度获取图片 json格式解析
- Kubernetes集群的部署方式及详细步骤
- 基于事件驱动架构构建微服务第16部分:Azure Active Directory B2C
- C++学习之路 | PTA乙级——1090 危险品装箱 (25 分)(精简)
- 滑动关机代码bat_BAT面试算法进阶--(2) 无重复字符的最长子串(滑动法优化+ASCII码法)...
- Spring Cloud Zuul中使用Swagger汇总API接口文档 1
- SpaceVim 1.1.0 发布,模块化 Vim IDE
- 以行为单位对字符串变量下标为奇数位置上的字符按其ASCii值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中
- poj 1236 Network of Schools (强连通分支缩点)
- nodejs(koajs)设置中文cookie无效
- Halcon教程十二:回形针识别进阶
- 坯子库怎么导入插件_【亲测能用】草图大师Sketchup坯子库插件管理器SU2014-2019插件64位下载-羽兔网...
- 程序员,你准备好回家过年了吗?
- 移动心理测评系统:心理健康评估、抑郁筛查、心理学量表
- 大彩串口屏之LUA使用1
- layui管理后台模板
- 零距离接触阿里云时序时空数据库TSDB