6针脚SPI接口的OLED屏可以通过51单片机进行控制,但需要注意以下几点:
1 6针脚SPI接口的OLED屏必须是支持33V电平的,因为51单片机一般使用33V或5V电平,不能超过OLED屏的最大电压。
2 在连接51单片机和OLED屏时,需要根据OLED屏的引脚定义正确地连线,并在程序中正确设置每个引脚的功能。
3 OLED屏的控制方式一般由其芯片决定,可以查询芯片型号和数据手册以获得更详细的控制说明。
4 在使用OLED屏时,需要使用专门的库文件或编写相应的驱动程序来实现图像和文本的显示,这需要具备一定的嵌入式开发经验。
总之,6针脚SPI接口的OLED屏可以连接到51单片机上进行控制,但需要注意硬件电路和软件编程方面的细节,尤其是对于初学者来说,需要认真学习相关知识和技能才能顺利实现。
知识点:
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秒的效果,如果没有其他干预,程序会一直重复执行下去
1确定电路连接是否正确
2确定电源是否正常,复位是否正常,D/C使能是否正常
3确定SPI的是否有输出
在初始化SPI后加入下面语句,用示波器测量MOSI,SCK,是否有输出,数值是否正确,触发波形是否正确(一般是SCK上升沿输入MOSI数据)
while(1)
{
LCD_WrDat(0xca);
}
4OLED初始化是否正确
详细参考:
>
#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--);
};
以上就是关于6针脚spioled屏可以接51单片机吗全部的内容,包括:6针脚spioled屏可以接51单片机吗、米思琪如何驱动oled显示屏、stm32f407vet6 驱动 oled12864 问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)