基于STM32F103 0.96寸OLED液晶屏驱动(iic通讯) |
您所在的位置:网站首页 › stm32f103c8t6iic速度 › 基于STM32F103 0.96寸OLED液晶屏驱动(iic通讯) |
一、概述
OLED驱动方式有8080、6800、3线/4线SPI以及IIC,能够显示字符、汉字的图片,无字库需通过取模软件获取显示内容数组。本次实验使用的是IIC通信协议,SSD1306驱动芯片的OLED屏。 二、实验材料1、0.96寸OLED屏。 2、最小系统STM32F103C8T6. 3、杜邦线若干。 三、接线 功能引脚GPIOGNDGNDVCCVCCSCLPA6SDAPA7 四、程序代码1、GPIO初始化 void Oled_Init(void) { IIC_Pin_Init();//iic引脚初始化 OLED_Send_Command(0xAE);//--turn off oled panel OLED_Send_Command(0x02);//---SET low column address OLED_Send_Command(0x10);//---SET high column address OLED_Send_Command(0x40);//--SET start line address SET Mapping RAM Display Start Line (0x00~0x3F) OLED_Send_Command(0x81);//--SET contrast control register OLED_Send_Command(0xCF); // SET SEG Output Current Brightness OLED_Send_Command(0xA1);//--SET SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_Send_Command(0xC8);//SET COM/Row Scan Direction 0xc0上下反置 0xc8正常 OLED_Send_Command(0xA6);//--SET normal display OLED_Send_Command(0xA8);//--SET multiplex ratio(1 to 64) OLED_Send_Command(0x3f);//--1/64 duty OLED_Send_Command(0xD3);//-SET display offSET Shift Mapping RAM Counter (0x00~0x3F) OLED_Send_Command(0x00);//-not offSET OLED_Send_Command(0xd5);//--SET display clock divide ratio/oscillator frequency OLED_Send_Command(0x80);//--SET divide ratio, SET Clock as 100 Frames/Sec OLED_Send_Command(0xD9);//--SET pre-charge period OLED_Send_Command(0xF1);//SET Pre-Charge as 15 Clocks & Discharge as 1 Clock OLED_Send_Command(0xDA);//--SET com pins hardware configuration OLED_Send_Command(0x12); OLED_Send_Command(0xDB);//--SET vcomh OLED_Send_Command(0x40);//SET VCOM Deselect Level OLED_Send_Command(0x20);//-SET Page Addressing Mode (0x00/0x01/0x02) OLED_Send_Command(0x02);// OLED_Send_Command(0x8D);//--SET Charge Pump enable/disable OLED_Send_Command(0x14);//--SET(0x10) disable OLED_Send_Command(0xA4);// Disable Entire Display On (0xa4/0xa5) OLED_Send_Command(0xA6);// Disable Inverse Display On (0xa6/a7) OLED_Send_Command(0xAF);//--turn on oled panel OLED_Send_Command(0xAF); /*display ON*/ OLED_Clear(0x00); //清屏 }2、写数据 void Oled_Write_Data(u8 data) { IIC_Start(); IIC_Send_Data(0x78);//地址 IIC_Send_Data(0x40);//写数据 IIC_Send_Data(data);//指令 IIC_Stop(); }3、写命令 void OLED_Send_Command(u8 com) { IIC_Start(); IIC_Send_Data(0x78);//地址 IIC_Send_Data(0x00);//写指令 第6位控制写数据/命令 IIC_Send_Data(com);//指令 IIC_Stop(); }4、清屏 void OLED_Clear(u8 clear_dat) { u8 i = 0, j = 0; for(i = 0; i Oled_Write_Data(clear_dat); } } }5、显示位置 void Oled_Address(u8 row,u8 col) { OLED_Send_Command(0xB0 + row); OLED_Send_Command(0X10 + ((col & 0xf0) >> 4)); //高列地址 OLED_Send_Command(0X00 + (col & 0x0f)); }6、显示字符 void Oled_Display_Char(u8 page,u8 col,char ch) { u8 loca = ch - ' '; u8 i = 0; //页地址 Oled_Address(page,col); for(i = 0; i Oled_Write_Data(Aciss_8X16[loca * 16 + 8 + i]); } }7、显示字符串 void Oled_Display_String(u8 page,u8 col,char *str) { while(*str) { Oled_Display_Char(page,col,*str); col += 8; str++; } }8、显示汉字或图片 void Oled_Display_Pic(u8 wight,u8 high,u8 page,u8 col,u8 *str) { u8 i = 0, j = 0; for(i = 0; i Oled_Write_Data(str[wight * i + j]); } } }9、主函数 int main(void) { char buf[] = {"There is no luck"}; char buf1[] = {"There is only"}; char buf2[] = {"word."}; char author[] = {"Qing"}; Sys_Delay_Init(); Oled_Init(); // Oled_Display_Char(0,0,'A');//显示单个字符 //There is no luck.There is only work.幸运是不存在的,努力才是硬道理。 Oled_Display_String(0,0,buf); //显示字符串 Oled_Display_String(2,0,buf1); //显示字符串 Oled_Display_String(4,0,buf2); //显示字符串 Oled_Display_String(6,80,author); while(1) { } } 五、实验效果程序及相关资料 链接:https://pan.baidu.com/s/1Bo093SotTLxs1NgNwa01nQ 提取码:ygrv 如有错误还望指出,谢谢! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |