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

一、目的

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

二、环境

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

接线方法:

开发板屏幕
GPIO16CS
GPIO20RST
GPIO17RS
GPIO19SDA
GPIO18SCK
3.3VVDD
GNDVSS
3.3VLEDA

新买来的开发板,接上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 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_+=16
    
    def icon(self,bmp,x,y,reverse=0):
        #32x32
        page=y//8
        page=page%self.pages
        if(x>247):
            x=0
            page+=2
        for 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//8
        page=page%self.pages
        if(x>248):
            x=1
            page+=2
        self.earse=earse
        i=0
        text=list(text.encode("ascii"))
        while(i<len(text)):
            if((text[i]>=0x20) and (text[i]<=0x7e)):
                j=(text[i]-0x20)*16
                for 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+1
                x+=8
            else:
                i=i+1

    def text_small(self,text,x,y,reverse=0,earse=0):
        #5x8点阵的英文字符串
        page=y//8
        page=page%self.pages
        self.earse=earse
        i=0
        text=list(text.encode("ascii"))
        while(i<len(text)):
            if((text[i]>=0x20) and (text[i]<=0x7e)):
                j=(text[i]-0x20)*5
                for 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+=1
                x+=6
            else:
                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,##space
0x00,0x00,0x38,0xFC, 0xFC,0x38,0x00,0x00, 0x00,0x00,0x00,0x0D, 0x0D,0x00,0x00,0x00,##-!-ASCII码:0X21
0x00,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码:0X2A
0x00,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码:0X30
0x00,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码:0X34
0x7C,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码:0X3E
0x18,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码:0X41
0x04,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码:0X48
0x00,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码:0X61
0x04,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,##space
0x00,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, SPI
from 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,树莓派开发板

https://detail.tmall.com/item.htm?_u=rp01rchb3f7&id=637462705818&skuId=4882333204598&spm=a1z09.2.0.0.4e572e8d0BJ1zJhttps://detail.tmall.com/item.htm?_u=rp01rchb3f7&id=637462705818&skuId=4882333204598&spm=a1z09.2.0.0.4e572e8d0BJ1zJ

 2,晶联LED屏幕

https://item.taobao.com/item.htm?spm=2013.1.0.0.599451a66J2dWR&id=554187209246https://item.taobao.com/item.htm?spm=2013.1.0.0.599451a66J2dWR&id=554187209246


八、参考文章

【全网首发】ST75256 液晶模块MicroPython驱动_weixin_42094079的博客-CSDN博客_st75256MicroPython ST75256_1671465600https://blog.csdn.net/weixin_42094079/article/details/121897550
九、资料下载

链接: https://pan.baidu.com/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=x
        y=y+4#为什么要加4呢?每四行为一列?这里的y是页,也就是行0~15行
        

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

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

WIDTH=256  # 屏幕宽度
HEIGHT=128  # 屏幕高度

from machine import Pin, SPI
from 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 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(0X4F)  # XE=159
        self.transfer_command(0x15)  # Clumn Address setting 
        self.transfer_data(0X00)  # XS=0 
        self.transfer_data(0Xff)  # XE=256 ff
        
        self.transfer_command(0xBC)  # Data scan direction
        self.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=y
        
        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 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_+=16
    
    def icon(self,bmp,x,y,reverse=0):
        #32x32
        page=y//8
        page=page%self.pages
        if(x>247):
            x=0
            page+=2
        for 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//8
        page=page%self.pages
        if(x>248):
            x=1
            page+=2
        self.earse=earse
        i=0
        text=list(text.encode("ascii"))
        while(i<len(text)):
            if((text[i]>=0x20) and (text[i]<=0x7e)):
                j=(text[i]-0x20)*16
                for 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+1
                x+=8
            else:
                i=i+1

    def text_small(self,text,x,y,reverse=0,earse=0):
        #5x8点阵的英文字符串
        page=y//8
        page=page%self.pages
        self.earse=earse
        i=0
        text=list(text.encode("ascii"))
        while(i<len(text)):
            if((text[i]>=0x20) and (text[i]<=0x7e)):
                j=(text[i]-0x20)*5
                for 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+=1
                x+=6
            else:
                i+=1

#
#led driver end
#

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
树莓派Pico开发板可以使用Arduino IDE进行编程。以下是使用Arduino IDE进行树莓派Pico开发板编程的步骤: 1. 安装Arduino IDE:首先,您需要下载并安装Arduino IDE。您可以从Arduino官方网站上下载适用于您的操作系统的最新版本。 2. 安装RP2040支持库:树莓派Pico开发板使用RP2040芯片,因此您需要安装RP2040支持库。在Arduino IDE中,打开“工具”菜单,选择“开发板”子菜单,然后选择“开发板管理器”。在搜索栏中输入“RP2040”,找到“Arduino Mbed OS RP2040 Boards”并点击“安装”。 3. 配置开发板:在Arduino IDE中,打开“工具”菜单,选择“开发板”子菜单,然后选择“Raspberry Pi Pico”。接下来,选择正确的端口和上传速度。 4. 编写代码:在Arduino IDE中,打开一个新的空白文件,编写您的树莓派Pico开发板的Arduino代码。您可以使用Arduino语言和库来编写代码,就像在其他Arduino开发板上一样。 5. 上传代码:将树莓派Pico开发板连接到计算机,并确保选择了正确的端口。然后,点击Arduino IDE工具栏上的“上传”按钮,将代码上传到树莓派Pico开发板上。 请注意,树莓派Pico开发板与传统的Arduino开发板略有不同,因此某些功能和库可能不可用或需要特殊配置。您可以参考树莓派Pico开发板的文档和示例代码,以了解更多关于使用Arduino IDE进行树莓派Pico开发板编程的详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔都飘雪

您的1毛奖励是我创作的源源动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值