树莓派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 - 显示自定义字符相关推荐

  1. 单片机c语言字符发送函数,求1602显示自定义字符 ℃ 的C语言程序,在写入和读函数多点说明,因为是初学者,...

    #include __CONFIG(0X1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define rs RA1 #define rw RA2 ...

  2. Lcd1602液晶 基础教程 常用指令 自定义字符

    此文章,你将会看到,或了解到 工作电压电流 引脚对应关系 基本操作时序 相关指令说明 显示一个字符 自定义字符的方法 工作电压电流 工作电流:2mA(5V) 背光Led:10-20mA 引脚对应关系 ...

  3. 让你的LCD1602显示用户自定义字符 Arduino-LiquidCrystal库的createChart()介绍

    LCD1602内置了一些字库,我们可以直接使用它.但当用户希望显示字库之外的字符时,该怎么做呢? LCD1602提供了8个5X8的自定义字符(字形),使用LiquidCrystal库中的createC ...

  4. 基于51单片机点亮LCD1602+自定义字符

    1602有8位的数据口和4位的数据口,今天我们用到的是8位的数据口.废话不多说,直接上原理图 8位数据口一定要加上拉电阻,要不然驱动不了. 写数据和写命令的时序 清屏指令 开显示指令 显示字符的地址 ...

  5. 使Vim将所有空格显示为字符

    我找不到让Vim将所有空白显示为字符的方法. 我发现的只是关于制表符,尾随空格等. #1楼 我对这个问题的所有其他答案感到沮丧,因为它们都没有以有用的方式突出显示空格字符. 将空格显示为字符对于空白格 ...

  6. linux远程登录显示,SSH远程登录显示自定义警告信息

    SSH远程登录显示自定义警告信息On 2015年9月9日 by admin >Linux服务器经常需要通过ssh服务远程登录操作.为了提醒登录着,或者非法入侵者,我们可以自定义设置警告或提醒信息 ...

  7. win11/windows重命名时,命名栏只显示一个字符,而看不到全名?据说是系统分辨率和屏幕分辨率不匹配造成的?但如何解决呢?

    问题 重命名时候只能显示一个字符.举个例子:比如我想将文件改名为12345.在我输入12之后,文件名仅显示2,继续打3时候仅显示3,而12不显示了.输入完12345之后文件名仅显示5.但是当按回车后, ...

  8. OpenLayers标记地图点及点击地图点显示自定义弹出框

    css代码(设置弹出框样式) /*设置弹出框样式*/.ol-popup {position: absolute;background-color: #eeeeee;-webkit-filter: dr ...

  9. 海康摄像头实时显示与字符叠加详解

    1.说明 文章详细叙述了海康摄像头的两种实时显示方法--基于SDK 解码显示和基于数据流回调显示,并且讲述了这在两种显示方法下如何往画面添加字符和图像,最后比较了这两种方法的优劣.文章全程给以详细的程 ...

  10. ECharts如何制作省份地图并在地图上显示自定义图标/散点图

    之前一直被客户提的一个需求烦恼着,他要只显示某个省份的地图,并且呢要在地图上显示小车的图标,还有其它一些点的信息.我以前只用过echarts做过图表,没做过地图,所以自己也是网上看了很多并且看了很多a ...

最新文章

  1. 服务机器人---多传感器融合
  2. 2013年第四季度总结报告
  3. 中国齿轮行业竞争分析与投资规模预测报告2021-2027年
  4. 百度获取图片 json格式解析
  5. Kubernetes集群的部署方式及详细步骤
  6. 基于事件驱动架构构建微服务第16部分:Azure Active Directory B2C
  7. C++学习之路 | PTA乙级——1090 危险品装箱 (25 分)(精简)
  8. 滑动关机代码bat_BAT面试算法进阶--(2) 无重复字符的最长子串(滑动法优化+ASCII码法)...
  9. Spring Cloud Zuul中使用Swagger汇总API接口文档 1
  10. SpaceVim 1.1.0 发布,模块化 Vim IDE
  11. 以行为单位对字符串变量下标为奇数位置上的字符按其ASCii值从小到大的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中
  12. poj 1236 Network of Schools (强连通分支缩点)
  13. nodejs(koajs)设置中文cookie无效
  14. Halcon教程十二:回形针识别进阶
  15. 坯子库怎么导入插件_【亲测能用】草图大师Sketchup坯子库插件管理器SU2014-2019插件64位下载-羽兔网...
  16. 程序员,你准备好回家过年了吗?
  17. 移动心理测评系统:心理健康评估、抑郁筛查、心理学量表
  18. 大彩串口屏之LUA使用1
  19. layui管理后台模板
  20. 零距离接触阿里云时序时空数据库TSDB

热门文章

  1. 国美易卡管理云平台,国美易卡系统有扩展点
  2. 马士兵的经典名言!!!
  3. jquery自动监测输入字数,自动截取,输入框
  4. 查看各大网站服务器操作系统
  5. 麻雀虽小五脏俱全----ZC评价系统
  6. 解决mangos60级后生命值为什么不变
  7. web前端简易网页制作
  8. Ubuntu设置Root用户开机启动
  9. 教你把mov格式的视频转换mp4
  10. 中国民营500强企业爬取数据展示