❤🧡💛2023年重写❤🧡💛
关于STM32F4系列代码讲解,博主已经更新了20几篇。可是在后台中博主却发现,这一篇【OLED显示实验】有很多人点击浏览,不知道是大家喜欢OLED的原因?还是说CSDN大数据推荐了这篇文章?鉴于我当初写这篇文章时并不细致(可以说是20几篇中比较水的一篇),因此决定于2023年进行细节补充重写,希望能帮助到想了解OLED实验的小伙伴。
❤🧡💛1、OLED液晶显示屏图片
正点原子这家的OLED因为兼容了四种通信方式,因此才看起来这么丑八怪,我们平时用不到6800和8080通信,因此这款OLED一般没人用
这是我在京东随便截图的两个OLED,左边是IIC,右边是SPI通信,这两种我都玩过,也是大家常用的显示屏模块,0.96寸和1.3寸无非就是大小不一样,我个人还是喜欢0.96寸,看着小巧一点,我印象比较深的是一家叫“中景园”的公司
就是这个,在学校时经常买他家的显示屏,因为代码资料给得很全,各种单片机OLED驱动都有,价格也不贵,图片上似乎是涨价了,我随便截的图
❤🧡💛2、工程代码讲解(新)
这是正点原子的代码框架,很多人说正点的代码很乱,我觉得乱不乱倒是其次,能够实用才是王道。虽然确实不是很完美,但是对于当初学生时代的我来说,他们的风格确确实实影响到了我,或许也影响到了很多其它人,关于代码框架,集百家之长,我以后有时间也会整理,详情可看我的【工作专栏】,这里我们主要关注oled.c这个驱动文件
通过名字也可以知道函数干什么用的
更新显存是说,将二维数组的内容更新到OLED屏显示,这本身就是个demo工程,且可以看出这个二维数组是空,也就是都是0,你如果想实现自己的功能,就可以把自己真实采集到的数据存到这个二维数组里面,所以叫做GRAM就是说软件模拟的数组存储,并不是真实的硬件存储
OLED_ShowNum函数调用了OLED_ShowChar函数,OLED_ShowChar函数调用了OLED_GRAM数组,即无论是显示字符还是显示数字最终都把数据存到了数组里面,所以叫临时的中间缓存
OLED_ShowNum()->OLED_ShowChar()->OLED_DrawPoint()->OLED_GRAM[x][pos]
这个demo工程支持三种格式大小的字体库,很简单就不解释了
while(1)
{
OLED_ShowChar(36,52,t,12,1);//显示ASCII字符
OLED_ShowNum(94,52,t,3,12); //显示ASCII字符的码值
OLED_Refresh_Gram(); //更新显示到OLED
t++;
if(t>'~')t=' ';
delay_ms(500);
LED0=!LED0;
}
这块代码呢,就是说~字符是ASCII表的最后一个字符,而空字符就是ASCII的第一个字符,因此这个demo代码就是把所有ASCII表的字符轮询显示出来了,也很简单,不懂的留意即可,博主看到会尽力解答
其它文章链接,独家吐血整理
(实验3)单片机,STM32F4学习笔记,代码讲解【按键输入实验】【正点原子】【原创】
(实验4)单片机,STM32F4学习笔记,代码讲解【串口实验】【正点原子】【原创】
(实验5)单片机,STM32F4学习笔记,代码讲解【外部中断实验】【正点原子】【原创】
(实验6,实验7)单片机,STM32F4学习笔记,代码讲解【看门狗实验】【正点原子】【原创】
(实验8)单片机,STM32F4学习笔记,代码讲解【定时器实验】【正点原子】【原创】
(实验9)单片机,STM32F4学习笔记,代码讲解【PWM输出实验】【正点原子】【原创】
(实验10)单片机,STM32F4学习笔记,代码讲解【输入捕获实验】【正点原子】【原创】
(实验11)单片机,STM32F4学习笔记,代码讲解【电容触摸按键实验】【正点原子】【原创】
(实验12)单片机,STM32F4学习笔记,代码讲解【OLED显示实验】【正点原子】【原创】
(实验13)单片机,STM32F4学习笔记,代码讲解【TFTLCD彩屏显示实验】【正点原子】【原创】
(实验15)单片机,STM32F4学习笔记,代码讲解【RTC实时时钟实验】【正点原子】【原创】
(实验17)单片机,STM32F4学习笔记,代码讲解【待机唤醒实验】【正点原子】【原创】
(实验23)单片机,STM32F4学习笔记,代码讲解【DMA实验】【正点原子】【原创】
(实验25)单片机,STM32F4学习笔记,代码讲解【SPI实验】【正点原子】【原创】
(实验34)单片机,STM32F4学习笔记,代码讲解【FLASH模拟EEPROM实验】【正点原子】【原创】
(实验36)单片机,STM32F4学习笔记,代码讲解【外部SRAM实验】【正点原子】【原创】
(实验37)单片机,STM32F4学习笔记,代码讲解【内存管理实验】【正点原子】【原创】
(实验38)单片机,STM32F4学习笔记,代码讲解【SD卡实验】【正点原子】【原创】
(实验39)单片机,STM32F4学习笔记,代码讲解【FATFS实验】【正点原子】【原创】
(实验46)单片机,STM32F4学习笔记,代码讲解【FPU测试实验】【正点原子】【原创】
(实验47)单片机,STM32F4学习笔记,代码讲解【DSP-FFT测试实验】【正点原子】【原创】
(实验50)单片机,STM32F4学习笔记,代码讲解【串口IAP实验】【正点原子】【原创】
(实验50)单片机,STM32F4学习笔记,代码讲解【串口IAP实验-RTC时钟实验】【正点原子】【原创】
(实验55)单片机,STM32F4学习笔记,代码讲解【网络通信实验】【正点原子】【原创】
实验现象
本实验利用开发板的OLED/CAMERA接口连接ALIENTEK OLED模块,实现OLED模块的显示,下载成功后,通过把OLED模块插入开发板左下角的OLED/CAMERA模块接口,按下复位之后,就可以看到OLED模块不停的显示ASCII码和码值。
主程序
int main(void)
{
u8 t=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
LED_Init(); //初始化LED
OLED_Init(); //初始化OLED
OLED_ShowString(0,0,"ALIENTEK",24);
OLED_ShowString(0,24, "0.96' OLED TEST",16);
OLED_ShowString(0,40,"ATOM 2014/5/4",12);
OLED_ShowString(0,52,"ASCII:",12);
OLED_ShowString(64,52,"CODE:",12);
OLED_Refresh_Gram();//更新显示到OLED
t=' ';
while(1)
{
OLED_ShowChar(36,52,t,12,1);//显示ASCII字符
OLED_ShowNum(94,52,t,3,12); //显示ASCII字符的码值
OLED_Refresh_Gram(); //更新显示到OLED
t++;
if(t>'~')t=' ';
delay_ms(500);
LED0=!LED0;
}
}
OLED初始化程序
这一处略,因为是函数库,直接调用即可
代码讲解(旧)
//OLED_Refresh_Gram();//更新显示到OLED,这一句是将STM32F4自己导入的字库GRAM更新到OLED的GRAM
//显示字符串
//x,y:起点坐标
//size:字体大小
//*p:字符串起始地址
//void OLED_ShowString(u8 x,u8 y,const u8 *p,u8 size)
//size字体大小中,24=24*12,1=16*8,12=12*6,OLED液晶屏=128*64,该代码只支持这三种大小字体
//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示
//size:选择字体 12/16/24
//void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
//size字体大小,同上
//注意ASCII字符集就是从 空格 开始的,所以第一个是’ '字符****
//常用ASCII表
//偏移量32
//ASCII字符集: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
//PC2LCD2002取模方式设置:阴码+逐列式+顺向+C51格式
//总共:3个字符集(12*12、16*16和24*24),用户可以自行新增其他分辨率的字符集。
//每个字符所占用的字节数为:(size/8+((size%8)?1:0))*(size/2),其中size:是字库生成时的点阵大小(12/16/24...)