树莓派使用1602

技术 · 2019-08-31 · 504 人浏览
  • 使用1602转接板
  • 需要先开启IIC

    • sudo raspi-config
      • 选择第五个 进去后选择I2C然后点是
  • 查看自己的I2C地址

    • ls /dev/i2c-*
      • 可能会返回/dev/i2c-1
      • 记住这个1
    • sudo i2cdetect -y 1
      • 如果说找不到命令,就需要安装I2C-tools
      • sudo apt-get install i2c-tools python-smbus
      • 记录一下地址
    • 在一个目录下写如LCD1602的包

      • #!/usr/bin/env python
        import time
        import smbus
        
        BUS = smbus.SMBus(1)
        
        def write_word(addr, data):
            global BLEN
            temp = data
            if BLEN == 1:
                temp |= 0x08
            else:
                temp &= 0xF7
            BUS.write_byte(addr ,temp)
        def send_command(comm):
            # Send bit7-4 firstly
            buf = comm & 0xF0
            buf |= 0x04 # RS = 0, RW = 0, EN = 1
            write_word(LCD_ADDR ,buf)
            time.sleep(0.002)
            buf &= 0xFB # Make EN = 0
            write_word(LCD_ADDR ,buf)
            # Send bit3-0 secondly
            buf = (comm & 0x0F) << 4
            buf |= 0x04 # RS = 0, RW = 0, EN = 1
            write_word(LCD_ADDR ,buf)
            time.sleep(0.002)
            buf &= 0xFB # Make EN = 0
            write_word(LCD_ADDR ,buf)
        def send_data(data):
            # Send bit7-4 firstly
            buf = data & 0xF0
            buf |= 0x05 # RS = 1, RW = 0, EN = 1
            write_word(LCD_ADDR ,buf)
            time.sleep(0.002)
            buf &= 0xFB # Make EN = 0
            write_word(LCD_ADDR ,buf)
            # Send bit3-0 secondly
            buf = (data & 0x0F) << 4
            buf |= 0x05 # RS = 1, RW = 0, EN = 1
            write_word(LCD_ADDR ,buf)
            time.sleep(0.002)
            buf &= 0xFB # Make EN = 0
            write_word(LCD_ADDR ,buf)
        def init(addr, bl):
        #    global BUS BUS = smbus.SMBus(1)
            global LCD_ADDR
            global BLEN
            LCD_ADDR = addr
            BLEN = bl
            try:
                send_command(0x33) # Must initialize to 8-line mode at first
                time.sleep(0.005)
                send_command(0x32) # Then initialize to 4-line mode
                time.sleep(0.005)
                send_command(0x28) # 2 Lines & 5*7 dots
                time.sleep(0.005)
                send_command(0x0C) # Enable display without cursor
                time.sleep(0.005)
                send_command(0x01) # Clear Screen
                BUS.write_byte(LCD_ADDR, 0x08)
            except:
                return False
            else:
                return True
        def clear():
            send_command(0x01) # Clear Screen def openlight(): # Enable the backlight
            BUS.write_byte(0x27,0x08)
            BUS.close()
        def write(x, y, str):
            if x < 0:
                x = 0
            if x > 15:
                x = 15
            if y <0:
                y = 0
            if y > 1:
                y = 1
            # Move cursor
            addr = 0x80 + 0x40 * y + x
            send_command(addr)
            for chr in str:
                send_data(ord(chr))
        if __name__ == '__main__':
            init(0x27, 1)
            write(4, 0, 'Hello')
            write(7, 1, 'world!')
        
      • 其他程序调用这个包 然后使用

        • import LCD1602
          
          LCD1602.init(0x3F, 1)
          
          LCD1602.write(0, 0, 'HELLO')
          LCD1602.write(1, 1, 'WORLD')

raspberry 1602显示屏
  1. 刘大喵 2019-08-31

    Mark~~~

Theme Jasmine by Kent Liao