我想要一个micropython驱动带中文字库的st7920的程序
时间: 2023-09-18 19:07:09 浏览: 103
以下是一个micropython驱动带中文字库的st7920的程序:
```python
from machine import Pin, SPI
from time import sleep_ms
# ST7920 Commands
LCD_CLEAR_DISPLAY = 0x01
LCD_RETURN_HOME = 0x02
LCD_ENTRY_MODE_SET = 0x04
LCD_DISPLAY_CONTROL = 0x08
LCD_CURSOR_SHIFT = 0x10
LCD_FUNCTION_SET = 0x20
LCD_SET_CGRAM_ADDR = 0x40
LCD_SET_DDRAM_ADDR = 0x80
# Entry mode flags
LCD_ENTRY_RIGHT = 0x00
LCD_ENTRY_LEFT = 0x02
LCD_ENTRY_SHIFT_INCREMENT = 0x01
LCD_ENTRY_SHIFT_DECREMENT = 0x00
# Display control flags
LCD_DISPLAY_ON = 0x04
LCD_DISPLAY_OFF = 0x00
LCD_CURSOR_ON = 0x02
LCD_CURSOR_OFF = 0x00
LCD_BLINK_ON = 0x01
LCD_BLINK_OFF = 0x00
# Function set flags
LCD_8BIT_MODE = 0x10
LCD_4BIT_MODE = 0x00
LCD_2LINE_MODE = 0x08
LCD_1LINE_MODE = 0x00
LCD_5X10_DOTS = 0x04
LCD_5X8_DOTS = 0x00
class ST7920:
def __init__(self, spi, cs, a0, reset=None):
self.spi = spi
self.cs = cs
self.a0 = a0
self.reset = reset
# Initialize pins
self.cs.init(Pin.OUT, value=1)
self.a0.init(Pin.OUT, value=0)
if self.reset:
self.reset.init(Pin.OUT, value=1)
self.reset.value(0)
sleep_ms(50)
self.reset.value(1)
sleep_ms(50)
# Initialize display
self._send_command(LCD_FUNCTION_SET | LCD_8BIT_MODE | LCD_2LINE_MODE | LCD_5X8_DOTS)
self._send_command(LCD_DISPLAY_CONTROL | LCD_DISPLAY_ON | LCD_CURSOR_OFF | LCD_BLINK_OFF)
self._send_command(LCD_ENTRY_MODE_SET | LCD_ENTRY_LEFT | LCD_ENTRY_SHIFT_DECREMENT)
self.clear()
def clear(self):
self._send_command(LCD_CLEAR_DISPLAY)
sleep_ms(2)
def home(self):
self._send_command(LCD_RETURN_HOME)
sleep_ms(2)
def set_cursor(self, col, row):
row_offsets = [0x00, 0x40]
self._send_command(LCD_SET_DDRAM_ADDR | (col + row_offsets[row]))
def write_char(self, char):
self.a0.value(1)
self.spi.write(bytearray([char]))
def write_string(self, string):
for char in string:
self.write_char(ord(char))
def create_char(self, location, charmap):
self._send_command(LCD_SET_CGRAM_ADDR | (location << 3))
self.a0.value(1)
self.spi.write(bytearray(charmap))
def _send_command(self, command):
self.a0.value(0)
self.cs.value(0)
self.spi.write(bytearray([command]))
self.cs.value(1)
def write_text(self, x, y, text):
self.set_cursor(x, y)
self.write_string(text)
def write_chinese(self, x, y, text):
self.set_cursor(x, y)
for char in text:
self.write_char(ord(char) & 0xff)
self.write_char(ord(char) >> 8)
# Example usage:
spi = SPI(1, baudrate=8000000, polarity=0, phase=0)
cs = Pin(15, Pin.OUT)
a0 = Pin(2, Pin.OUT)
display = ST7920(spi, cs, a0)
# Write text and Chinese characters
display.write_text(0, 0, 'Hello, world!')
display.write_chinese(0, 1, '你好,世界!')
```
这个程序使用了SPI通信协议来与ST7920 LCD进行通信。在初始化时,需要传入SPI实例、片选引脚、A0引脚以及RESET引脚(如果有)。然后在初始化函数中,设置了LCD的一些基本参数,并清除了显示屏。接下来,程序提供了一些常用的函数,例如清屏、回到首页、设置光标位置、写入字符、写入字符串、创建自定义字符等。最后,程序提供了一个写入文本和中文字符的例子,可以供参考。