云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > STM32 实验9 OLED显示实验

STM32 实验9 OLED显示实验

  • 62 次阅读
  • 3 次下载
  • 2026/1/27 7:20:56

图3.9.2.2 OLED模块与开发板连接实物图

3.9.3 软件设计

软件设计我们依旧在之前的工程上面增加,首先在HARDWARE文件夹下新建一个OLED的文件夹。然后打开USER文件夹下的工程,新建一个oled.c的文件和oled.h的头文件,保存在OLED文件夹下,并将OLED文件夹加入头文件包含路径。

打开oled.c,输入如下代码: #include \#include \#include \#include \ //OLED的显存 //存放格式如下. //[0]0 1 2 3 ... 127 //[1]0 1 2 3 ... 127 //[2]0 1 2 3 ... 127 //[3]0 1 2 3 ... 127 //[4]0 1 2 3 ... 127 //[5]0 1 2 3 ... 127 //[6]0 1 2 3 ... 127 //[7]0 1 2 3 ... 127

u8 OLED_GRAM[128][8]; //更新显存到LCD

void OLED_Refresh_Gram(void) {

u8 i,n;

for(i=0;i<8;i++) {

LED_WR_Byte (0xb0+i,OLED_CMD); //设置页地址(0~7)

OLED_WR_Byte (0x02,OLED_CMD); //设置显示位置—列低地址,偏移了2列

LED_WR_Byte (0x10,OLED_CMD); //设置显示位置—列高地址

for(n=0;n<128;n++)OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);

}

}

#if OLED_MODE==1

//向SSD1306写入一个字节。 //dat:要写入的数据/命令

//cmd:数据/命令标志 0,表示命令;1,表示数据; void OLED_WR_Byte(u8 dat,u8 cmd)

{

DATAOUT(dat)

OLED_RS=cmd; OLED_CS=0; OLED_WR=0; OLED_WR=1; OLED_CS=1; OLED_RS=1;

} #else

//SSD1306写入一个字节。 //dat:要写入的数据/命令

//cmd:数据/命令标志 0,表示命令;1,表示数据; void OLED_WR_Byte(u8 dat,u8 cmd)

{

u8 i;

OLED_RS=cmd; //写命令 OLED_CS=0; for(i=0;i<8;i++)

{

OLED_SCLK=0; if(dat&0x80)OLED_SDIN=1;

else OLED_SDIN=0;

OLED_SCLK=1; dat<<=1; }

OLED_CS=1; OLED_RS=1; } #endif

//开启OLED显示

void OLED_Display_On(void) {

OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令 OLED_WR_Byte(0X14,OLED_CMD); //DCDC ON OLED_WR_Byte(0XAF,OLED_CMD); //DISPLAY ON }

//关闭OLED显示

void OLED_Display_Off(void) {

OLED_WR_Byte(0X8D,OLED_CMD); //SET DCDC命令

OLED_WR_Byte(0X10,OLED_CMD); //DCDC OFF OLED_WR_Byte(0XAE,OLED_CMD); //DISPLAY OFF }

//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!! void OLED_Clear(void) {

u8 i,n;

for(i=0;i<8;i++)for(n=0;n<128;n++)OLED_GRAM[n][i]=0X00;

OLED_Refresh_Gram();//更新显示 }

//画点 //x:0~127 //y:0~63

//t:1 填充 0,清空

void OLED_DrawPoint(u8 x,u8 y,u8 t) {

u8 pos,bx,temp=0;

if(x>127||y>63)return;//超出范围了.

pos=7-y/8; bx=y%8;

temp=1<<(7-bx);

if(t)OLED_GRAM[x][pos]|=temp;

else OLED_GRAM[x][pos]&=~temp; }

//x1,y1,x2,y2 填充区域的对角坐标

//确保x1<=x2;y1<=y2 0<=x1<=127 0<=y1<=63 //dot:0,清空;1,填充

void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot) {

u8 x,y;

for(x=x1;x<=x2;x++)

{ for(y=y1;y<=y2;y++)OLED_DrawPoint(x,y,dot);

}

OLED_Refresh_Gram();//更新显示 }

//在指定位置显示一个字符,包括部分字符 //x:0~127 //y:0~63

//mode:0,反白显示;1,正常显示 //size:选择字体 16/12

void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode) {

u8 temp,t,t1;

u8 y0=y; chr=chr-' ';//得到偏移后的值

for(t=0;t

{

if(size==12)temp=asc2_1206[chr][t]; //调用1206字体

else temp=asc2_1608[chr][t]; //调用1608字体 for(t1=0;t1<8;t1++)

{

if(temp&0x80)OLED_DrawPoint(x,y,mode);

else OLED_DrawPoint(x,y,!mode);

temp<<=1; y++;

if((y-y0)==size)

{

y=y0; x++; break; } } } }

//m^n函数

u32 mypow(u8 m,u8 n) {

u32 result=1;

while(n--)result*=m; return result; }

//显示2个数字 //x,y :起点坐标 //len :数字的位数 //size:字体大小

//mode:模式 0,填充模式;1,叠加模式 //num:数值(0~4294967295);

搜索更多关于: STM32 实验9 OLED显示实验 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

图3.9.2.2 OLED模块与开发板连接实物图 3.9.3 软件设计 软件设计我们依旧在之前的工程上面增加,首先在HARDWARE文件夹下新建一个OLED的文件夹。然后打开USER文件夹下的工程,新建一个oled.c的文件和oled.h的头文件,保存在OLED文件夹下,并将OLED文件夹加入头文件包含路径。 打开oled.c,输入如下代码: #include \#include \#include \#include \ //OLED的显存 //存放格式如下. //[0]0 1 2 3 ... 127 //[1]0 1 2 3 ... 127 //[2]0 1 2 3 ... 127 //[3]0 1 2 3 ... 127 //[4]0 1 2 3 ... 127 //[5]0 1

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com