第一范文网 - 专业文章范例文档资料分享平台

STM32 实验9 OLED显示实验

来源:用户分享 时间:2025/8/20 0:39:28 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

图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显示实验 的文档
STM32 实验9 OLED显示实验.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6to7906ntq3xy6r95j55_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top