#!/usr/bin/env python3# -*- coding: utf-8 -*-# ----湖南创乐博智能科技有限公司----# 文件名:LCD1602.py# 版本:V2.0# author: zhulin# 说明:液晶显示器模块#####################################################import timeimport smbusmakerobo_BUS = smbus.SMBus(1)# IIC LCD1602 液晶模块写入字def makerobo_write_word(addr, data): global makerobo_BLEN makerobo_temp = data if makerobo_BLEN == 1: makerobo_temp |= 0x08 else: makerobo_temp &= 0xF7 makerobo_BUS.write_byte(addr ,makerobo_temp) # 设置IIC LCD1602 液晶模块地址# IIC LCD1602 发送命令def makerobo_send_command(comm): # 首先发送 bit7-4 位 lcd_buf = comm & 0xF0 lcd_buf |= 0x04 # RS = 0, RW = 0, EN = 1 makerobo_write_word(LCD_ADDR ,lcd_buf) time.sleep(0.002) lcd_buf &= 0xFB # Make EN = 0 makerobo_write_word(LCD_ADDR ,lcd_buf) # 其次发送 bit3-0 位 lcd_buf = (comm & 0x0F) << 4 lcd_buf |= 0x04 # RS = 0, RW = 0, EN = 1 makerobo_write_word(LCD_ADDR ,lcd_buf) time.sleep(0.002) lcd_buf &= 0xFB # Make EN = 0 makerobo_write_word(LCD_ADDR ,lcd_buf)# IIC LCD1602 发送数据def makerobo_send_data(data): # 首先发送 bit7-4 位 lcd_buf = data & 0xF0 lcd_buf |= 0x05 # RS = 1, RW = 0, EN = 1 makerobo_write_word(LCD_ADDR ,lcd_buf) time.sleep(0.002) lcd_buf &= 0xFB # Make EN = 0 makerobo_write_word(LCD_ADDR ,lcd_buf) # 其次发送 bit3-0 位 lcd_buf = (data & 0x0F) << 4 lcd_buf |= 0x05 # RS = 1, RW = 0, EN = 1 makerobo_write_word(LCD_ADDR ,lcd_buf) time.sleep(0.002) lcd_buf &= 0xFB # Make EN = 0 makerobo_write_word(LCD_ADDR ,lcd_buf)# IIC LCD1602 初始化def makerobo_init(addr, bl): global LCD_ADDR global makerobo_BLEN LCD_ADDR = addr makerobo_BLEN = bl try: makerobo_send_command(0x33) # 必须先初始化到8线模式 time.sleep(0.005) makerobo_send_command(0x32) # 然后初始化为4行模式 time.sleep(0.005) makerobo_send_command(0x28) # 2 行 & 5*7 点位 time.sleep(0.005) makerobo_send_command(0x0C) # 启用无光标显示 time.sleep(0.005) makerobo_send_command(0x01) # 清除显示 makerobo_BUS.write_byte(LCD_ADDR, 0x08) except: return False else: return True# LCD 1602 清空显示函数def makerobo_clear(): makerobo_send_command(0x01) # 清除显示# LCD 1602 使能背光显示def makerobo_openlight(): makerobo_BUS.write_byte(0x27,0x08) # 使能背光显示命令 makerobo_BUS.close() # 关闭总线# LCD 1602 显示函数def makerobo_write(lcd_x, lcd_y, lcd_str): # 选择行与列 if lcd_x < 0: lcd_x = 0 if lcd_x > 15: lcd_x = 15 if lcd_y <0: lcd_y = 0 if lcd_y > 1: lcd_y = 1 # 移动光标 lcd_addr = 0x80 + 0x40 * lcd_y + lcd_x makerobo_send_command(lcd_addr) # 发送地址 for chr in lcd_str: # 获取字符串长度 makerobo_send_data(ord(chr)) # 发送显示# 程序入口if __name__ == '__main__': makerobo_init(0x27, 1) # 初始化显示屏 makerobo_write(4, 0, 'Hello') # 在第一行显示Hello makerobo_write(7, 1, 'world!') # 在第二行显示world!