1. #!/usr/bin/env python3
    2. # -*- coding: utf-8 -*-
    3. # ----湖南创乐博智能科技有限公司----
    4. # 文件名:LCD1602.py
    5. # 版本:V2.0
    6. # author: zhulin
    7. # 说明:液晶显示器模块
    8. #####################################################
    9. import time
    10. import smbus
    11. makerobo_BUS = smbus.SMBus(1)
    12. # IIC LCD1602 液晶模块写入字
    13. def makerobo_write_word(addr, data):
    14. global makerobo_BLEN
    15. makerobo_temp = data
    16. if makerobo_BLEN == 1:
    17. makerobo_temp |= 0x08
    18. else:
    19. makerobo_temp &= 0xF7
    20. makerobo_BUS.write_byte(addr ,makerobo_temp) # 设置IIC LCD1602 液晶模块地址
    21. # IIC LCD1602 发送命令
    22. def makerobo_send_command(comm):
    23. # 首先发送 bit7-4 位
    24. lcd_buf = comm & 0xF0
    25. lcd_buf |= 0x04 # RS = 0, RW = 0, EN = 1
    26. makerobo_write_word(LCD_ADDR ,lcd_buf)
    27. time.sleep(0.002)
    28. lcd_buf &= 0xFB # Make EN = 0
    29. makerobo_write_word(LCD_ADDR ,lcd_buf)
    30. # 其次发送 bit3-0 位
    31. lcd_buf = (comm & 0x0F) << 4
    32. lcd_buf |= 0x04 # RS = 0, RW = 0, EN = 1
    33. makerobo_write_word(LCD_ADDR ,lcd_buf)
    34. time.sleep(0.002)
    35. lcd_buf &= 0xFB # Make EN = 0
    36. makerobo_write_word(LCD_ADDR ,lcd_buf)
    37. # IIC LCD1602 发送数据
    38. def makerobo_send_data(data):
    39. # 首先发送 bit7-4 位
    40. lcd_buf = data & 0xF0
    41. lcd_buf |= 0x05 # RS = 1, RW = 0, EN = 1
    42. makerobo_write_word(LCD_ADDR ,lcd_buf)
    43. time.sleep(0.002)
    44. lcd_buf &= 0xFB # Make EN = 0
    45. makerobo_write_word(LCD_ADDR ,lcd_buf)
    46. # 其次发送 bit3-0 位
    47. lcd_buf = (data & 0x0F) << 4
    48. lcd_buf |= 0x05 # RS = 1, RW = 0, EN = 1
    49. makerobo_write_word(LCD_ADDR ,lcd_buf)
    50. time.sleep(0.002)
    51. lcd_buf &= 0xFB # Make EN = 0
    52. makerobo_write_word(LCD_ADDR ,lcd_buf)
    53. # IIC LCD1602 初始化
    54. def makerobo_init(addr, bl):
    55. global LCD_ADDR
    56. global makerobo_BLEN
    57. LCD_ADDR = addr
    58. makerobo_BLEN = bl
    59. try:
    60. makerobo_send_command(0x33) # 必须先初始化到8线模式
    61. time.sleep(0.005)
    62. makerobo_send_command(0x32) # 然后初始化为4行模式
    63. time.sleep(0.005)
    64. makerobo_send_command(0x28) # 2 行 & 5*7 点位
    65. time.sleep(0.005)
    66. makerobo_send_command(0x0C) # 启用无光标显示
    67. time.sleep(0.005)
    68. makerobo_send_command(0x01) # 清除显示
    69. makerobo_BUS.write_byte(LCD_ADDR, 0x08)
    70. except:
    71. return False
    72. else:
    73. return True
    74. # LCD 1602 清空显示函数
    75. def makerobo_clear():
    76. makerobo_send_command(0x01) # 清除显示
    77. # LCD 1602 使能背光显示
    78. def makerobo_openlight():
    79. makerobo_BUS.write_byte(0x27,0x08) # 使能背光显示命令
    80. makerobo_BUS.close() # 关闭总线
    81. # LCD 1602 显示函数
    82. def makerobo_write(lcd_x, lcd_y, lcd_str):
    83. # 选择行与列
    84. if lcd_x < 0:
    85. lcd_x = 0
    86. if lcd_x > 15:
    87. lcd_x = 15
    88. if lcd_y <0:
    89. lcd_y = 0
    90. if lcd_y > 1:
    91. lcd_y = 1
    92. # 移动光标
    93. lcd_addr = 0x80 + 0x40 * lcd_y + lcd_x
    94. makerobo_send_command(lcd_addr) # 发送地址
    95. for chr in lcd_str: # 获取字符串长度
    96. makerobo_send_data(ord(chr)) # 发送显示
    97. # 程序入口
    98. if __name__ == '__main__':
    99. makerobo_init(0x27, 1) # 初始化显示屏
    100. makerobo_write(4, 0, 'Hello') # 在第一行显示Hello
    101. makerobo_write(7, 1, 'world!') # 在第二行显示world!