今日目標
學習使用帶有I2C轉接模組的LCD1602螢幕,透過2根訊號線控制顯示器,並在兩行畫面上印出乾淨對齊的狀態文字。
程式碼
import time
from machine import Pin,I2C
classI2cLcd1602:
def init(self,i2c,addr=0x27):
self.i2c=i2c
self.addr=addr
self.backlight=0x08
self._write(0x03);self._write(0x03);self._write(0x03);self._write(0x02)
self.cmd(0x28)
self.cmd(0x0C)
self.cmd(0x06)
self.clear()
def _write_nibble(self,nibble,mode=0):
data=(nibble&0xF0)|mode|self.backlight|0x04
self.i2c.writeto(self.addr,bytes([data]))
self.i2c.writeto(self.addr,bytes([data&~0x04]))
def _write_(self,byte,mode=0):
self._write_nibble(byte&0xF0,mode)
self._write_nibble((byte << 4)&0xF0,mode)
def cmd(self,command):
self._write(command,mode=0)
def clear(self):
self.cmd(0x01)
time.sleep_ms(2)
def move_to(self,col,row):
addr=col+(0x40 if row else 0x00)
self.cmd(0x80|addr)
def putstr(self,string):
for char in string:
self._write(ord(char),mode=0x01)
i2c=I2C(0,scl=Pin(22),sda=Pin(21),freq=400000)
lcd=I2cLcd1602(i2c,addr=0x27)
print("===LCD1602 I2C顯示系統啟動===")
lcd.clear()
lcd.move_to(0,0)
lcd.putstr("Wokwi IoT Series")
lcd.move_to(0,1)
lcd.putstr("Day 18:LCD1602")
time.sleep(2)
counter=0
while True:
counter+=1
lcd.move_to(0,0)
lcd.putstr("System:RUNNING")
lcd.move_to(0,1)
lcd.putstr(f"Uptime:{counter:4d}sec")
time.sleep(1)
心得
今天學習物聯網與單晶片領域中最長青的LCD1602顯示器,雖然它的畫質與圖形能力不如OLED螢幕豐富,但其對比度高、低成本與極佳的戶外辨識度,讓它在許多商業產品中依然屹立不搖。掌握了I2C通訊後,控制它就變得非常輕鬆。