OLED显示模块代码移植及接口适配教程

版权申诉
0 下载量 109 浏览量 更新于2024-11-07 收藏 4.95MB ZIP 举报
资源摘要信息:"OLED.zip_bitkkc_oled_oled iic_oledspiiic_单片机" 在当今快速发展的信息技术领域,OLED技术作为一项重要的显示技术,在各类嵌入式系统中扮演着重要的角色。OLED(Organic Light-Emitting Diode,有机发光二极管)是一种固态半导体技术,它利用有机材料在电流驱动下发出光线,因此具有极高的亮度和对比度,以及宽广的视角。 在本资源中,我们关注的主题是与OLED相关的一系列技术和应用实践。资源的标题为 "OLED.zip_bitkkc_oled_oled iic_oledspiiic_单片机",这表明资源可能包含了一系列与OLED显示屏相关的设计和编程代码,特别是针对单片机平台。该资源的描述指出这是一个可用于普通SPI接口或IIC接口的OLED代码移植。这意味着资源中的代码可能被设计为与多种常见的通信协议兼容,这为开发者提供了极大的便利。 让我们来详细分析一下标题和描述中提到的各个知识点: 1. OLED技术基础 OLED显示技术基于有机材料,这些有机材料在受到电流作用时会发出光。与传统的LCD(液晶显示)技术相比,OLED显示屏不需要背光源,并且能够实现更薄的设计。它们同时具有快速响应时间和高对比度,非常适合制作高清晰度的移动设备和可穿戴设备。 2. 单片机与OLED显示屏的接口 单片机是一种集成电路芯片,包含了计算机的全部必要组件,常用于各种嵌入式系统。要将单片机与OLED显示屏相连,通常需要通过某种通信接口。本资源特别提到了SPI接口和IIC接口(也称为I2C或Inter-Integrated Circuit)。 SPI接口(Serial Peripheral Interface)是一种高速的、全双工的通信总线,通常用于微控制器和各种外围设备之间的通信。而IIC接口(I2C,Inter-Integrated Circuit)则是一种多主从式串行总线,通过两个信号线——串行数据线(SDA)和串行时钟线(SCL)进行通信,被设计用于节省引脚,便于多个设备的连接。 3. OLED代码移植与开发 "代码移植"意味着将现有的软件代码适应到另一个硬件环境或系统中。在这个资源中,所提供的代码可能是为了将OLED显示功能引入到使用单片机的设备中。开发者可以利用这些代码来实现OLED显示屏上文本、图形的显示,并且可以利用SPI和IIC接口与OLED模块进行通信。 资源文件的名称为 "OLED",这可能表示该资源是一套完整的OLED显示解决方案,包含所需的驱动程序代码、示例程序和可能的配置文件。 在标签中提到的 "bitkkc" 很可能是指贡献这个资源的个人或团队的名称,而 "oled_iic" 和 "oledspiiic" 则是与接口相关的关键词。单片机的提及表明资源针对的是嵌入式系统开发者和工程师。 总结来说,这个资源为OLED显示屏在嵌入式系统中的应用提供了一个实用的编程工具集。开发者可以利用这些代码和驱动程序,通过SPI或IIC接口将OLED显示屏与单片机相结合,从而在各种设备上实现显示功能。考虑到OLED技术的高分辨率和低功耗特性,这项技术在物联网(IoT)设备、智能手表、车载娱乐系统等领域具有广泛的应用前景。

一句句的解释void Write_IIC_Byte(unsigned char IIC_Byte) { unsigned char i; unsigned char m,da; da=IIC_Byte; OLED_SCLK_Clr(); for(i=0;i<8;i++) { m=da; // OLED_SCLK_Clr(); m=m&0x80; if(m==0x80) {OLED_SDIN_Set();} else OLED_SDIN_Clr(); da=da<<1; OLED_SCLK_Set(); OLED_SCLK_Clr(); } } /********************************************** // IIC Write Command **********************************************/ void Write_IIC_Command(unsigned char IIC_Command) { IIC_Start(); Write_IIC_Byte(0x78); //Slave address,SA0=0 IIC_Wait_Ack(); Write_IIC_Byte(0x00); //write command IIC_Wait_Ack(); Write_IIC_Byte(IIC_Command); IIC_Wait_Ack(); IIC_Stop(); } /********************************************** // IIC Write Data **********************************************/ void Write_IIC_Data(unsigned char IIC_Data) { IIC_Start(); Write_IIC_Byte(0x78); //D/C#=0; R/W#=0 IIC_Wait_Ack(); Write_IIC_Byte(0x40); //write data IIC_Wait_Ack(); Write_IIC_Byte(IIC_Data); IIC_Wait_Ack(); IIC_Stop(); } void OLED_WR_Byte(unsigned dat,unsigned cmd) { if(cmd) { Write_IIC_Data(dat); } else { Write_IIC_Command(dat); } } /******************************************** // fill_Picture ********************************************/ void fill_picture(unsigned char fill_Data) { unsigned char m,n; for(m=0;m<8;m++) { OLED_WR_Byte(0xb0+m,0); //page0-page1 OLED_WR_Byte(0x00,0); //low column start address OLED_WR_Byte(0x10,0); //high column start address for(n=0;n<128;n++) { OLED_WR_Byte(fill_Data,1); } } } /***********************Delay****************************************/ void Delay_50ms(unsigned int Del_50ms) { unsigned int m; for(;Del_50ms>0;Del_50ms--) for(m=6245;m>0;m--); } void Delay_1ms(unsigned int Del_1ms) { unsigned char j; while(Del_1ms--) { for(j=0;j<123;j++); } }

2023-06-13 上传

帮我改进一这段代码import machine import time from machine import I2C from machine import Pin from machine import sleep class accel(): def __init__(self, i2c, addr=0x68): self.iic = i2c self.addr = addr self.iic.start() self.iic.writeto(self.addr, bytearray([107, 0])) self.iic.stop() def get_raw_values(self): self.iic.start() a = self.iic.readfrom_mem(self.addr, 0x3B, 14) self.iic.stop() return a def get_ints(self): b = self.get_raw_values() c = [] for i in b: c.append(i) return c def bytes_toint(self, firstbyte, secondbyte): if not firstbyte & 0x80: return firstbyte << 8 | secondbyte return - (((firstbyte ^ 255) << 8) | (secondbyte ^ 255) + 1) def get_values(self): raw_ints = self.get_raw_values() vals = {} vals["AcX"] = self.bytes_toint(raw_ints[0], raw_ints[1]) vals["AcY"] = self.bytes_toint(raw_ints[2], raw_ints[3]) vals["AcZ"] = self.bytes_toint(raw_ints[4], raw_ints[5]) vals["Tmp"] = self.bytes_toint(raw_ints[6], raw_ints[7]) / 340.00 + 36.53 vals["GyX"] = self.bytes_toint(raw_ints[8], raw_ints[9]) vals["GyY"] = self.bytes_toint(raw_ints[10], raw_ints[11]) vals["GyZ"] = self.bytes_toint(raw_ints[12], raw_ints[13]) return vals # returned in range of Int16 # -32768 to 32767 def val_test(self): # ONLY FOR TESTING! Also, fast reading sometimes crashes IIC from time import sleep while 1: print(self.get_values()) sleep(0.05) clk = Pin(("clk", 36), Pin.OUT_OD) sda = Pin(("sda", 37), Pin.OUT_OD) i2c = I2C(-1, clk, sda, freq=100000) #initializing the I2C method for ESP32 #i2c = I2C(scl=Pin(5), sda=Pin(4)) #initializing the I2C method for ESP8266 mpu= accel(i2c) while True: mpu.get_values() print(mpu.get_values()) time.sleep(2)

2023-05-30 上传
2023-05-30 上传