*** 作步骤如下:
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如何才能在液晶屏上让数字左右移动等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)