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

新买来的开发板,接上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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值