gokit3怎么接oled

gokit3怎么接oled,第1张

*** 作步骤如下:

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

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

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

如下

#include <msp430x14xh>

typedef unsigned int uint;

typedef unsigned char uchar;

#define BIT(x) (1 << (x))

extern const unsigned char shuzi_table[];

void Send(uchar type,uchar transdata);

/液晶控制IO的宏定义/

#define cyCS 0 //P30,片选信号

#define cySID 1 //P31,串行数据

#define cyCLK 2 //P32,同步时钟

#define cyPORT P3OUT

#define cyDDR P3DIR

/

函数名称:delay_Nus

功 能:延时N个us的时间

参 数:n--延时长度

返回值 :无

/

void delay_Nus(uint n)

{

uchar i;

for(i = n;i > 0;i--)

_NOP();

}

/

函数名称:delay_1ms

功 能:延时约1ms的时间

参 数:无

返回值 :无

/

void delay_1ms(void)

{

uchar i;

for(i = 150;i > 0;i--) _NOP();

}

/

函数名称:delay_Nms

功 能:延时N个ms的时间

参 数:无

返回值 :无

/

void delay_Nms(uint n)

{

uint i = 0;

for(i = n;i > 0;i--)

delay_1ms();

}

/

函数名称:Ini_Lcd

功 能:初始化液晶模块

参 数:无

返回值 :无

/

void Ini_Lcd(void)

{

cyDDR |= BIT(cyCLK) + BIT(cySID) + BIT(cyCS); //相应的位端口设置为输出

delay_Nms(100); //延时等待液晶完成复位

Send(0,0x30); /功能设置:一次送8位数据,基本指令集/

delay_Nus(72);

Send(0,0x02); /DDRAM地址归位/

delay_Nus(72);

Send(0,0x0c); /显示设定:开显示,不显示光标,不做当前显示位反白闪动/

delay_Nus(72);

Send(0,0x01); /清屏,将DDRAM的位址计数器调整为“00H”/

delay_Nus(72);

Send(0,0x06); /功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1/

delay_Nus(72);

}

/

函数名称:Send

功 能:MCU向液晶模块发送1一个字节的数据

参 数:type--数据类型,0--控制命令,1--显示数据

transdata--发送的数据

返回值 :无

/

void Send(uchar type,uchar transdata)

{

uchar firstbyte = 0xf8;

uchar temp;

uchar i,j = 3;

if(type) firstbyte |= 0x02;

cyPORT |= BIT(cyCS);

cyPORT &= ~BIT(cyCLK);

while(j > 0)

{

if(j == 3) temp = firstbyte;

else if(j == 2) temp = transdata&0xf0;

else temp = (transdata << 4) & 0xf0;

for(i = 8;i > 0;i--)

{

if(temp & 0x80) cyPORT |= BIT(cySID);

else cyPORT &= ~BIT(cySID);

cyPORT |= BIT(cyCLK);

temp <<= 1;

cyPORT &= ~BIT(cyCLK);

}

//三个字节之间一定要有足够的延时,否则易出现时序问题

if(j == 3) delay_Nus(600);

else delay_Nus(200);

j--;

}

cyPORT &= ~BIT(cySID);

cyPORT &= ~BIT(cyCS);

}

/

函数名称:Clear_GDRAM

功 能:清除液晶GDRAM内部的随机数据

参 数:无

返回值 :无

/

void Clear_GDRAM(void)

{

uchar i,j,k;

Send(0,0x34); //打开扩展指令集

i = 0x80;

for(j = 0;j < 32;j++)

{

Send(0,i++);

Send(0,0x80);

for(k = 0;k < 16;k++)

{

Send(1,0x00);

}

}

i = 0x80;

for(j = 0;j < 32;j++)

{

Send(0,i++);

Send(0,0x88);

for(k = 0;k < 16;k++)

{

Send(1,0x00);

}

}

Send(0,0x30); //回到基本指令集

}

/

函数名称:Draw_PM

功 能:在整个屏幕上画一个

参 数:ptr--指向保存位置的指针

返回值 :无

/

void Draw_PM(const uchar ptr)

{

uchar i,j,k;

Send(0,0x34); //打开扩展指令集

i = 0x80;

for(j = 0;j < 32;j++)

{

Send(0,i++);

Send(0,0x80);

for(k = 0;k < 16;k++)

{

Send(1,ptr++);

}

}

i = 0x80;

for(j = 0;j < 32;j++)

{

Send(0,i++);

Send(0,0x88);

for(k = 0;k < 16;k++)

{

Send(1,ptr++);

}

}

Send(0,0x36); //打开绘图显示

Send(0,0x30); //回到基本指令集

}

/

函数名称:Draw_TX

功 能:在液晶上描绘一个1616的图形

参 数:Yaddr--Y地址,

Xaddr--X地址

dp--指向保存图形数据的指针

返回值 :无

/

void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar dp)

{

uchar j;

uchar k = 0;

Send(0,0x34); //使用扩展指令集,关闭绘图显示

for(j = 0;j < 16;j++)

{

Send(0,Yaddr++); //Y地址

Send(0,Xaddr); //X地址

Send(1,dp[k++]); //送两个字节的显示数据

Send(1,dp[k++]);

}

Send(0,0x36); //打开绘图显示

Send(0,0x30); //回到基本指令集模式

}

1keil5

2(2)PC,STM32开发板(这里使用野火stm32mini)、096存OLED显示屏、烧录装置(下载器)

参考厂家的用户手册完成引脚连接:

二、基于SPI修改程序实现数据显示

1中文数据显示

文本内容为中文在点阵中为1616,故都为16进制,我们通过软件进行生成

使用该软件生成十六进制字模

选择模式中的字符模式,在选择中调整字体大小为16及16进制

2代码

云(0) 开(1) 处(2)

DB 40H 40H 42H 42H 42H 42H C2H 42H 42H 42H 42H 42H 42H 40H 40H 00H;

DB 00H 20H 70H 28H 24H 23H 20H 20H 20H 24H 28H 30H E0H 00H 00H 00H;"云",0

DB 80H 82H 82H 82H FEH 82H 82H 82H 82H 82H FEH 82H 82H 82H 80H 00H;

DB 00H 80H 40H 30H 0FH 00H 00H 00H 00H 00H FFH 00H 00H 00H 00H 00H;"开",1

DB 00H 80H 60H 9FH 08H 08H F8H 00H 00H FFH 10H 20H 40H 80H 00H 00H;

DB 81H 40H 20H 13H 0CH 13H 20H 20H 40H 5FH 40H 40H 40H 41H 40H 00H;"处",2

2 代码显示部分:

void TEST_MainPage(void)

{

GUI_ShowString(28,0,"MR liao",16,1);

GUI_ShowCHinese(28,20,16,"云开处",1);

GUI_ShowString(4,48,"631807060611",16,1);

delay_ms(1500);

delay_ms(1500);

}

main函数

int main(void)

{

delay_init(); //延时函数初始化

NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

OLED_Init(); //初始化OLED

OLED_Clear(0); //清屏(全黑)

while(1)

{

TEST_MainPage(); //主界面显示测试

}

}

三、使用STM32在096寸OLED显示屏上实现字符滚动

1初识OLED屏滚动命令

本OLED屏的芯片类型为:SSD1306

设置水平左右移步骤:

OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动

OLED_WR_Byte(0x26,OLED_CMD); //水平向左或者右滚动 26/27

OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节

OLED_WR_Byte(0x00,OLED_CMD); //起始页 0

OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔

OLED_WR_Byte(0x07,OLED_CMD); //终止页 7

OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节

OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节

OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动

设置垂直和水平滚动的(没有可用连续垂直滚动)步骤:

OLED_WR_Byte(0x2e,OLED_CMD); //关闭滚动

OLED_WR_Byte(0x29,OLED_CMD); //水平垂直和水平滚动左右 29/2a

OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节

OLED_WR_Byte(0x00,OLED_CMD); //起始页 0

OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔

OLED_WR_Byte(0x07,OLED_CMD); //终止页 1

OLED_WR_Byte(0x01,OLED_CMD); //垂直滚动偏移量

OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动

2文本取模

参考上面取模

3代码

main函数:

int main(void)

{

delay_init(); //延时函数初始化

NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

OLED_Init(); //初始化OLED

OLED_Clear(0); //清屏(全黑)

OLED_WR_Byte(0x2E,OLED_CMD); //关闭滚动

OLED_WR_Byte(0x26,OLED_CMD); //水平向左或者右滚动 26/27

OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节

OLED_WR_Byte(0x00,OLED_CMD); //起始页 0

OLED_WR_Byte(0x07,OLED_CMD); //滚动时间间隔

OLED_WR_Byte(0x07,OLED_CMD); //终止页 7

OLED_WR_Byte(0x00,OLED_CMD); //虚拟字节

OLED_WR_Byte(0xFF,OLED_CMD); //虚拟字节

TEST_MainPage(); //主界面显示测试

OLED_WR_Byte(0x2F,OLED_CMD); //开启滚动

}

显示部分代码

void TEST_MainPage(void)

{

GUI_ShowString(28,0,"HELLO",16,1);

GUI_ShowCHinese(12,16,16,"欢迎来到重庆交通大学",1);

delay_ms(1500);

delay_ms(1500);

}

以上就是关于gokit3怎么接oled全部的内容,包括:gokit3怎么接oled、msp430上怎么控制12864的OLED液晶呢OLED是4线串行控制的。有51单片机例程,可是移植到430上一直不亮、stm32如何才能在液晶屏上让数字左右移动等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存