STM32-OLED小数显示函数
STM32-OLED小数显示函数
OLED即有机发光管(Organic Light-Emitting Diode,OLED)。OLED显示技术具有自发光、广视角、几乎无穷高的对比度、较低功耗、极高反应速度、可用于绕曲性面板、使用温度范围广、构造及制程简单等有点,被认为是下一代的平面显示屏新兴应用技术。
OLED显示和传统的LCD显示不同,其可以自发光,所以不需要背光灯,这使得OLED显示屏相对于LCD显示屏尺寸更薄,同时显示效果更优。 常用的OLED屏幕有蓝色、黄色、白色等几种。屏的大小为0.96寸,像素点为 128*64,所以我们称为0.96oled屏或者12864屏。
OLED屏幕特点
1.模块尺寸:23.7 *23.8mm
2.电源电压:3.3-5.5V
3.驱动芯片:SSD1306
4.测试平台:提供 k60/k10,9s12XS128,51,stm32,stm8等单片机
OLED网上的驱动代码一般厂商发货会提供驱动程序,但是显示小数很多都没有编写。这里编写了一段可显示任意位小数的代码(以正点原子代码为基础),需要显示有符号的小数程序稍微修改即可。
小数显示程序:
//显示数字
//x,y :起点坐标
//num :要显示的小数字
//z_len :整数数字的位数
//f_len :小数数字的位数
//size:字体大小
//mode:0,反色显示;1,正常显示
//z_len为整数显示位数,f_len为小数显示位数,size1为字体大小
void OLED_Showdecimal(u8 x,u8 y,float num,u8 z_len,u8 f_len,u8 size1,u8 mode)
{ u8 t,temp;u8 enshow=0;int z_temp,f_temp; z_temp=(int)num;//整数部分for(t=0;t<z_len;t++){temp=(z_temp/OLED_Pow(10,z_len-t-1))%10;if(enshow==0 && t<(z_len-1)){if(temp==0){OLED_ShowChar(x+(size1/2)*t,y,' ',size1,mode);continue;}elseenshow=1;}OLED_ShowChar(x+(size1/2)*t,y,temp+'0',size1,mode); }//小数点OLED_ShowChar(x+(size1/2)*(z_len),y,'.',size1,mode); f_temp=(int)((num-z_temp)*(OLED_Pow(10,f_len)));//小数部分for(t=0;t<f_len;t++){temp=(f_temp/OLED_Pow(10,f_len-t-1))%10;OLED_ShowChar(x+(size1/2)*(t+z_len)+5,y,temp+'0',size1,mode); }
}
整数显示程序:
//显示数字
//x,y :起点坐标
//num :要显示的数字
//len :数字的位数
//size:字体大小
//mode:0,反色显示;1,正常显示
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size1,u8 mode)
{u8 t,temp,m=0;u8 enshow=0;if(size1==8)m=2;for(t=0;t<len;t++){temp=(num/OLED_Pow(10,len-t-1))%10;if(enshow==0 && t<(len-1)){if(temp==0){OLED_ShowChar(x+(size1/2+m)*t,y,' ',size1,mode);continue;}elseenshow=1;}OLED_ShowChar(x+(size1/2+m)*t,y,temp+'0',size1,mode); }
}
有符号小数显示程序:
//显示数字
//x,y :起点坐标
//num :要显示的小数字
//z_len :整数数字的位数
//f_len :小数数字的位数
//size:字体大小
//mode:0,反色显示;1,正常显示
//z_len为整数显示位数,f_len为小数显示位数,size1为字体大小
void OLED_Showdecimal(u8 x,u8 y,float num,u8 z_len,u8 f_len,u8 size1,u8 mode)
{ u8 t,temp;u8 enshow=0;int z_temp,f_temp; z_temp=(int)num;//符号部分 位置根据情况调节一下if(num < 0){OLED_ShowChar(x,y,'0'- 3,size1);num =fabs(num);}elseOLED_ShowChar(x,y,' ',size1);//第一位显示符号//整数部分for(t=0;t<z_len;t++){temp=(z_temp/OLED_Pow(10,z_len-t-1))%10;if(enshow==0 && t<(z_len-1)){if(temp==0){OLED_ShowChar(x+(size1/2)*t,y,' ',size1,mode);continue;}elseenshow=1;}OLED_ShowChar(x+(size1/2)*t,y,temp+'0',size1,mode); }//小数点OLED_ShowChar(x+(size1/2)*(z_len),y,'.',size1,mode); f_temp=(int)((num-z_temp)*(OLED_Pow(10,f_len)));//小数部分for(t=0;t<f_len;t++){temp=(f_temp/OLED_Pow(10,f_len-t-1))%10;OLED_ShowChar(x+(size1/2)*(t+z_len)+5,y,temp+'0',size1,mode); }
}
主程序调用:
int main(void)
{u8 t=' ';float vol_1=78.566;float vol_2=9.21;delay_init();OLED_Init();OLED_ColorTurn(0);//0正常显示,1 反色显示OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示while(1){OLED_Refresh();delay_ms(500);OLED_Clear();OLED_Showdecimal(8,16,vol_1,2,3,16,1); OLED_Showdecimal(64,16,vol_2,1,2,16,1); OLED_ShowString(20,32,"2014/05/01",16,1);OLED_ShowString(0,48,"ASCII:",16,1); OLED_ShowString(63,48,"CODE:",16,1);OLED_ShowChar(48,48,t,16,1);//显示ASCII字符 t++;if(t>'~')t=' ';OLED_ShowNum(103,48,t,3,16,1);OLED_Refresh();delay_ms(500);OLED_Clear();OLED_ShowChinese(0,0,0,16,1); //16*16 中OLED_ShowChinese(16,0,0,24,1); //24*24 中OLED_ShowChinese(24,20,0,32,1);//32*32 中OLED_ShowChinese(64,0,0,64,1); //64*64 中OLED_Refresh();delay_ms(500);OLED_Clear();OLED_ShowString(0,0,"ABC",8,1);//6*8 “ABC”OLED_ShowString(0,8,"ABC",12,1);//6*12 “ABC”OLED_ShowString(0,20,"ABC",16,1);//8*16 “ABC”OLED_ShowString(0,36,"ABC",24,1);//12*24 “ABC”OLED_Refresh();delay_ms(500);}
}
STM32-OLED小数显示函数相关推荐
- STM32+OLED巧妙显示汉字英文
STM32+OLED巧妙显示汉字英文 目标:实现OLED_Print函数,可以在OLED屏幕上显示中英文和符号混合的任意字符串 汉字编码原理 ASCII码显示的原理这里不再说明,一般的OLED例程都有 ...
- STM32分别实现温湿度的采集和OLED显示屏显示数据
目录 一.温湿度的采集 1.1了解I2C总线协议 1.2实现AHT20采集程序 二.OLED显示屏显示数据 2.1了解SPI 2.2使用OLED显示 2.2.1实验题目: 2.2.2实验过程 三.总结 ...
- stm32汉字字库显示实验与OLED的使用(开始于2021-09-01)
stm32汉字字库显示实验与OLED的使用 1.字库的使用 GBK字库的简介: GBK库的由两部分组成,如下图: 高位从0x81开始是为了兼容ASII字符,因为未扩展的ASII字符是从0-128,即0 ...
- STM32小项目之dht11在oled上显示温湿度
前言: 实现一个简单的功能,最终多个功能合起来,就是一个大项目,也叫模块化编程:本篇文章不在讲述oled的用法和代码,因为代码太多了,粘不过来,需要的可以去看我另一篇文章专门讲解oled的. 本文牵扯 ...
- 第八章 STM32+SGP气体传感器+DHT11温湿度传感器+OLED模块显示室内温湿度、二氧化碳和甲醛浓度
在智能家居相关的物联网毕设中,少不了室内气体检测功能,比如检测烟雾,检测一氧化碳,检测甲醛等有害气体浓度,别人有的,我们也要有!所以本章给大家介绍一款气体传感器--SGP气体传感器,这款气体传感器能够 ...
- 【嵌入式】STM32基于SPI通信协议OLED屏显示
STM32基于SPI通信协议OLED屏显示 一.SPI协议和OLED介绍 1.SPI协议介绍 物理层 协议层 2.OLED显示屏介绍 二.显示个人学号姓名实验 1.题目要求 2.代码部分 1.完整代码 ...
- 基于stm32的OLED显示屏显示
文章目录 一.内容 二.关于SPI 三.关于OLED 四.功能实现 1)实验准备 2)代码准备 1.显示学号和姓名 2.显示AHT20的温度和湿度 3.滑动显示长字符 3)结果展示 五.参考内容 六. ...
- 基于STM32的0.96寸OLED显示屏显示数据和滚动显示
文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...
- STM32读取DS18B20温度,并在OLED上显示
部分代码来源于网络,侵权删 本文使用硬件:STM32F103C8T6最小系统板.IIC协议0.96寸OLED屏幕显示.DS18B20传感器 实现功能:在OLED上显示出DS18B20采集到的温度,精确 ...
最新文章
- 「留光」1小时:中科大让我们离「量子U盘」又近了一步
- 腾讯云工业互联网助力平台发布 推动制造业“数字化”蝶变
- Idea使用Lombok简化实体类代码
- 7-spark学习笔记-spark性能调优
- 电子管计算机的操作者是谁,大一计算机第一学期考试重点及相应习题 作者
- Python 应用领域
- 远程桌面提示:身份验证错误 要求的函数不受支持
- 学完计组后,我马上在「我的世界」造了台显示器,你敢信?
- python 100题_python 100题
- 二-Java基础-作业-基础语法
- Selenium2 + Python3.6实战(五):生成HTML测试报告 Invalid argument
- vs2012 express 密钥
- java经典算法(三)---zws
- CT图像重建简要介绍
- 下行控制信息 - 下行DCI
- goldendict无法导入字典
- 蓝桥杯——罗马数字转换器
- SpringBoot将图片/文件传至前端
- python爬取支付宝基金数据_python爬取支付宝账单
- 求你了别秀了——Reversion Count