600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 物联网开发笔记(69)- 使用Micropython开发树莓派pico开发板raspberry pi pico之

物联网开发笔记(69)- 使用Micropython开发树莓派pico开发板raspberry pi pico之

时间:2023-05-09 05:50:46

相关推荐

物联网开发笔记(69)- 使用Micropython开发树莓派pico开发板raspberry pi pico之

一、目的

这一节我们学习如何使用我们的树莓派pico开发板raspberry pi pico来控制晶联JLX172104G-590液晶模块。

二、环境

Win10 + 树莓派pico开发板raspberry pi pico + Thonny IDE + 几根杜邦线 + 晶联JLX172104G-590液晶模块(驱动IC:ST75256,分辨率:172*104)

接线方法:

新买来的开发板,接上USB线插在电脑上,打开“我的电脑”,开发板会以磁盘的方式显示。

我们把在文末下载的固件拷贝进去,然后这个磁盘就会消失。固件就烧好了,简单吧。

从文末下载zadig-2.7.exe,安装树莓派驱动,找到com口。

PS: 如果想要开发板以磁盘方式出现,首先按住开发板上的boot键不放,然后将USB线插入电脑,然后松开boot键。就会看到了。

三、液晶屏幕驱动

st75256.py

## MicroPython st75256 OLED driver, SPI interfaces#from micropython import constfrom font import bytech,ascii_table_8x16,ascii_table_5x8import framebufimport machineimport utime# Subclassing FrameBuffer provides support for graphics primitives# /en/latest/pyboard/library/framebuf.htmlclass ST75256(framebuf.FrameBuffer):def __init__(self,width,height,spi,dc,res,cs,external_vcc=False):self.width=widthself.height=heightself.reset=resself.rate=10*1024*1024dc.init(dc.OUT,value=0)res.init(res.OUT,value=0)cs.init(cs.OUT,value=1)self.spi=spiself.dc=dcself.res=resself.cs=csimport timeself.res(1)time.sleep_ms(1)self.res(0)time.sleep_ms(10)self.res(1)self.external_vcc=external_vccself.pages = self.height//8self.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 6KHzself.transfer_data(0x03) #Bias=1/11self.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 onself.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=xy=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_=0page=y//8page=page%self.pagesif(x>247):x=0page+=2text_= [text[i:i+3] for i in range(0,len(text),3)]#取出汉字的3字节utf-8编码for k in text_:b1=bytearray(k)#将中文3字节utf-8编码还原byte_data=bytech[b1.decode()]for i in range(0,16):self.buffer[256*page+x+i+offset_]=byte_data[i]#print(x_axis,y_axis)self.buffer[256*(page+1)+x+i+offset_]=byte_data[i+16]offset_+=16def icon(self,bmp,x,y,reverse=0):#32x32page=y//8page=page%self.pagesif(x>247):x=0page+=2for i in range(4):for j in range(32):if reverse:self.buffer[256*(page+i)+x+j]=~bmp[i*32+j]else:self.buffer[256*(page+i)+x+j]=bmp[i*32+j]def text_big(self,text,x,y,reverse=0,earse=0):#显示8x16的点阵的字符串,括号里的参数分别为(字符串,x,y坐标,是否反转,默认不反转)page=y//8page=page%self.pagesif(x>248):x=1page+=2self.earse=earsei=0text=list(text.encode("ascii"))while(i<len(text)):if((text[i]>=0x20) and (text[i]<=0x7e)):j=(text[i]-0x20)*16for n in [0,1]:for k in range(8):if(reverse==1):self.buffer[256*(page+n)+x+k]=~ ascii_table_8x16[j+k+8*n]else:self.buffer[256*(page+n)+x+k]=ascii_table_8x16[j+k+8*n]#写数据到缓冲区,每写完1字节的数据后列地址自动加1 i=i+1x+=8else:i=i+1def text_small(self,text,x,y,reverse=0,earse=0):#5x8点阵的英文字符串page=y//8page=page%self.pagesself.earse=earsei=0text=list(text.encode("ascii"))while(i<len(text)):if((text[i]>=0x20) and (text[i]<=0x7e)):j=(text[i]-0x20)*5for n in range(5):if(reverse==1):self.buffer[256*page+x+n]=~ascii_table_5x8[j+n]else:self.buffer[256*page+x+n]=ascii_table_5x8[j+n]i+=1x+=6else:i+=1##led driver end#

四、字体制作

1,使用工具软件pctolcd2002制作字模,使用方法自行百度哈。

2, 字模文件代码如下font.py:

## 汉字字模,软件pctolcd2002,阳码,列行式,逆向、c51#bytech = {'计':[0x40,0x40,0x42,0xCC,0x00,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x7F,0x20,0x10,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00],'算':[0x08,0x04,0xF3,0x52,0x56,0x52,0x52,0x50,0x54,0x53,0x52,0x56,0xF2,0x02,0x02,0x00,0x10,0x10,0x97,0x55,0x3D,0x15,0x15,0x15,0x15,0x15,0xFD,0x15,0x17,0x10,0x10,0x00],'器':[0x80,0x80,0x9E,0x92,0x92,0x92,0x9E,0xE0,0x80,0x9E,0xB2,0xD2,0x92,0x9E,0x80,0x00,0x08,0x08,0xF4,0x94,0x92,0x92,0xF1,0x00,0x01,0xF2,0x92,0x94,0x94,0xF8,0x08,0x00],'爱':[0x80,0x64,0x2C,0x34,0x24,0x24,0xEC,0x32,0x22,0x22,0x32,0x2E,0x23,0xA2,0x60,0x00,0x00,0x41,0x21,0x91,0x89,0x87,0x4D,0x55,0x25,0x25,0x55,0x4D,0x81,0x80,0x80,0x00],'好':[0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00],'者':[0x20,0x20,0x24,0x24,0x24,0x24,0xBF,0x64,0x24,0x34,0x28,0x24,0x22,0x20,0x20,0x00,0x10,0x08,0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00],}ascii_table_8x16=[##粗体8x16点阵的ASCII码的点阵数据,从"JLX-GB2312"型号的字库IC中读出来的国标的。0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,##space0x00,0x00,0x38,0xFC, 0xFC,0x38,0x00,0x00, 0x00,0x00,0x00,0x0D, 0x0D,0x00,0x00,0x00,##-!-ASCII码:0X210x00,0x0E,0x1E,0x00, 0x00,0x1E,0x0E,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,##-"-0x20,0xF8,0xF8,0x20, 0xF8,0xF8,0x20,0x00, 0x02,0x0F,0x0F,0x02, 0x0F,0x0F,0x02,0x00,##-#-0x38,0x7C,0x44,0x47, 0x47,0xCC,0x98,0x00, 0x06,0x0C,0x08,0x38, 0x38,0x0F,0x07,0x00,##-$-0x30,0x30,0x00,0x80, 0xC0,0x60,0x30,0x00, 0x0C,0x06,0x03,0x01, 0x00,0x0C,0x0C,0x00,##-%-0x80,0xD8,0x7C,0xE4, 0xBC,0xD8,0x40,0x00, 0x07,0x0F,0x08,0x08, 0x07,0x0F,0x08,0x00,##-&-0x00,0x10,0x1E,0x0E, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,##-'-0x00,0x00,0xF0,0xF8, 0x0C,0x04,0x00,0x00, 0x00,0x00,0x03,0x07, 0x0C,0x08,0x00,0x00,##-(-0x00,0x00,0x04,0x0C, 0xF8,0xF0,0x00,0x00, 0x00,0x00,0x08,0x0C, 0x07,0x03,0x00,0x00,##-)-0x80,0xA0,0xE0,0xC0, 0xC0,0xE0,0xA0,0x80, 0x00,0x02,0x03,0x01, 0x01,0x03,0x02,0x00,##-*-ASCII码:0X2A0x00,0x80,0x80,0xE0, 0xE0,0x80,0x80,0x00, 0x00,0x00,0x00,0x03, 0x03,0x00,0x00,0x00,##-+-0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x10,0x1E, 0x0E,0x00,0x00,0x00,##-,-0x80,0x80,0x80,0x80, 0x80,0x80,0x80,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,##---0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0C, 0x0C,0x00,0x00,0x00,##-.-0x00,0x00,0x00,0x80, 0xC0,0x60,0x30,0x00, 0x0C,0x06,0x03,0x01, 0x00,0x00,0x00,0x00,##-#-0xF8,0xF8,0x0C,0xC4, 0x0C,0xF8,0xF0,0x00, 0x03,0x07,0x0C,0x08, 0x0C,0x07,0x03,0x00,##-0-ASCII码:0X300x00,0x10,0x18,0xFC, 0xFC,0x00,0x00,0x00, 0x00,0x08,0x08,0x0F, 0x0F,0x08,0x08,0x00,##-1-0x08,0x0C,0x84,0xC4, 0x64,0x3C,0x18,0x00, 0x0E,0x0F,0x09,0x08, 0x08,0x0C,0x0C,0x00,##-2-0x08,0x0C,0x44,0x44, 0x44,0xFC,0xB8,0x00, 0x04,0x0C,0x08,0x08, 0x08,0x0F,0x07,0x00,##-3-0xC0,0xE0,0xB0,0x98, 0xFC,0xFC,0x80,0x00, 0x00,0x00,0x00,0x08, 0x0F,0x0F,0x08,0x00,##-4-ASCII码:0X340x7C,0x7C,0x44,0x44, 0x44,0xC4,0x84,0x00, 0x04,0x0C,0x08,0x08, 0x08,0x0F,0x07,0x00,##-5-0xF0,0xF8,0x4C,0x44, 0x44,0xC0,0x80,0x00, 0x07,0x0F,0x08,0x08, 0x08,0x0F,0x07,0x00,##-6-0x0C,0x0C,0x04,0x84, 0xC4,0x7C,0x3C,0x00, 0x00,0x00,0x0F,0x0F, 0x00,0x00,0x00,0x00,##-7-0xB8,0xFC,0x44,0x44, 0x44,0xFC,0xB8,0x00, 0x07,0x0F,0x08,0x08, 0x08,0x0F,0x07,0x00,##-8-0x38,0x7C,0x44,0x44, 0x44,0xFC,0xF8,0x00, 0x00,0x08,0x08,0x08, 0x0C,0x07,0x03,0x00,##-9-0x00,0x00,0x00,0x30, 0x30,0x00,0x00,0x00, 0x00,0x00,0x00,0x06, 0x06,0x00,0x00,0x00,##-:-0x00,0x00,0x00,0x30, 0x30,0x00,0x00,0x00, 0x00,0x00,0x08,0x0E, 0x06,0x00,0x00,0x00,##-;-0x00,0x80,0xC0,0x60, 0x30,0x18,0x08,0x00, 0x00,0x00,0x01,0x03, 0x06,0x0C,0x08,0x00,##-<-0x00,0x20,0x20,0x20, 0x20,0x20,0x20,0x00, 0x00,0x01,0x01,0x01, 0x01,0x01,0x01,0x00,##-=-0x00,0x08,0x18,0x30, 0x60,0xC0,0x80,0x00, 0x00,0x08,0x0C,0x06, 0x03,0x01,0x00,0x00,##->-ASCII码:0X3E0x18,0x1C,0x04,0xC4, 0xE4,0x3C,0x18,0x00, 0x00,0x00,0x00,0x0D, 0x0D,0x00,0x00,0x00,##-?-0xF0,0xF0,0x08,0xC8, 0xC8,0xF8,0xF0,0x00, 0x07,0x0F,0x08,0x0B, 0x0B,0x0B,0x01,0x00,##-@-0xE0,0xF0,0x98,0x8C, 0x98,0xF0,0xE0,0x00, 0x0F,0x0F,0x00,0x00, 0x00,0x0F,0x0F,0x00,##-A-ASCII码:0X410x04,0xFC,0xFC,0x44, 0x44,0xFC,0xB8,0x00, 0x08,0x0F,0x0F,0x08, 0x08,0x0F,0x07,0x00,##-B-0xF0,0xF8,0x0C,0x04, 0x04,0x0C,0x18,0x00, 0x03,0x07,0x0C,0x08, 0x08,0x0C,0x06,0x00,##-C-0x04,0xFC,0xFC,0x04, 0x0C,0xF8,0xF0,0x00, 0x08,0x0F,0x0F,0x08, 0x0C,0x07,0x03,0x00,##-D-0x04,0xFC,0xFC,0x44, 0xE4,0x0C,0x1C,0x00, 0x08,0x0F,0x0F,0x08, 0x08,0x0C,0x0E,0x00,##-E-0x04,0xFC,0xFC,0x44, 0xE4,0x0C,0x1C,0x00, 0x08,0x0F,0x0F,0x08, 0x00,0x00,0x00,0x00,##-F-0xF0,0xF8,0x0C,0x84, 0x84,0x8C,0x98,0x00, 0x03,0x07,0x0C,0x08, 0x08,0x07,0x0F,0x00,##-G-0xFC,0xFC,0x40,0x40, 0x40,0xFC,0xFC,0x00, 0x0F,0x0F,0x00,0x00, 0x00,0x0F,0x0F,0x00,##-H-ASCII码:0X480x00,0x00,0x04,0xFC, 0xFC,0x04,0x00,0x00, 0x00,0x00,0x08,0x0F, 0x0F,0x08,0x00,0x00,##-I-0x00,0x00,0x00,0x04, 0xFC,0xFC,0x04,0x00, 0x07,0x0F,0x08,0x08, 0x0F,0x07,0x00,0x00,##-J-0x04,0xFC,0xFC,0xC0, 0xE0,0x3C,0x1C,0x00, 0x08,0x0F,0x0F,0x00, 0x01,0x0F,0x0E,0x00,##-K-0x04,0xFC,0xFC,0x04, 0x00,0x00,0x00,0x00, 0x08,0x0F,0x0F,0x08, 0x08,0x0C,0x0E,0x00,##-L-0xFC,0xFC,0x38,0x70, 0x38,0xFC,0xFC,0x00, 0x0F,0x0F,0x00,0x00, 0x00,0x0F,0x0F,0x00,##-M-0xFC,0xFC,0x38,0x70, 0xE0,0xFC,0xFC,0x00, 0x0F,0x0F,0x00,0x00, 0x00,0x0F,0x0F,0x00,##-N-0xF8,0xFC,0x04,0x04, 0x04,0xFC,0xF8,0x00, 0x07,0x0F,0x08,0x08, 0x08,0x0F,0x07,0x00,##-O-0x04,0xFC,0xFC,0x44, 0x44,0x7C,0x38,0x00, 0x08,0x0F,0x0F,0x08, 0x00,0x00,0x00,0x00,##-P-0xF8,0xFC,0x04,0x04, 0x04,0xFC,0xF8,0x00, 0x07,0x0F,0x08,0x0E, 0x3C,0x3F,0x27,0x00,##-Q-0x04,0xFC,0xFC,0x44, 0xC4,0xFC,0x38,0x00, 0x08,0x0F,0x0F,0x00, 0x00,0x0F,0x0F,0x00,##-R-0x18,0x3C,0x64,0x44, 0xC4,0x9C,0x18,0x00, 0x06,0x0E,0x08,0x08, 0x08,0x0F,0x07,0x00,##-S- 0x00,0x1C,0x0C,0xFC, 0xFC,0x0C,0x1C,0x00, 0x00,0x00,0x08,0x0F, 0x0F,0x08,0x00,0x00,##-T-0xFC,0xFC,0x00,0x00, 0x00,0xFC,0xFC,0x00, 0x07,0x0F,0x08,0x08, 0x08,0x0F,0x07,0x00,##-U-0xFC,0xFC,0x00,0x00, 0x00,0xFC,0xFC,0x00, 0x01,0x03,0x06,0x0C, 0x06,0x03,0x01,0x00,##-V-0xFC,0xFC,0x00,0x00, 0x00,0xFC,0xFC,0x00, 0x07,0x0F,0x0E,0x03, 0x0E,0x0F,0x07,0x00,##-W-0x0C,0x3C,0xF0,0xE0, 0xF0,0x3C,0x0C,0x00, 0x0C,0x0F,0x03,0x01, 0x03,0x0F,0x0C,0x00,##-X-0x00,0x0C,0x7C,0xC0, 0xC0,0x7C,0x3C,0x00, 0x00,0x00,0x08,0x0F, 0x0F,0x08,0x00,0x00,##-Y-0x1C,0x0C,0x84,0xC4, 0x64,0x3C,0x1C,0x00, 0x0E,0x0F,0x09,0x08, 0x08,0x0C,0x0E,0x00,##-Z-0x00,0x00,0xFC,0xFC, 0x04,0x04,0x00,0x00, 0x00,0x00,0x0F,0x0F, 0x08,0x08,0x00,0x00,##-[-0x38,0x70,0xE0,0xC0, 0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x01, 0x03,0x07,0x0E,0x00,##-\-0x00,0x00,0x04,0x04, 0xFC,0xFC,0x00,0x00, 0x00,0x00,0x08,0x08, 0x0F,0x0F,0x00,0x00,##-]- 0x08,0x0C,0x06,0x03, 0x06,0x0C,0x08,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,##-^-0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,##-_-0x00,0x00,0x03,0x07, 0x04,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,##-`-0x00,0xA0,0xA0,0xA0, 0xE0,0xC0,0x00,0x00, 0x07,0x0F,0x08,0x08, 0x07,0x0F,0x08,0x00,##-a-ASCII码:0X610x04,0xFC,0xFC,0x20, 0x60,0xC0,0x80,0x00, 0x00,0x0F,0x0F,0x08, 0x08,0x0F,0x07,0x00,##-b-0xC0,0xE0,0x20,0x20, 0x20,0x60,0x40,0x00, 0x07,0x0F,0x08,0x08, 0x08,0x0C,0x04,0x00,##-c-0x80,0xC0,0x60,0x24, 0xFC,0xFC,0x00,0x00, 0x07,0x0F,0x08,0x08, 0x07,0x0F,0x08,0x00,##-d-0xC0,0xE0,0xA0,0xA0, 0xA0,0xE0,0xC0,0x00, 0x07,0x0F,0x08,0x08, 0x08,0x0C,0x04,0x00,##-e-0x40,0xF8,0xFC,0x44, 0x0C,0x18,0x00,0x00, 0x08,0x0F,0x0F,0x08, 0x00,0x00,0x00,0x00,##-f-0xC0,0xE0,0x20,0x20, 0xC0,0xE0,0x20,0x00, 0x27,0x6F,0x48,0x48, 0x7F,0x3F,0x00,0x00,##-g- 0x04,0xFC,0xFC,0x40, 0x20,0xE0,0xC0,0x00, 0x08,0x0F,0x0F,0x00, 0x00,0x0F,0x0F,0x00,##-h-0x00,0x00,0x20,0xEC, 0xEC,0x00,0x00,0x00, 0x00,0x00,0x08,0x0F, 0x0F,0x08,0x00,0x00,##-i-0x00,0x00,0x00,0x00, 0x20,0xEC,0xEC,0x00, 0x00,0x30,0x70,0x40, 0x40,0x7F,0x3F,0x00,##-j-0x04,0xFC,0xFC,0x80, 0xC0,0x60,0x20,0x00, 0x08,0x0F,0x0F,0x01, 0x03,0x0E,0x0C,0x00,##-k-0x00,0x00,0x04,0xFC, 0xFC,0x00,0x00,0x00, 0x00,0x00,0x08,0x0F, 0x0F,0x08,0x00,0x00,##-l-0xE0,0xE0,0x60,0xC0, 0x60,0xE0,0xC0,0x00, 0x0F,0x0F,0x00,0x07, 0x00,0x0F,0x0F,0x00,##-m-0x20,0xE0,0xC0,0x20, 0x20,0xE0,0xC0,0x00, 0x00,0x0F,0x0F,0x00, 0x00,0x0F,0x0F,0x00,##-n-0xC0,0xE0,0x20,0x20, 0x20,0xE0,0xC0,0x00, 0x07,0x0F,0x08,0x08, 0x08,0x0F,0x07,0x00,##-o-0x20,0xE0,0xC0,0x20, 0x20,0xE0,0xC0,0x00, 0x40,0x7F,0x7F,0x48, 0x08,0x0F,0x07,0x00,##-p-0xC0,0xE0,0x20,0x20, 0xC0,0xE0,0x20,0x00, 0x07,0x0F,0x08,0x48, 0x7F,0x7F,0x40,0x00,##-q- 0x20,0xE0,0xC0,0x60, 0x20,0xE0,0xC0,0x00, 0x08,0x0F,0x0F,0x08, 0x00,0x00,0x00,0x00,##-r-0x40,0xE0,0xA0,0x20, 0x20,0x60,0x40,0x00, 0x04,0x0C,0x09,0x09, 0x0B,0x0E,0x04,0x00,##-s-0x20,0x20,0xF8,0xFC, 0x20,0x20,0x00,0x00, 0x00,0x00,0x07,0x0F, 0x08,0x0C,0x04,0x00,##-t-0xE0,0xE0,0x00,0x00, 0xE0,0xE0,0x00,0x00, 0x07,0x0F,0x08,0x08, 0x07,0x0F,0x08,0x00,##-u-0x00,0xE0,0xE0,0x00, 0x00,0xE0,0xE0,0x00, 0x00,0x03,0x07,0x0C, 0x0C,0x07,0x03,0x00,##-v-0xE0,0xE0,0x00,0x80, 0x00,0xE0,0xE0,0x00, 0x07,0x0F,0x0C,0x07, 0x0C,0x0F,0x07,0x00,##-w-0x20,0x60,0xC0,0x80, 0xC0,0x60,0x20,0x00, 0x08,0x0C,0x07,0x03, 0x07,0x0C,0x08,0x00,##-x-0xE0,0xE0,0x00,0x00, 0x00,0xE0,0xE0,0x00, 0x47,0x4F,0x48,0x48, 0x68,0x3F,0x1F,0x00,##-y-0x60,0x60,0x20,0xA0, 0xE0,0x60,0x20,0x00, 0x0C,0x0E,0x0B,0x09, 0x08,0x0C,0x0C,0x00,##-z-##0x00,0x40,0x40,0xF8, 0xBC,0x04,0x04,0x00, 0x00,0x00,0x00,0x07, 0x0F,0x08,0x08,0x00,##-{-0x00,0x00,0x00,0xBC, 0xBC,0x00,0x00,0x00, 0x00,0x00,0x00,0x0F, 0x0F,0x00,0x00,0x00,##-|-0x00,0x04,0x04,0xBC, 0xF8,0x40,0x40,0x00, 0x00,0x08,0x08,0x0F, 0x07,0x00,0x00,0x00,##-}-0x08,0x0C,0x04,0x0C, 0x08,0x0C,0x04,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,##ASCII码:0X7E]ascii_table_5x8=[#*全体ASCII 列表:5x8点阵*#0x00,0x00,0x00,0x00,0x00,##space0x00,0x00,0x4f,0x00,0x00,##-!-0x00,0x07,0x00,0x07,0x00,##-"-0x14,0x7f,0x14,0x7f,0x14,##-#-0x24,0x2a,0x7f,0x2a,0x12,##-$-0x23,0x13,0x08,0x64,0x62,##-%-0x36,0x49,0x55,0x22,0x50,##-&-0x00,0x05,0x07,0x00,0x00,##-'-0x00,0x1c,0x22,0x41,0x00,##-(-0x00,0x41,0x22,0x1c,0x00,##-)-0x14,0x08,0x3e,0x08,0x14,##-*-0x08,0x08,0x3e,0x08,0x08,##-+-0x00,0x50,0x30,0x00,0x00,##-,-0x08,0x08,0x08,0x08,0x08,##---0x00,0x60,0x60,0x00,0x00,##-.-0x20,0x10,0x08,0x04,0x02,##-#-0x3e,0x51,0x49,0x45,0x3e,##-0-0x00,0x42,0x7f,0x40,0x00,##-1-0x42,0x61,0x51,0x49,0x46,##-2-0x21,0x41,0x45,0x4b,0x31,##-3-0x18,0x14,0x12,0x7f,0x10,##-4-0x27,0x45,0x45,0x45,0x39,##-5-0x3c,0x4a,0x49,0x49,0x30,##-6-0x01,0x71,0x09,0x05,0x03,##-7-0x36,0x49,0x49,0x49,0x36,##-8-0x06,0x49,0x49,0x29,0x1e,##-9-0x00,0x36,0x36,0x00,0x00,##-:-0x00,0x56,0x36,0x00,0x00,##-;-0x08,0x14,0x22,0x41,0x00,##-<-0x14,0x14,0x14,0x14,0x14,##-=-0x00,0x41,0x22,0x14,0x08,##->-0x02,0x01,0x51,0x09,0x06,##-?-0x32,0x49,0x79,0x41,0x3e,##-@-0x7e,0x11,0x11,0x11,0x7e,##-A-0x7f,0x49,0x49,0x49,0x36,##-B-0x3e,0x41,0x41,0x41,0x22,##-C-0x7f,0x41,0x41,0x22,0x1c,##-D-0x7f,0x49,0x49,0x49,0x41,##-E-0x7f,0x09,0x09,0x09,0x01,##-F-0x3e,0x41,0x49,0x49,0x7a,##-G-0x7f,0x08,0x08,0x08,0x7f,##-H-0x00,0x41,0x7f,0x41,0x00,##-I-0x20,0x40,0x41,0x3f,0x01,##-J-0x7f,0x08,0x14,0x22,0x41,##-K-0x7f,0x40,0x40,0x40,0x40,##-L-0x7f,0x02,0x0c,0x02,0x7f,##-M-0x7f,0x04,0x08,0x10,0x7f,##-N-0x3e,0x41,0x41,0x41,0x3e,##-O-0x7f,0x09,0x09,0x09,0x06,##-P-0x3e,0x41,0x51,0x21,0x5e,##-Q-0x7f,0x09,0x19,0x29,0x46,##-R-0x46,0x49,0x49,0x49,0x31,##-S-0x01,0x01,0x7f,0x01,0x01,##-T-0x3f,0x40,0x40,0x40,0x3f,##-U-0x1f,0x20,0x40,0x20,0x1f,##-V-0x3f,0x40,0x38,0x40,0x3f,##-W-0x63,0x14,0x08,0x14,0x63,##-X-0x07,0x08,0x70,0x08,0x07,##-Y-0x61,0x51,0x49,0x45,0x43,##-Z-0x00,0x7f,0x41,0x41,0x00,##-[-0x02,0x04,0x08,0x10,0x20,##-\-0x00,0x41,0x41,0x7f,0x00,##-]-0x04,0x02,0x01,0x02,0x04,##-^-0x40,0x40,0x40,0x40,0x40,##-_-0x01,0x02,0x04,0x00,0x00,##-`-0x20,0x54,0x54,0x54,0x78,##-a-0x7f,0x48,0x48,0x48,0x30,##-b-0x38,0x44,0x44,0x44,0x44,##-c-0x30,0x48,0x48,0x48,0x7f,##-d-0x38,0x54,0x54,0x54,0x58,##-e-0x00,0x08,0x7e,0x09,0x02,##-f-0x48,0x54,0x54,0x54,0x3c,##-g-0x7f,0x08,0x08,0x08,0x70,##-h-0x00,0x00,0x7a,0x00,0x00,##-i-0x20,0x40,0x40,0x3d,0x00,##-j-0x7f,0x20,0x28,0x44,0x00,##-k-0x00,0x41,0x7f,0x40,0x00,##-l-0x7c,0x04,0x38,0x04,0x7c,##-m-0x7c,0x08,0x04,0x04,0x78,##-n-0x38,0x44,0x44,0x44,0x38,##-o-0x7c,0x14,0x14,0x14,0x08,##-p-0x08,0x14,0x14,0x14,0x7c,##-q-0x7c,0x08,0x04,0x04,0x08,##-r-0x48,0x54,0x54,0x54,0x24,##-s-0x04,0x04,0x3f,0x44,0x24,##-t-0x3c,0x40,0x40,0x40,0x3c,##-u-0x1c,0x20,0x40,0x20,0x1c,##-v-0x3c,0x40,0x30,0x40,0x3c,##-w-0x44,0x28,0x10,0x28,0x44,##-x-0x04,0x48,0x30,0x08,0x04,##-y-0x44,0x64,0x54,0x4c,0x44,##-z-0x08,0x36,0x41,0x41,0x00,##-{-0x00,0x00,0x77,0x00,0x00,##-|-0x00,0x41,0x41,0x36,0x08,##-}-0x04,0x02,0x02,0x02,0x01,##-~-]##字模区域结束#

五、屏幕操作代码

JLX172104G590.py

WIDTH=256 # 屏幕宽度HEIGHT=128 # 屏幕高度from machine import Pin, SPIfrom st75256 import ST75256# 初始化屏幕spi = SPI(0, 100000, mosi=Pin(19), sck=Pin(18))oled = ST75256(WIDTH, HEIGHT, spi, Pin(17),Pin(20), Pin(16),external_vcc=True)# 显示文字oled.text_cn("计算器爱好者",50,8) # 写入缓冲区oled.text_big("Hello World",50,30)oled.text_small("Hello World",50,45)oled.text("Hello World",50,55)oled.show()#显示缓冲区内容

六、显示效果

不知道为啥会反过来,还有屏幕会有一片花的,有知道的,评论区留言。 谢谢。

七、购买链接

1,树莓派开发板

/item.htm?_u=rp01rchb3f7&id=637462705818&skuId=4882333204598&spm=a1z09.2.0.0.4e572e8d0BJ1zJ/item.htm?_u=rp01rchb3f7&id=637462705818&skuId=4882333204598&spm=a1z09.2.0.0.4e572e8d0BJ1zJ

2,晶联LED屏幕

/item.htm?spm=.1.0.0.599451a66J2dWR&id=554187209246/item.htm?spm=.1.0.0.599451a66J2dWR&id=554187209246

八、参考文章

【全网首发】ST75256 液晶模块MicroPython驱动_weixin_42094079的博客-CSDN博客_st75256MicroPython ST75256_1671465600/weixin_42094079/article/details/121897550

九、资料下载

链接: /s/1nlYxlCQ3bOVYQ-jZBAh9PA 提取码: ygqp 复制这段内容后打开百度网盘手机App,操作更方便哦

十、显示问题解决办法

在博主的辛苦查阅资料,在显示屏的资料中,看到了驱动部分设置参数有误。

大家参考如下文档:JLX172104G-590-PC中文字库编程说明书.pdf_免费高速下载|百度网盘-分享无限制

然后修改我们的驱动的这几行:

1,文中显示花屏问题,请修改驱动的这一行

self.transfer_data(0X14) # XE=159 0x28

将值改为4F

2,文中显示文字镜像问题,请修改驱动的这一行

self.transfer_data(0x00) #MX.MY=Normal

将值改为0x02

3,文中显示不清晰的问题,修改驱动程序的对比度可以解决。

self.transfer_data(0x36) #VPR[5-0]

这一行是微调对比度,可调范围 0x00~0x3f,共 64 级。将值改为0x08

4,最后,在修改一下x,y的地址

def lcd_address(self,x,y,x_total,y_total):x=xy=y+4#为什么要加4呢?每四行为一列?这里的y是页,也就是行0~15行

将值改为x=x+84 y=y

5,接着,我们修改代码JLX172104G590.py如下:

WIDTH=256 # 屏幕宽度HEIGHT=128 # 屏幕高度from machine import Pin, SPIfrom st75256 import ST75256# 初始化屏幕spi = SPI(0, 100000, mosi=Pin(19), sck=Pin(18))oled = ST75256(WIDTH, HEIGHT, spi, Pin(17),Pin(20), Pin(16),external_vcc=False)# 显示文字oled.text_cn("计算器爱好者",0,0)#写入缓冲区oled.text_big("Hello World",15,20)oled.text_small("Hello World",30,64)oled.text("Hello World",50,90)oled.show()#显示缓冲区内容

显示效果如下:

捣鼓了半天终于结束啦!还是要多看官方文档啊!

最后附上正确的驱动程序st75256.py:

## MicroPython st75256 OLED driver, SPI interfaces#from micropython import constfrom font import bytech,ascii_table_8x16,ascii_table_5x8import framebufimport machineimport utime# Subclassing FrameBuffer provides support for graphics primitives# /en/latest/pyboard/library/framebuf.htmlclass ST75256(framebuf.FrameBuffer):def __init__(self,width,height,spi,dc,res,cs,external_vcc=False):self.width=widthself.height=heightself.reset=resself.rate=10*1024*1024dc.init(dc.OUT,value=0)res.init(res.OUT,value=0)cs.init(cs.OUT,value=1)self.spi=spiself.dc=dcself.res=resself.cs=csimport timeself.res(1)time.sleep_ms(1)self.res(0)time.sleep_ms(10)self.res(1)self.external_vcc=external_vccself.pages = self.height//8self.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 6KHzself.transfer_data(0x03) # Bias=1/11self.transfer_command(0x20) # Gray Levelself.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=0self.transfer_data(0X4F) # XE=159self.transfer_command(0x15) # Clumn Address setting self.transfer_data(0X00) # XS=0 self.transfer_data(0Xff) # XE=256 ffself.transfer_command(0xBC) # Data scan directionself.transfer_data(0x02) # MX.MY=Normal # 设为0x00镜像显示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 //设置对比度,“0x81”不可改动,紧跟着的 2 个数据是可改的,但“先微调后粗调”self.transfer_data(0x08) # VPR[5-0] //微调对比度,可调范围 0x00~0x3f,共 64 级self.transfer_data(0x04) # VPR[8-6] //粗调对比度,可调范围 0x00~0x07,共 8 级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+84 # X 为起始的列地址,Y 为起始的行地址y=yself.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_=0page=y//8page=page%self.pagesif(x>247):x=0page+=2text_= [text[i:i+3] for i in range(0,len(text),3)]#取出汉字的3字节utf-8编码for k in text_:b1=bytearray(k)#将中文3字节utf-8编码还原byte_data=bytech[b1.decode()]for i in range(0,16):self.buffer[256*page+x+i+offset_]=byte_data[i]#print(x_axis,y_axis)self.buffer[256*(page+1)+x+i+offset_]=byte_data[i+16]offset_+=16def icon(self,bmp,x,y,reverse=0):#32x32page=y//8page=page%self.pagesif(x>247):x=0page+=2for i in range(4):for j in range(32):if reverse:self.buffer[256*(page+i)+x+j]=~bmp[i*32+j]else:self.buffer[256*(page+i)+x+j]=bmp[i*32+j]def text_big(self,text,x,y,reverse=0,earse=0):#显示8x16的点阵的字符串,括号里的参数分别为(字符串,x,y坐标,是否反转,默认不反转)page=y//8page=page%self.pagesif(x>248):x=1page+=2self.earse=earsei=0text=list(text.encode("ascii"))while(i<len(text)):if((text[i]>=0x20) and (text[i]<=0x7e)):j=(text[i]-0x20)*16for n in [0,1]:for k in range(8):if(reverse==1):self.buffer[256*(page+n)+x+k]=~ ascii_table_8x16[j+k+8*n]else:self.buffer[256*(page+n)+x+k]=ascii_table_8x16[j+k+8*n]#写数据到缓冲区,每写完1字节的数据后列地址自动加1 i=i+1x+=8else:i=i+1def text_small(self,text,x,y,reverse=0,earse=0):#5x8点阵的英文字符串page=y//8page=page%self.pagesself.earse=earsei=0text=list(text.encode("ascii"))while(i<len(text)):if((text[i]>=0x20) and (text[i]<=0x7e)):j=(text[i]-0x20)*5for n in range(5):if(reverse==1):self.buffer[256*page+x+n]=~ascii_table_5x8[j+n]else:self.buffer[256*page+x+n]=ascii_table_5x8[j+n]i+=1x+=6else:i+=1##led driver end#

物联网开发笔记(69)- 使用Micropython开发树莓派pico开发板raspberry pi pico之控制晶联JLX172104G-590液晶模块

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。