新买来的开发板,接上USB线插在电脑上,打开“我的电脑”,开发板会以磁盘的方式显示。
我们把在文末下载的固件拷贝进去,然后这个磁盘就会消失。固件就烧好了,简单吧。
从文末下载zadig-2.7.exe,安装树莓派驱动,找到com口。
PS: 如果想要开发板以磁盘方式出现,首先按住开发板上的boot键不放,然后将USB线插入电脑,然后松开boot键。就会看到了。
三、液晶屏幕驱动
st75256.py
#
# MicroPython st75256 OLED driver, SPI interfaces
#
from micropython import const
from font import bytech,ascii_table_8x16,ascii_table_5x8
import framebuf
import machine
import utime
# Subclassing FrameBuffer provides support for graphics primitives
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
class ST75256(framebuf.FrameBuffer):
def __init__(self,width,height,spi,dc,res,cs,external_vcc=False):
self.width=width
self.height=height
self.reset=res
self.rate=10*1024*1024
dc.init(dc.OUT,value=0)
res.init(res.OUT,value=0)
cs.init(cs.OUT,value=1)
self.spi=spi
self.dc=dc
self.res=res
self.cs=cs
import time
self.res(1)
time.sleep_ms(1)
self.res(0)
time.sleep_ms(10)
self.res(1)
self.external_vcc=external_vcc
self.pages = self.height//8
self.buffer = bytearray(self.pages * self.width)
super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB)
self.init_display()
def transfer_command(self,cmd):
self.spi.init(baudrate=self.rate,polarity=0,phase=0)
self.cs(0)
self.dc(0)
self.spi.write(bytearray([cmd]))
self.cs(1)
def transfer_data(self,buf):
self.spi.init(baudrate=self.rate,polarity=0,phase=0)
self.cs(0)
self.dc(1)
if type(buf)==type(0x11):
self.spi.write(bytearray([buf]))
else:
self.spi.write(buf)
self.cs(1)
#初始化液晶模块
def init_display(self):
self.reset.value(0)
utime.sleep_ms(100)
self.reset.value(1)
utime.sleep_ms(100)
self.transfer_command(0x30) #EXT=0
self.transfer_command(0x94) #Sleep out
self.transfer_command(0x31) #EXT=1
self.transfer_command(0xD7) #Autoread disable
self.transfer_data(0X9F) #
self.transfer_command(0x32) #Analog SET
self.transfer_data(0x00) #OSC Frequency adjustment
self.transfer_data(0x01) #Frequency on booster capacitors 6KHz
self.transfer_data(0x03) #Bias=1/11
self.transfer_command(0x20) # Gray Level
self.transfer_data(0x01)
self.transfer_data(0x03)
self.transfer_data(0x05)
self.transfer_data(0x07)
self.transfer_data(0x09)
self.transfer_data(0x0b)
self.transfer_data(0x0d)
self.transfer_data(0x10)
self.transfer_data(0x11)
self.transfer_data(0x13)
self.transfer_data(0x15)
self.transfer_data(0x17)
self.transfer_data(0x19)
self.transfer_data(0x1b)
self.transfer_data(0x1d)
self.transfer_data(0x1f)
self.transfer_command(0x30) #EXT=0
self.transfer_command(0x75) #Page Address setting
self.transfer_data(0X00) # XS=0
self.transfer_data(0X14) # XE=159 0x28
self.transfer_command(0x15) #Clumn Address setting
self.transfer_data(0X00) # XS=0
self.transfer_data(0Xff) # XE=256
self.transfer_command(0xBC) #Data scan direction
self.transfer_data(0x00) #MX.MY=Normal
self.transfer_data(0xA6)
self.transfer_command(0xCA) #Display Control
self.transfer_data(0X00) #
self.transfer_data(0X9F) #Duty=160
self.transfer_data(0X20) #Nline=off
self.transfer_command(0xF0) #Display Mode
self.transfer_data(0X10) #10=Monochrome Mode,11=4Gray
self.transfer_command(0x81) #EV control
self.transfer_data(0x36) #VPR[5-0]
self.transfer_data(0x04) #VPR[8-6]
self.transfer_command(0x20) #Power control
self.transfer_data(0x0B) #D0=regulator D1=follower D3=booste, on:1 off:0
utime.sleep_ms(100)
self.transfer_command(0xAF) #Display on
self.transfer_command(0x0C) #数据格式,如果设为 0x0C:表示选择 LSB(DB0)在顶,如果设为 0x08:表示选择LSB(DB0)在底
def poweroff(self):
transfer_command(0x94)
def poweron(self):
transfer_command(0x95)
def lcd_address(self,x,y,x_total,y_total):
x=x
y=y+4#为什么要加4呢?每四行为一列?这里的y是页,也就是行0~15行
self.transfer_command(0x15) #Set Column Address
self.transfer_data(x)
self.transfer_data(x+x_total-1)
self.transfer_command(0x75) #Set Page Address
self.transfer_data(y)
self.transfer_data(y+y_total-1)
self.transfer_command(0x30)
self.transfer_command(0x5c)
def clear_screen(self):#
self.lcd_address(0,0,self.width,self.pages)
for i in range(self.pages):
for j in range(self.width):
self.transfer_data(0x00)
def show(self):#显示缓冲区的内容
self.lcd_address(0,0,self.width,self.pages)
self.transfer_data(self.buffer)
def show_buf(self,buf):#显示缓冲区的内容
self.lcd_address(0,0,self.width,self.pages)
self.transfer_data(buf)
def text_cn(self,text,x,y):#写汉字到缓冲
text=list(text.encode("utf-8"))
offset_=0
page=y//8
page=page%self.pages
if(x>247):
x=0
page+=2
text_= [text[i:i+3] for i in