您好,欢迎访问三七文档
[Micropython][ESP8266]TPYBoardV202之控制OLED液晶显示屏1.实验目的1.学习在PC机系统中扩展简单I/O接口的方法。2.进一步学习编制数据输出程序的设计方法。3.学习TPYBoardv202控制OLED显示字符。2.所需元器件TPYBoardv202开发板一块数据线一条杜邦线若干OLED液晶屏一块3.什么是OLED显示屏(1)OLED显示屏简介有机发光二极管(organiclight-emittingdiode,OLED)是一种由柯达公司开发并拥有专利的显示技术,这项技术使用有机聚合材料作为发光二极管中的半导体(semiconductor)材料。聚合材料可以是天然的,也可能是人工合成的,可能尺寸很大,也可能尺寸很小。其广泛运用于手机、数码摄像机、DVD机、个人数字助理(PDA)、笔记本电脑、汽车音响和电视。OLED显示器很薄很轻,因为它不使用背光。本例中使用0.96寸OLED显示屏,该屏具有高亮度,低功耗屏,显示颜色纯正,在阳光下有很好的可视效果。模块供电可以是3.3V也可以是5V,不需要修改模块电路,同时兼容3种通信方式:4线SPI、3线SPI、IIC,通信模式的选择可以根据提供的BOM表进行跳选。该模块一共有三种颜色:蓝色、白色、黄蓝双色。OLED屏具有多个控制指令,可以控制OLED的亮度、对比度、开关升压电路等指令。操作方便,功能丰富。同时为了方便应用在产品上,预留4个M2固定孔,方便用户固定在机壳上。0.96寸OLED显示屏的驱动芯片为:SSD1306(已集成在屏中)。(2)实际显示效果(3)OLED接口定义1GND=电源地2VCC=电源地(2.8V~5.5V)3D0=时钟线4D1=数据线5RES=复位线6DC=数据/命令7CS=片选4.具体接线方法5.实物接线图TPYboardv202OLEDGNDGND3.3VVCCSCKD0MOD1G4RESG5DCG16CS6.程序源代码main.py程序源代码#main.py--putyourcodehere!importmachinefrommachineimportPin,I2C,SPIimportssd1306importmathimporttimespi=SPI(baudrate=10000000,polarity=1,phase=0,sck=Pin(14,Pin.OUT),mosi=Pin(13,Pin.OUT),miso=Pin(12))display=ssd1306.SSD1306_SPI(128,64,spi,Pin(5),Pin(4),Pin(16))led_blue=machine.Pin(2,Pin.OUT)#设置GPIO2为输出led_blue.high()try:display.poweron()display.init_display()display.text('TPYBoardV202',1,1)display.text('Hi,TurnipSmart',1,16)display.text('ILoveYou',1,31)display.text('ThisisDNA!!',1,46)display.show()time.sleep(3)display.fill(0)#显示DNAforxinrange(0,128):display.pixel(x,32+int(math.cos(x/64*math.pi)*30+2),1)display.pixel(x,32+int(math.cos((x+64)/64*math.pi)*30+2),1)display.show()exceptExceptionasex:led_blue.low()print('Unexpectederror:{0}'.format(ex))display.poweroff()ssd1306程序源代码importpybimportfont#ConstantsDISPLAYOFF=0xAESETCONTRAST=0x81DISPLAYALLON_RESUME=0xA4DISPLAYALLON=0xA5NORMALDISPLAY=0xA6INVERTDISPLAY=0xA7DISPLAYON=0xAFSETDISPLAYOFFSET=0xD3SETCOMPINS=0xDASETVCOMDETECT=0xDBSETDISPLAYCLOCKDIV=0xD5SETPRECHARGE=0xD9SETMULTIPLEX=0xA8SETLOWCOLUMN=0x00SETHIGHCOLUMN=0x10SETSTARTLINE=0x40MEMORYMODE=0x20COLUMNADDR=0x21PAGEADDR=0x22COMSCANINC=0xC0COMSCANDEC=0xC8SEGREMAP=0xA0CHARGEPUMP=0x8DEXTERNALVCC=0x10SWITCHCAPVCC=0x20SETPAGEADDR=0xB0SETCOLADDR_LOW=0x00SETCOLADDR_HIGH=0x10ACTIVATE_SCROLL=0x2FDEACTIVATE_SCROLL=0x2ESET_VERTICAL_SCROLL_AREA=0xA3RIGHT_HORIZONTAL_SCROLL=0x26LEFT_HORIZONTAL_SCROLL=0x27VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL=0x29VERTICAL_AND_LEFT_HORIZONTAL_SCROLL=0x2A#I2CdevicesareaccessedthroughaDeviceID.Thisisa7-bit#valuebutissometimesexpressedleft-shiftedby1asan8-bitvalue.#ApinonSSD1306allowsittorespondtoID0x3Cor0x3D.Theboard#Iboughtfromebayuseda0-ohmresistortoselectbetween0x78#(0x3c1)or0x7a(0x3d1).Thedefaultwassetto0x78DEVID=0x3c#I2CcommunicationhereiseitherDEVIDCTL_CMDcommandbyte#orDEVIDCTL_DATdisplaybufferbytes...#ThesetwovaluesencodetheCo(Continuation)bitasb7andthe#D/C#(Data/CommandSelection)bitasb6.CTL_CMD=0x80CTL_DAT=0x40classSSD1306(object):def__init__(self,pinout,height=32,external_vcc=True,i2c_devid=DEVID):self.external_vcc=external_vccself.height=32ifheight==32else64self.pages=int(self.height/8)self.columns=128#Inferinterfacetypefromentriesinpinout{}if'dc'inpinout:#SPIrate=16*1024*1024self.spi=pyb.SPI(1,pyb.SPI.MASTER,baudrate=rate,polarity=1,phase=0)#SCK:Y6:MOSI:Y8self.dc=pyb.Pin(pinout['dc'],pyb.Pin.OUT_PP,pyb.Pin.PULL_DOWN)self.res=pyb.Pin(pinout['res'],pyb.Pin.OUT_PP,pyb.Pin.PULL_DOWN)self.offset=0else:#Inferbusnumberfrompinifpinout['sda']=='X10':self.i2c=pyb.I2C(1)else:self.i2c=pyb.I2C(2)self.i2c.init(pyb.I2C.MASTER,baudrate=400000)#400kHzself.devid=i2c_devid#usedtoreserveanextrabyteintheimagebufferANDasawayto#infertheinterfacetypeself.offset=1#I2Ccommandbufferself.cbuffer=bytearray(2)self.cbuffer[0]=CTL_CMDdefclear(self):self.buffer=bytearray(self.offset+self.pages*self.columns)ifself.offset==1:self.buffer[0]=CTL_DATdefwrite_command(self,command_byte):ifself.offset==1:self.cbuffer[1]=command_byteself.i2c.send(self.cbuffer,addr=self.devid,timeout=5000)else:self.dc.low()self.spi.send(command_byte)definvert_display(self,invert):self.write_command(INVERTDISPLAYifinvertelseNORMALDISPLAY)defdisplay(self):self.write_command(COLUMNADDR)self.write_command(0)self.write_command(self.columns-1)self.write_command(PAGEADDR)self.write_command(0)self.write_command(self.pages-1)ifself.offset==1:self.i2c.send(self.buffer,addr=self.devid,timeout=5000)else:self.dc.high()self.spi.send(self.buffer)defset_pixel(self,x,y,state):index=x+(int(y/8)*self.columns)ifstate:self.buffer[self.offset+index]|=(1(y&7))else:self.buffer[self.offset+index]&=~(1(y&7))definit_display(self):chargepump=0x10ifself.external_vccelse0x14precharge=0x22ifself.external_vccelse0xf1multiplex=0x1fifself.height==32else0x3fcompins=0x02ifself.height==32else0x12contrast=0xff#0x8fifself.height==32else(0x9fifself.external_vccelse0x9f)data=[DISPLAYOFF,SETDISPLAYCLOCKDIV,0x80,SETMULTIPLEX,multiplex,SETDISPLAYOFFSET,0x00,SETSTARTLINE|0x00,CHARGEPUMP,chargepump,MEMORYMODE,0x00,SEGREMAP|0x10,COMSCANDEC,SETCOMPINS,compins,SETCONTRAST,contrast,SETPRECHARGE,precharge,SETVCOMDETECT,0x40,DISPLAYALLO
本文标题:[Micropython][ESP8266]TPYBoard V202之控制OLED液晶显示屏
链接地址:https://www.777doc.com/doc-5107250 .html