(七)树莓派系列教程:树莓派4B连接LCD1602液晶显示屏并且显示内容

article/2025/8/15 8:38:39

树莓派连接LCD1602液晶显示屏,并显示内容

一、效果图

所需要硬件:

  • LCD1602液晶显示屏
  • IIC转接LCD1602模块(转成IIC通讯)
    在这里插入图片描述

在这里插入图片描述

二、设置树莓派,启动IIC通讯功能

  • 因为树莓派刚烧录完系统后IIC功能是没有启动的,在命令行分别输入以下命令:
raspi-config ;  进入树莓派设置界面
>>>Interfacing Options  ; 设置
>>>P5 I2C  ; 选择I2C选项
>>>enable  ; 启动I2C功能
  • 下载对应缺的包,例如:
sudo apt-get install i2c-tools
sudo apt-get update
sudo apt-get install python3-smbus
  • 设置好了,重启一次树莓派。

三、连线

在这里插入图片描述

  • 树莓派-------液晶显示屏
  • VCC----------3.3V
  • GND-----------地
  • SDA----------SDA
  • SCL-----------SCL

四、代码

方案一:(一个LCD602程序—LCD1602.py)

'''1602/1602Aauthor:ZengXiaojiedescription:直接实例化 My1602 对象然后调用对象的 print_lcd(param1, param2, str) 方法ex:print_lcd(0, 0, 'Hello, world!')param1:从第几位开始,共16位(0-15),超出不显示,除非移动屏幕(其实1602一行有40位)param2:第几行,共有两行,0为第一行,1位第二行。str:要显示的数据每次打印字符时,建议适当清屏。
'''import time
import smbus
import sysclass My1602(object):BUS = smbus.SMBus(1)LCD_ADDR = 0x27BLEN = 1# '''# 开关灯def turn_light(self, key):self.BLEN = keyif key == 1:self.BUS.write_byte(self.LCD_ADDR, 0x08)else:self.BUS.write_byte(self.LCD_ADDR, 0x00)# '''def write_word(self, addr, data):temp = dataif self.BLEN == 1:temp |= 0x08else:temp &= 0xF7self.BUS.write_byte(addr, temp)# 写命令def send_command(self, comm):# 发送7-4位数据buf = comm & 0xF0buf |= 0x04  # RS = 0, RW = 0, EN = 1self.write_word(self.LCD_ADDR, buf)time.sleep(0.002)buf &= 0xFBself.write_word(self.LCD_ADDR, buf)# 发送3-0位数据buf = (comm & 0x0F) << 4buf |= 0x04  # RS = 0, RW = 0, EN = 1self.write_word(self.LCD_ADDR, buf)time.sleep(0.002)buf &= 0xFBself.write_word(self.LCD_ADDR, buf)# 写数据def send_data(self, data):# 发送7-4位数据buf = data & 0xF0buf |= 0x05  # RS = 1, RW = 0, EN = 1self.write_word(self.LCD_ADDR, buf)time.sleep(0.002)buf &= 0xFBself.write_word(self.LCD_ADDR, buf)# 发送3-0位数据buf = (data & 0x0F) << 4buf |= 0x05  # RS = 1, RW = 0, EN = 1self.write_word(self.LCD_ADDR, buf)time.sleep(0.002)buf &= 0xFBself.write_word(self.LCD_ADDR, buf)# 初始化def __init__(self):try:self.send_command(0x33)time.sleep(0.005)self.send_command(0x32)time.sleep(0.005)self.send_command(0x28)time.sleep(0.005)self.send_command(0x0C)time.sleep(0.005)self.send_command(0x01)self.BUS.write_byte(self.LCD_ADDR, 0x08)except:return Noneelse:return None# 清屏def clear_lcd(self):self.send_command(0x01)  # 清屏# 显示字符def print_lcd(self, x, y, str):if x < 0:x = 0if x > 15:x = 15if y < 0:y = 0if y > 1:y = 1addr = 0x80 + 0x40 * y + xself.send_command(addr)for chr in str:self.send_data(ord(chr))if __name__ == '__main__':my1602 = My1602()# turn_light(0)  # 关闭背景灯光my1602.print_lcd(0, 0, 'Hello, world!')my1602.print_lcd(8, 1, 'by zxj')

方案二:(两个python程序:1.LCD1602驱动程序,2.调用驱动程序)

程序1—LCD1602.py(LCD主控制程序):

import LCD1602 as LCD
import timeLCD.init_lcd()
time.sleep(2)
LCD.print_lcd(0,0,'start')

程序2—LCD1602.py(LCD驱动程序1):

import time
import smbus
import logx
import logging
BUS = smbus.SMBus(1)
LCD_ADDR = 0x27
BLEN = 1 #turn on/off background lightdef turn_light(key):global BLENBLEN = keyif key ==1 :BUS.write_byte(LCD_ADDR ,0x08)logging.info('LCD executed turn on BLight')else:BUS.write_byte(LCD_ADDR ,0x00)logging.info('LCD executed turn off BLight')def write_word(addr, data):global BLENtemp = dataif BLEN == 1:temp |= 0x08else:temp &= 0xF7BUS.write_byte(addr ,temp)def send_command(comm):# Send bit7-4 firstlybuf = comm & 0xF0buf |= 0x04               # RS = 0, RW = 0, EN = 1write_word(LCD_ADDR ,buf)time.sleep(0.002)buf &= 0xFB               # Make EN = 0write_word(LCD_ADDR ,buf)# Send bit3-0 secondlybuf = (comm & 0x0F) << 4buf |= 0x04               # RS = 0, RW = 0, EN = 1write_word(LCD_ADDR ,buf)time.sleep(0.002)buf &= 0xFB               # Make EN = 0write_word(LCD_ADDR ,buf)def send_data(data):# Send bit7-4 firstlybuf = data & 0xF0buf |= 0x05               # RS = 1, RW = 0, EN = 1write_word(LCD_ADDR ,buf)time.sleep(0.002)buf &= 0xFB               # Make EN = 0write_word(LCD_ADDR ,buf)# Send bit3-0 secondlybuf = (data & 0x0F) << 4buf |= 0x05               # RS = 1, RW = 0, EN = 1write_word(LCD_ADDR ,buf)time.sleep(0.002)buf &= 0xFB               # Make EN = 0write_word(LCD_ADDR ,buf)def init_lcd():try:send_command(0x33) # Must initialize to 8-line mode at firsttime.sleep(0.005)send_command(0x32) # Then initialize to 4-line modetime.sleep(0.005)send_command(0x28) # 2 Lines & 5*7 dotstime.sleep(0.005)send_command(0x0C) # Enable display without cursortime.sleep(0.005)send_command(0x01) # Clear Screenlogging.info('LCD init over')BUS.write_byte(LCD_ADDR ,0x08)logging.info('LCD turning on BLight')except:return Falseelse:return Truedef clear_lcd():send_command(0x01) # Clear Screendef print_lcd(x, y, str):if x < 0:x = 0if x > 15:x = 15if y <0:y = 0if y > 1:y = 1# Move cursoraddr = 0x80 + 0x40 * y + xsend_command(addr)for chr in str:send_data(ord(chr))if __name__ == '__main__':init_lcd()print_lcd(0, 0, 'Hello, world!')print_lcd(8, 1, 'by Jerry')

程序3—logx.py(LCD驱动程序2):

import logging
#print on log file
logging.basicConfig(level=logging.INFO,format='%(asctime)s <%(levelname)s> [line:%(lineno)d] %(filename)s : %(message)s',datefmt='%Y-%m-%d %H:%M:%S',filename='trace.log',filemode='a')#w a
#print on screem				
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s <%(levelname)s> [line:%(lineno)d] %(filename)s : %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
if __name__ == '__main__':				#CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSETlogging.critical('This is critical message')logging.error('This is error message')logging.warning('This is warning message')logging.info('This is info message')logging.debug('This is debug message')#logging.notset('This is notset message')

五、运行即可,运行成功如下:

在这里插入图片描述


http://chatgpt.dhexx.cn/article/0SVDiaf8.shtml

相关文章

用树莓派连电脑显示屏

看了网上很多攻略总结一下 1.关于怎么安装树莓派os 准备一个读卡器 和一个16g的闪存卡 在下面网站下载 https://www.raspberrypi.com/software/ 打开以后选第一个 选择安装的u盘 就安装成功了 2.怎么在电脑显示器显示 一.按照网上的攻略要打开ssh功能&#xff0c;那么建一…

树莓派笔记12:通过SPI操作OLED显示屏

树莓派自带SPI和I2C接口&#xff0c;因此可以方便地控制带SPI的控制芯片的OLED显示屏。要想成功实现树莓派与oled的通信&#xff0c;最好是买一个以SSD1306为主控芯片的oled&#xff0c;因为关于这个芯片的驱动库是最容易搜到的&#xff0c;当然如果有能力自己写驱动程序的话就…

将树莓派连接到显示器

本文参考树莓派实验室的文章&#xff1a; 自定义树莓派的显示分辨率树莓派配置文档config.txt说明 树莓派是最经典的卡片式电脑&#xff0c;拥有一台pc机的所有功能。比较典型的使用方法是通过vnc远程登陆进行操作。不过&#xff0c;raspbian虽然集成了vncserver&#xff0c;默…

点击div外区域隐藏div操作(嵌套iframe页面)

一、正常页面 $(document).click(function(){$(dom).hide();//要隐藏的div});或者去除某一块$(document).on(click, function (e) {if ($(e.target).closest(#去除id).length 0) {$("#隐藏id").hide();}});这个是最基础的原型&#xff0c;如果是有弹窗和遮罩层的&a…

CSS实线鼠标移入显示隐藏div

用CSS中的 hover 事件&#xff0c;实线鼠标移入显示隐藏元素。 效果如下&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>移入显示</title><style>.hov{width: 300px;backg…

React 点击按钮显示div与隐藏div

<!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>React 点击按钮显示div与隐藏div</title><script src"https://unpkg.com/react16/umd/react.development.js"></script><script src"…

html点击隐藏divjq,jquery点击a标签怎么显示和隐藏div?详解

你知道jquery点击a标签要如何才能够显示以及隐藏div吗?下面的文章要给大家讲解的就是这个方面的内容哦&#xff0c;一起来看看吧。 1、新建一个html文件&#xff0c;命名test.html&#xff0c;用来讲解jquery点击a标签怎么显示和隐藏div。 2、在test.html文件当中&#xff0c;…

JQuery动态显示和隐藏div

1. 如果在载入是隐藏&#xff1a; <head> <script language"javascript"> function HideWeekMonth() {$("#tt1").hide();$("#tt2").hide(); } </script> </head><body onLoad"HideWeekMonth()"> </b…

Selenium之如何定位隐藏div弹窗

一、判断是否为隐藏属性 display的值为none则为隐藏&#xff08;详见下图红色标记&#xff09; 二、将隐藏属性修改为非隐藏属性 知识储备&#xff1a; 1.document对象&#xff1a; &#xff08;1&#xff09;当浏览器载入HTML文档时&#xff0c;便会成为document对象 &am…

html css 隐藏div显示,css如何隐藏div?

在我们平时布局网站的时候&#xff0c;想要把div进行隐藏&#xff0c;但是很多人不知道css控制div显示隐藏&#xff1f;下面我们来讲解一下css如何让div隐藏。 一&#xff1a;使用display:none属性来隐藏div 我们可以使用display:none属性来隐藏所有的信息&#xff0c;包括文本…

CSP 202206-1 归一化处理

文章目录 C总结 本题链接&#xff1a;CSP 202206-1 归一化处理 本博客给出本题截图&#xff1a; C #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath>using namespace std;const int N 1010;…

用通俗易懂的方式讲解:数据预处理归一化(附Python代码)

文章目录 技术答疑一、为何要进行数据预处理&#xff1f;二、数据标准化1.归一化的目标2.归一化的优点3.哪些算法并不需要归一化 三、数据归一化方法1.min-max标准化2.Z-score标准化3.Sigmoid函数&#xff1a; 总结 技术答疑 本文来自技术群小伙伴的分享&#xff0c;想加入按照…

数据预处理中的归一化与反归一化

前言 在使用深度学习框架构建训练数据时&#xff0c;通常需要数据归一化&#xff08;Normalize&#xff09;&#xff0c;以利于网络的训练。而在训练过程可视化中&#xff0c;通常需要反归一化。以PyTorch框架而言&#xff0c;提供了torchvision.transforms.Normalize(mean, s…

归一化的作用

首先&#xff0c;归一化是把数据转化为&#xff08;0&#xff0c;1&#xff09;或者是&#xff08;-1&#xff0c;1&#xff09;之间。&#xff08;-1&#xff0c;1&#xff09;&#xff1a; (x-xmax)/(xmax-xmin) 标准化是把数据转化到均值为0&#xff0c;方差为1. 中心化&am…

数据的归一化处理

数据归一化问题是数据挖掘中特征向量表达时的重要问题&#xff0c;当不同的特征成列在一起的时候&#xff0c;由于特征本身表达方式的原因而导致在绝对数值上的小数据被大数据“吃掉”的情况&#xff0c;这个时候我们需要做的就是对抽取出来的features vector进行归一化处理&am…

机器学习之归一化处理

1.使用随机森林或PCA等算法进行数据的降维处理 减少无关的维度测算 2.统计错误率&#xff0c;精确率&#xff0c;召回率 修正维度测算的准确率 3.归一化处理 保留所有的特征&#xff0c;但是减少参数的大小&#xff08;或者是说&#xff1a;减少参数的重要性&#xff09;为了…

数据归一化处理transforms.Normalize()

数据归一化处理transforms.Normalize&#xff08;&#xff09; 1. 图像预处理Transforms(主要讲解数据标准化&#xff09; 1.1 理解torchvision transforms属于torchvision模块的方法&#xff0c;它是常见的图像预处理的方法 在这里贴上别人整理的transforms运行机制&#x…

数据处理方法:归一化与标准化处理

在数据挖掘中&#xff0c;在建模前需要对数据进行预处理&#xff0c;预处理方法包括归一化与标准化&#xff0c;对数据进行缩放。 1.归一化&#xff08;Normalization&#xff09; 将数据缩放到0-1之间线性&#xff08;常用&#xff09;归一化&#xff1a;最大最小值归一化&a…

【python学习】数据预处理-如何归一化?

作者&#xff1a;代码律动 链接&#xff1a;数据预处理的归一化手段应该如何应用到训练集&#xff0c;测试集和验证集中&#xff1f; - 知乎 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 作者&#xff1a;Orginal 链…

一文速学-数据预处理归一化详细解释

目录 一、为何要进行数据预处理&#xff1f; 二、数据标准化 1.归一化的目标 2.归一化的优点 3.哪些算法并不需要归一化 三、数据归一化方法 1.min-max标准化 2.Z-score标准化 3.Sigmoid函数&#xff1a; 总结 一、为何要进行数据预处理&#xff1f; 1.任何收集而来…