`
iaiai
  • 浏览: 2203400 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

树莓派 1602A显示屏

 
阅读更多
树莓派 1602A显示屏

下面代码本人测试过没有问题,开始运行完屏幕上什么也没有显示出来,后来调整了下电位器可以了,所以大家如果按着下面的做出来之后运行什么也没有显示的话,记得调整下电位器



LCD1602接线说明
VSS,接地
VDD,接5V电源
VO,液晶对比度调节,接电位器中间的引脚,电位器两边的引脚分别接5V和接地。
RS,寄存器选择,接GPIO14
RW,读写选择,接地,表示写模式
EN,使能信号,接GPIO15
D0,数据位0,4位工作模式下不用,不接
D1,数据位1,4位工作模式下不用,不接
D2,数据位2,4位工作模式下不用,不接
D3,数据位3,4位工作模式下不用,不接
D4,数据位4,接GPIO17
D5,数据位5,接GPIO18
D6,数据位6,接GPIO27
D7,数据位7,接GPIO22
A,液晶屏背光+,接5V
K,液晶屏背光-,接地

一共就两个文件

lcd1602.py
#!/usr/bin/python
 
#
# based on code from lrvick and LiquidCrystal
# lrvic - https://github.com/lrvick/raspi-hd44780/blob/master/hd44780.py
# LiquidCrystal - https://github.com/arduino/Arduino/blob/master/libraries/LiquidCrystal/LiquidCrystal.cpp
#
 
from time import sleep
 
class lcd1602:
 
    # commands
    LCD_CLEARDISPLAY 		= 0x01
    LCD_RETURNHOME 		= 0x02
    LCD_ENTRYMODESET 		= 0x04
    LCD_DISPLAYCONTROL 		= 0x08
    LCD_CURSORSHIFT 		= 0x10
    LCD_FUNCTIONSET 		= 0x20
    LCD_SETCGRAMADDR 		= 0x40
    LCD_SETDDRAMADDR 		= 0x80
 
    # flags for display entry mode
    LCD_ENTRYRIGHT 		= 0x00
    LCD_ENTRYLEFT 		= 0x02
    LCD_ENTRYSHIFTINCREMENT 	= 0x01
    LCD_ENTRYSHIFTDECREMENT 	= 0x00
 
    # flags for display on/off control
    LCD_DISPLAYON 		= 0x04
    LCD_DISPLAYOFF 		= 0x00
    LCD_CURSORON 		= 0x02
    LCD_CURSOROFF 		= 0x00
    LCD_BLINKON 		= 0x01
    LCD_BLINKOFF 		= 0x00
 
    # flags for display/cursor shift
    LCD_DISPLAYMOVE 		= 0x08
    LCD_CURSORMOVE 		= 0x00
 
    # flags for display/cursor shift
    LCD_DISPLAYMOVE 		= 0x08
    LCD_CURSORMOVE 		= 0x00
    LCD_MOVERIGHT 		= 0x04
    LCD_MOVELEFT 		= 0x00
 
    # flags for function set
    LCD_8BITMODE 		= 0x10
    LCD_4BITMODE 		= 0x00
    LCD_2LINE 			= 0x08
    LCD_1LINE 			= 0x00
    LCD_5x10DOTS 		= 0x04
    LCD_5x8DOTS 		= 0x00
 
 
 
    def __init__(self, pin_rs=14, pin_e=15, pins_db=[17, 18, 27, 22], GPIO = None):
	# Emulate the old behavior of using RPi.GPIO if we haven't been given
	# an explicit GPIO interface to use
	if not GPIO:
	    import RPi.GPIO as GPIO
   	self.GPIO = GPIO
        self.pin_rs = pin_rs
        self.pin_e = pin_e
        self.pins_db = pins_db
 
        self.GPIO.setmode(GPIO.BCM)
        self.GPIO.setwarnings(False)
        self.GPIO.setup(self.pin_e, GPIO.OUT)
        self.GPIO.setup(self.pin_rs, GPIO.OUT)
 
	for pin in self.pins_db:
            self.GPIO.setup(pin, GPIO.OUT)
 
	self.write4bits(0x33) # initialization
	self.write4bits(0x32) # initialization
	self.write4bits(0x28) # 2 line 5x7 matrix
	self.write4bits(0x0C) # turn cursor off 0x0E to enable cursor
	self.write4bits(0x06) # shift cursor right
 
	self.displaycontrol = self.LCD_DISPLAYON | self.LCD_CURSOROFF | self.LCD_BLINKOFF
 
	self.displayfunction = self.LCD_4BITMODE | self.LCD_1LINE | self.LCD_5x8DOTS
	self.displayfunction |= self.LCD_2LINE
 
	""" Initialize to default text direction (for romance languages) """
	self.displaymode =  self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENT
	self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) #  set the entry mode
 
        self.clear()
 
 
    def begin(self, cols, lines):
 
	if (lines > 1):
		self.numlines = lines
    		self.displayfunction |= self.LCD_2LINE
		self.currline = 0
 
 
    def home(self):
 
	self.write4bits(self.LCD_RETURNHOME) # set cursor position to zero
	self.delayMicroseconds(3000) # this command takes a long time!
 
 
    def clear(self):
 
	self.write4bits(self.LCD_CLEARDISPLAY) # command to clear display
	self.delayMicroseconds(3000)	# 3000 microsecond sleep, clearing the display takes a long time
 
 
    def setCursor(self, col, row):
 
	self.row_offsets = [ 0x00, 0x40, 0x14, 0x54 ]
 
	if ( row > self.numlines ): 
		row = self.numlines - 1 # we count rows starting w/0
 
	self.write4bits(self.LCD_SETDDRAMADDR | (col + self.row_offsets[row]))
 
 
    def noDisplay(self): 
	""" Turn the display off (quickly) """
 
	self.displaycontrol &= ~self.LCD_DISPLAYON
	self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
 
    def display(self):
	""" Turn the display on (quickly) """
 
	self.displaycontrol |= self.LCD_DISPLAYON
	self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
 
    def noCursor(self):
	""" Turns the underline cursor on/off """
 
	self.displaycontrol &= ~self.LCD_CURSORON
	self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
 
    def cursor(self):
	""" Cursor On """
 
	self.displaycontrol |= self.LCD_CURSORON
	self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
 
    def noBlink(self):
	""" Turn on and off the blinking cursor """
 
	self.displaycontrol &= ~self.LCD_BLINKON
	self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
 
    def noBlink(self):
	""" Turn on and off the blinking cursor """
 
	self.displaycontrol &= ~self.LCD_BLINKON
	self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol)
 
 
    def DisplayLeft(self):
	""" These commands scroll the display without changing the RAM """
 
	self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVELEFT)
 
 
    def scrollDisplayRight(self):
	""" These commands scroll the display without changing the RAM """
 
	self.write4bits(self.LCD_CURSORSHIFT | self.LCD_DISPLAYMOVE | self.LCD_MOVERIGHT);
 
 
    def leftToRight(self):
	""" This is for text that flows Left to Right """
 
	self.displaymode |= self.LCD_ENTRYLEFT
	self.write4bits(self.LCD_ENTRYMODESET | self.displaymode);
 
 
    def rightToLeft(self):
	""" This is for text that flows Right to Left """
	self.displaymode &= ~self.LCD_ENTRYLEFT
	self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
 
 
    def autoscroll(self):
	""" This will 'right justify' text from the cursor """
 
	self.displaymode |= self.LCD_ENTRYSHIFTINCREMENT
	self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
 
 
    def noAutoscroll(self): 
	""" This will 'left justify' text from the cursor """
 
	self.displaymode &= ~self.LCD_ENTRYSHIFTINCREMENT
	self.write4bits(self.LCD_ENTRYMODESET | self.displaymode)
 
 
    def write4bits(self, bits, char_mode=False):
        """ Send command to LCD """
 
	self.delayMicroseconds(1000) # 1000 microsecond sleep
 
        bits=bin(bits)[2:].zfill(8)
 
        self.GPIO.output(self.pin_rs, char_mode)
 
        for pin in self.pins_db:
            self.GPIO.output(pin, False)
 
        for i in range(4):
            if bits[i] == "1":
                self.GPIO.output(self.pins_db[::-1][i], True)
 
	self.pulseEnable()
 
        for pin in self.pins_db:
            self.GPIO.output(pin, False)
 
        for i in range(4,8):
            if bits[i] == "1":
                self.GPIO.output(self.pins_db[::-1][i-4], True)
 
	self.pulseEnable()
 
 
    def delayMicroseconds(self, microseconds):
	seconds = microseconds / float(1000000)	# divide microseconds by 1 million for seconds
	sleep(seconds)
 
 
    def pulseEnable(self):
	self.GPIO.output(self.pin_e, False)
	self.delayMicroseconds(1)		# 1 microsecond pause - enable pulse must be > 450ns 
	self.GPIO.output(self.pin_e, True)
	self.delayMicroseconds(1)		# 1 microsecond pause - enable pulse must be > 450ns 
	self.GPIO.output(self.pin_e, False)
	self.delayMicroseconds(1)		# commands need > 37us to settle
 
 
    def message(self, text):
        """ Send string to LCD. Newline wraps to second line"""
 
        for char in text:
            if char == '\n':
                self.write4bits(0xC0) # next line
            else:
                self.write4bits(ord(char),True)
 
 
if __name__ == '__main__':
 
    lcd = lcd1602()
    lcd.clear()
    lcd.message("hello world!")


1602.py
#!/usr/bin/python
 
from lcd1602 import *
from datetime import *
import commands
 
def get_cpu_temp():
    tmp = open('/sys/class/thermal/thermal_zone0/temp')
    cpu = tmp.read()
    tmp.close()
    return '{:.2f}'.format( float(cpu)/1000 ) + ' C'
 
def get_gpu_temp():
    tmp = commands.getoutput('vcgencmd measure_temp|awk -F= \'{print $2}\'').replace('\'C','')
    gpu = float(tmp)
    return '{:.2f}'.format( gpu ) + ' C'
 
def get_time_now():
    return datetime.now().strftime('    %H:%M:%S\n   %Y-%m-%d')
 
def get_ip_info():
    return commands.getoutput('ifconfig wlan0|grep inet|awk -Faddr: \'{print $2}\'|awk \'{print $1}\'')
 
def get_mem_info():
    total= commands.getoutput('free -m|grep Mem:|awk \'{print $2}\'')  
    free = commands.getoutput('free -m|grep cache:|awk \'{print $4}\'')
    return 'MEM:\n    ' + free +' / '+ total +' M'
 
lcd = lcd1602()
lcd.clear()
 
if __name__ == '__main__':
 
    while(1):
        lcd.clear()
        lcd.message( get_ip_info() )
        sleep(5)
 
        lcd.clear()
        lcd.message( get_time_now() )
        sleep(5)
 
        lcd.clear()
        lcd.message( get_mem_info() )
        sleep(5)
 
        lcd.clear()
        lcd.message( 'CPU: ' + get_cpu_temp()+'\n' )
        lcd.message( 'GPU: ' + get_gpu_temp() )
        sleep(5)


将以上两个文件保存在同一个目录下,运行1602.py即可打印信息到LCD上。
自己看看代码就会用了
  • 大小: 226.3 KB
分享到:
评论

相关推荐

    lcd1602A显示屏资料

    LCD1602A显示屏是一种字符型液晶显示模块,广泛应用于嵌入式系统和各种电子设备中,用于显示字符、符号和数字等信息。该模块具有16个字符长度,2行显示能力,因此得名16x2。LCD1602A显示屏的接口定义、时序图以及...

    1602A显示屏的相关资源

    1602A显示屏是一种常见的LCD(液晶显示器)模块,常用于嵌入式系统和电子制作项目中,如单片机开发。这个标题和描述暗示了我们即将探讨的知识点主要围绕1602A显示屏的硬件特性、引脚功能、连接电路的方法以及相关的...

    LCD1602A显示屏数据手册

    LCD1602A显示屏数据手册

    单片机c51驱动1602A液晶屏

    首先,1602A液晶屏是基于HD44780控制器的常见16x2字符型液晶显示器,它可以显示两行、每行16个字符的文本信息。这种液晶屏在众多电子项目中被广泛应用,如智能家居设备、仪表盘、教学仪器等。 1. **硬件连接**: -...

    1602A液晶中文说明书里面有详细的参数

    1602A液晶显示屏是一种常见的字符型液晶模块,广泛应用于各种电子设备的显示界面,如Arduino、STM32等微控制器项目。这份"1602A液晶中文说明书"详细阐述了该显示器的各项参数和技术特性,对于理解和使用1602A液晶屏...

    SMC1602A液晶显示模块DATASHEET使用说明书.zip

    SMC1602A液晶显示模块DATASHEET使用说明书 SMC1602A 液晶显示模块的概述: SMC1602A 标准字符点阵型液晶显示模块(LCM),采用点阵型液晶显示器(LCD),可显示 16 个字符 X2 行西文字符, 字符尺寸为 2.95X4.35(WXH)mm...

    单片机c51驱动1602A液晶屏的驱动实验.doc

    单片机c51驱动1602A液晶屏的驱动实验

    I2C1602完整驱动程序1.rar_1602a-14i2c驱动_encoder stm32_i2c 1602 stm32_用i

    在本文中,我们将深入探讨如何使用STM32微控制器通过I2C总线来驱动1602 LCD显示屏,并结合旋转编码器实现数值的增减功能。这些技术在嵌入式系统、物联网设备以及各种仪表板应用中非常常见。 首先,我们需要了解1602...

    1602A液晶显示模块使用手册.pdf

    本 文 和 设 计 代 码 由 FPGA 爱 好 者 小 梅 哥 编 写,未 经 作 者 许 可,本 文 仅 允 许 网 络 论 坛 复 制 转 载,且 转 载 时 请 标明原作者。【工程源码】 LCD1602数据手册

    LCD1602A用户手册.

    LCD1602A液晶显示屏是一种广泛应用于电子项目中的显示设备,它能够显示16个字符,共2行。这种显示屏因其实惠的价格、简单的接口以及广泛的兼容性,在爱好者和工程师中非常受欢迎。使用LCD1602A显示模块可以方便地向...

    嵌入式单片机实战开发例程-STM32F103实现1602字符液晶屏显示程序.rar

    1、嵌入式物联网单片机项目开发实战。每个例程都经过实战检验,简单好用。 2、代码使用KEIL 标准库开发,当前在STM32F103运行,如果是STM32F103其他型号芯片,依然适用,请自行更改KEIL芯片型号以及FLASH容量即可。...

    1602 PDF 液晶的PDF

    ### SMC1602A LCD 显示模块关键技术知识点解析 #### 一、SMC1602A LCD 显示模块概述 - **模块类型**:SMC1602A是一款标准字符点阵型液晶显示模块(LCM),采用了点阵型液晶显示器(LCD)。 - **显示能力**:该模块...

    LCD.zip_1602a_单片机_液晶屏

    标题中的“LCD.zip_1602a_单片机_液晶屏”表明这是一个关于单片机控制1602A液晶显示屏的资源包。1602A液晶屏是电子工程领域...而对于有经验的开发者,这则是一个快速实现1602A液晶屏显示功能的工具,可以节省开发时间。

    DS1302时间显示

    DS1302 时间显示系统是基于 AVR 微控制器的液晶显示系统,使用 1602 液晶显示屏显示当前时间。该系统通过 AVR 微控制器控制 DS1302 时间芯片,读取当前时间,并将其显示在液晶显示屏上。 一、DS1302 时间芯片 DS...

    STM32+IIC+PCF8574T+1602A

    在本项目中,我们利用STM32通过IIC(Inter-Integrated Circuit)接口与PCF8574T扩展器通信,从而控制1602A液晶显示屏。下面将详细解释这些组件以及它们之间的交互。 首先,STM32是意法半导体(STMicroelectronics)...

    STM32F103C8T6 读取DS18B20温度,以四线制驱动1602A显示 显示位数根据温度动态长度

    在这个项目中,它被用来读取DS18B20数字温度传感器的数据,并通过四线制驱动1602A液晶显示屏来显示温度值。HAL库(Hardware Abstraction Layer,硬件抽象层)被用作编程接口,以简化编程过程。 DS18B20是一款单总线...

    液晶1602a的实验程序

    总之,这个压缩包提供的资源涵盖了1602A液晶屏的基本使用、驱动编程、扩展功能实现等多个方面,对于学习和实践单片机控制液晶显示技术非常有帮助。通过这些实例和教程,学习者不仅可以了解1602液晶屏的工作原理,还...

    LCD1602A液晶显示中文资料

    2. **清除显示**:清除显示屏上的所有字符。 3. **光标移动**:控制光标位置。 4. **显示移动**:控制显示内容滚动。 5. **设置显示位置**:设置光标到指定位置。 #### 六、指令表 根据给定的部分内容,我们可以...

    raspberry pi. wiring pi. 驱动1602A 显示字符

    在树莓派上,通过gpio链接1602a 16*2 lcd。并显示字符。

    lcd1602a中文资料.rar

    LCD1602A是一款广泛应用于电子制作、教学实验以及小型设备显示的液晶显示屏模块,主要特点是具有16字符、2行的显示能力。在这个"lcd1602a中文资料.rar"压缩包中,我们可以找到关于SMC1602A型号的详细资料,特别是...

Global site tag (gtag.js) - Google Analytics