那位老大能提供一个stc单片机驱动oled屏(128*64)的keil c程序,要很简单的就行

那位老大能提供一个stc单片机驱动oled屏(128*64)的keil c程序,要很简单的就行,第1张

#define LCM_RW P2_0 //定义引脚

#define LCM_RS P2_1

#define LCM_E P2_2

#define LCM_Data P1

#define Busy 0x80 //用于检测LCM状态字中的Busy标识

#i nclude <at89x51h>

void WriteDataLCM(unsigned char WDLCM);

void WriteCommandLCM(unsigned char WCLCM,BuysC);

unsigned char ReadDataLCM(void);

unsigned char ReadStatusLCM(void);

void LCMInit(void);

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code DData);

void Delay5Ms(void);

void Delay400Ms(void);

unsigned char code uctech[] = {"uctech"};

unsigned char code net[] = {"uctechicpcncom"};

void main(void)

{

Delay400Ms(); //启动等待,等LCM讲入工作状态

LCMInit(); //LCM初始化

Delay5Ms(); //延时片刻(可不要)

DisplayListChar(0, 5, uctech);

DisplayListChar(0, 0, net);

ReadDataLCM();//测试用句无意义

while(1);

}

//写数据

void WriteDataLCM(unsigned char WDLCM)

{

ReadStatusLCM(); //检测忙

LCM_Data = WDLCM;

LCM_RS = 1;

LCM_RW = 0;

LCM_E = 0; //若晶振速度太高可以在这后加小的延时

LCM_E = 0; //延时

LCM_E = 1;

}

//写指令

void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测

{

if (BuysC) ReadStatusLCM(); //根据需要检测忙

LCM_Data = WCLCM;

LCM_RS = 0;

LCM_RW = 0;

LCM_E = 0;

LCM_E = 0;

LCM_E = 1;

}

//读数据

unsigned char ReadDataLCM(void)

{

LCM_RS = 1;

LCM_RW = 1;

LCM_E = 0;

LCM_E = 0;

LCM_E = 1;

return(LCM_Data);

}

//读状态

unsigned char ReadStatusLCM(void)

{

LCM_Data = 0xFF;

LCM_RS = 0;

LCM_RW = 1;

LCM_E = 0;

LCM_E = 0;

LCM_E = 1;

while (LCM_Data & Busy); //检测忙信号

return(LCM_Data);

}

void LCMInit(void) //LCM初始化

{

LCM_Data = 0;

WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号

Delay5Ms();

WriteCommandLCM(0x38,0);

Delay5Ms();

WriteCommandLCM(0x38,0);

Delay5Ms();

WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号

WriteCommandLCM(0x08,1); //关闭显示

WriteCommandLCM(0x01,1); //显示清屏

WriteCommandLCM(0x06,1); // 显示光标移动设置

WriteCommandLCM(0x0C,1); // 显示开及光标设置

}

//按指定位置显示一个字符

void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)

{

Y &= 0x1;

X &= 0xF; //限制X不能大于15,Y不能大于1

if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;

X |= 0x80; // 算出指令码

WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码

WriteDataLCM(DData);

}

//按指定位置显示一串字符

void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code DData)

{

unsigned char ListLength;

ListLength = 0;

Y &= 0x1;

X &= 0xF; //限制X不能大于15,Y不能大于1

while (DData[ListLength]>0x20) //若到达字串尾则退出

{

if (X <= 0xF) //X坐标应小于0xF

{

DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符

ListLength++;

X++;

}

}

}

//5ms延时

void Delay5Ms(void)

{

unsigned int TempCyc = 5552;

while(TempCyc--);

}

//400ms延时

void Delay400Ms(void)

{

unsigned char TempCycA = 5;

unsigned int TempCycB;

while(TempCycA--)

{

TempCycB=7269;

while(TempCycB--);

};

*** 作步骤如下:

1、将OLED显示模块与GoKit3的40引脚GPIO接口连接起来。

2、在GoKit3开发板上安装Python开发环境和相应的驱动程序。可以在开发板的官方网站上下载和安装相应的软件包。

3、编写Python程序来控制OLED显示模块。可以使用Python的GPIO库和相应的OLED驱动程序来控制OLED模块。

知识点:

1、认识元器件:Arduino UNO主控板、扩展板、LED灯模块

2、认识Mixly程序模块:数字输出、延时、循环

3、程序设计:顺序结构

任务一、点亮板载LED灯

1、程序编写

双击Mixly文件夹中Mixlyexe文件,即可打开Mixly软件:

目前使用Mixly软件0998

2、根据Arduino UNO3及驱动程序在电脑中的地址,在Mixly软件中选择相应的位置

本机Arduino UNO3是COM76(根据各自不同的配置而定)

3、点击输入/输出模块跳出对应选项

选择数字输出模块,点击左键拖动到空白区

管脚0处点击下拉菜单选择13(Arduino UNO3上的板载灯针对13号管脚)

同时把13号管脚设为高电平(点亮)

点击右下角的上传按键(编译的主要功能是检查程序的正确性)

直到左下角对话框中出现上传成功为止,上传期间请勿插拔数据线(出现其他提示,请仔细阅读前几节内容,完成Arduino UNO3主控板的驱动安装)

这是你会发现Arduino UNO3主控板和扩展板上有一个标有“L”的LED灯常亮,说明你的Arduino UNO3主控板和你的电脑已经正常通讯了。

任务二:点亮真实的LED灯

所需材料:Arduino UNO3主控板1、扩展板1、LED灯模块1

物理连接:

扩展板与主控板根据对应的针脚插好

取出一个LED模块,用连接线将其与10号管脚对应的三个管脚相连(注意插线时颜色的对应:红色基本代表电源正极VCC、黑色基本代表电源负极GND)

LED模块

硬件接线图

延续任务一的程序,把管脚13改为10(因为LED模块连接在10号管脚)

接下来增加延时功能,在“控制”菜单中找到“延时模块”,拖动至空白处并与“数字输出”模块拼接

(1000毫秒=1秒,1000微妙=1毫秒)

(相同的模块命令可以右击鼠标复制)

(把数字输出管脚10号设为低),继续增加延时功能

编写好程序后,单击“上传”,将程序上传到UNO3主控板上。(注意,在上传程序之前再次确认主控板型号和COM接口号,点击上传后切勿插拔数据线直至右下角出现“上传成功”)

数字输出是Arduino UNO3主控板对电子元件的控制方式之一。它向输出的电路传送数字型号-0和1两种信息。

程序流程图

你可以看见,LED模块正在重复执行亮1秒灭1秒的效果,如果没有其他干预,程序会一直重复执行下去

如果您导入了一个 OLED 显示器的程序后,屏幕背光变为了白色,可能有以下几种原因:

1 电源问题:确保您的电源电压匹配 OLED 显示器的要求,并且您的电源单元正常工作。

2 连接问题:每种 OLED 显示器都有不同的连接方式。请确保您正确连接了所有必需的引脚,例如电源、数据和控制引脚。

3 程序问题:检查您的程序是否正确。有时,错误的程序将导致 OLED 显示器白屏。确保程序正确编写以及正确使用库和函数。

4 显示器损坏:如果您尝试了上述步骤并且仍然无法解决问题,那么您的 OLED 显示器可能已损坏。尝试使用新的 OLED 显示器并测试是否可以正常工作。

你while(1){}里面的程序执行是需要时间的,所以导致会闪,因为我不知道你几个子程序都是怎么写的所以无法详细说,不过基本是在显示子程序oled_fixeds_2x("\nScore");是这个吧之后加个延时就可以实现保持,不过如果你要完全不闪的那就在后面加个while(1);

以上就是关于那位老大能提供一个stc单片机驱动oled屏(128*64)的keil c程序,要很简单的就行全部的内容,包括:那位老大能提供一个stc单片机驱动oled屏(128*64)的keil c程序,要很简单的就行、gokit3怎么接oled、米思琪如何驱动oled显示屏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10089995.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存