MSP430F5529之1.44寸OLED显示

发布者:cw57324588最新更新时间:2022-10-18 来源: csdn关键字:MSP430F5529  OLED显示 手机看文章 扫描二维码
随时随地手机看文章

前言

有几天没更新了,最近一直忙着电赛,学习这个TI处理器芯片,因为我之前并没有接触过。毕竟我学的51单片机和32单片机,感觉这个16位的单片机“食之乏味,弃之可惜”,但是没办法,电赛TI公司赞助的,还是得准备准备哈哈,这里我是用CCS软件来入门的。


一、1.44寸OLED “独白”

其实相对于0.96寸OLED ,该OLED 最明显的特点就是它多出了四个接口(RES、DC、CS、BLK),同时保留了原有的接口(VCC、GND、SCL、SDA),下面讲一下接线问题:


电源接线:


VCC :接 5V     


GND :接地


液晶屏数据线接线:


CS  :      片选信号


SCL(CLK):     SPI 时钟信号引脚


SDA(SDI) :  SPI 总线数据信号引脚


液晶屏控制线接线:


BLK(LED):        背光控制信号,高电平点亮


DC(RS) :       寄存器/数据选择信号(RS=0 数据总线发送的是指令;RS=1 数据总线 发送的是像素数据)


RES(RST):         液晶屏复位信号,低电平复位

上图利用MSP430F5529实现对1.44寸OLED的驱动+显示(9只小企鹅哈哈)


后面大家可以根据自己喜欢去模后显示出来,附上文字和图片取模软件:


链接:https://pan.baidu.com/s/14uSXRJGgxpHG_FlqXhDNKQ 

提取码:2580


也可以点此链接到浏览器打开:


PCtoLCD2 ()_3 次经济不等|次次要的"无政府"的"无政府之比" (baidu.com)


二、 驱动OLED 主要代码

这里代码确实比较多,我就列举一些,具体会分享出来 


下面讲一下主函数:首选就是原先自带的系统时钟默认就是1MHZ,相比于32F1板的72MHZ和那肯定是不用比了,大家也可以试一下升时钟,直接运行,结果你会发现,运行速度龟速,因此升级时钟频率尤为重要,在升级时钟频率前也要先升压。


#include

#include "type.h"

#include "timeup.h"

#include "QDTFT_demo.h"

#include "Lcd_Driver.h"

#include "GUI.h"

#include "Picture.h"

 

 

void main(void)

 {

 

    WDTCTL = WDTPW + WDTHOLD;

    upVcc();//核心电压上升

    delay_ms(200);

    timerup();//配置时钟25MHZ

    delay_ms(500);

    Lcd_Init();//初始化

    LCD_LED_SET;//通过IO控制背光亮

    showimage(gImage_qq);//取模图像的代码显示企鹅

    while(1)

    {

 

    }

 

}


 下面是关键代码:


#include "msp430.h"

#include "Lcd_Driver.h"

#include "LCD_Config.h"

 

 

//液晶IO初始化配置

void LCD_GPIO_Init(void)

{

 

    LCD_SDA;

    LCD_RS ;

    LCD_CS   ;

    LCD_RST ;

    LCD_SCL  ;

    LCD_LED  ;

}

//向SPI总线传输一个8位数据

void  SPI_WriteData(u8 Data)

{

unsigned char i=0;

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

{

if(Data&0x80)

  LCD_SDA_SET; //输出数据

      else LCD_SDA_CLR;

   

      LCD_SCL_CLR;       

      LCD_SCL_SET;

      Data<<=1; 

}

}

//向液晶屏写一个8位指令

void Lcd_WriteIndex(u8 Index)

{

   //SPI 写命令时序开始

   LCD_CS_CLR;

   LCD_RS_CLR;

SPI_WriteData(Index);

   LCD_CS_SET;

}

 

//向液晶屏写一个8位数据

void Lcd_WriteData(u8 Data)

{

   LCD_CS_CLR;

   LCD_RS_SET;

   SPI_WriteData(Data);

   LCD_CS_SET; 

}

//向液晶屏写一个16位数据

void LCD_WriteData_16Bit(u16 Data)

{

   LCD_CS_CLR;

   LCD_RS_SET;

SPI_WriteData(Data>>8); //写入高8位数据

SPI_WriteData(Data); //写入低8位数据

   LCD_CS_SET; 

}

void Lcd_WriteReg(u8 Index,u8 Data)

{

Lcd_WriteIndex(Index);

  Lcd_WriteData(Data);

}

void Lcd_Reset(void)

{

LCD_RST_CLR;

delay_ms(100);

LCD_RST_SET;

delay_ms(50);

}

//LCD Init For 1.44Inch LCD Panel with ST7735R.

void Lcd_Init(void)

{

LCD_GPIO_Init();

Lcd_Reset(); //Reset before LCD Init.

 

//LCD Init For 1.44Inch LCD Panel with ST7735R.

Lcd_WriteIndex(0x11);//Sleep exit 

delay_ms (120);

//ST7735R Frame Rate

Lcd_WriteIndex(0xB1); 

Lcd_WriteData(0x01); 

Lcd_WriteData(0x2C); 

Lcd_WriteData(0x2D); 

Lcd_WriteIndex(0xB2); 

Lcd_WriteData(0x01); 

Lcd_WriteData(0x2C); 

Lcd_WriteData(0x2D); 

Lcd_WriteIndex(0xB3); 

Lcd_WriteData(0x01); 

Lcd_WriteData(0x2C); 

Lcd_WriteData(0x2D); 

Lcd_WriteData(0x01); 

Lcd_WriteData(0x2C); 

Lcd_WriteData(0x2D); 

Lcd_WriteIndex(0xB4); //Column inversion 

Lcd_WriteData(0x07); 

//ST7735R Power Sequence

Lcd_WriteIndex(0xC0); 

Lcd_WriteData(0xA2); 

Lcd_WriteData(0x02); 

Lcd_WriteData(0x84); 

Lcd_WriteIndex(0xC1); 

Lcd_WriteData(0xC5); 

Lcd_WriteIndex(0xC2); 

Lcd_WriteData(0x0A); 

Lcd_WriteData(0x00); 

Lcd_WriteIndex(0xC3); 

Lcd_WriteData(0x8A); 

Lcd_WriteData(0x2A); 

Lcd_WriteIndex(0xC4); 

Lcd_WriteData(0x8A); 

Lcd_WriteData(0xEE); 

Lcd_WriteIndex(0xC5); //VCOM 

Lcd_WriteData(0x0E); 

Lcd_WriteIndex(0x36); //MX, MY, RGB mode 

Lcd_WriteData(0xC8); 

//ST7735R Gamma Sequence

Lcd_WriteIndex(0xe0); 

Lcd_WriteData(0x0f); 

Lcd_WriteData(0x1a); 

Lcd_WriteData(0x0f); 

Lcd_WriteData(0x18); 

Lcd_WriteData(0x2f); 

Lcd_WriteData(0x28); 

Lcd_WriteData(0x20); 

Lcd_WriteData(0x22); 

Lcd_WriteData(0x1f); 

Lcd_WriteData(0x1b); 

Lcd_WriteData(0x23); 

Lcd_WriteData(0x37); 

Lcd_WriteData(0x00);

Lcd_WriteData(0x07); 

Lcd_WriteData(0x02); 

Lcd_WriteData(0x10); 

Lcd_WriteIndex(0xe1); 

Lcd_WriteData(0x0f); 

Lcd_WriteData(0x1b); 

Lcd_WriteData(0x0f); 

Lcd_WriteData(0x17); 

Lcd_WriteData(0x33); 

Lcd_WriteData(0x2c); 

Lcd_WriteData(0x29); 

Lcd_WriteData(0x2e); 

Lcd_WriteData(0x30); 

Lcd_WriteData(0x30); 

Lcd_WriteData(0x39); 

Lcd_WriteData(0x3f); 

Lcd_WriteData(0x00); 

Lcd_WriteData(0x07); 

Lcd_WriteData(0x03); 

Lcd_WriteData(0x10);  

Lcd_WriteIndex(0x2a);

Lcd_WriteData(0x00);

Lcd_WriteData(0x00);

Lcd_WriteData(0x00);

Lcd_WriteData(0x7f);

Lcd_WriteIndex(0x2b);

Lcd_WriteData(0x00);

Lcd_WriteData(0x00);

Lcd_WriteData(0x00);

Lcd_WriteData(0x9f);

Lcd_WriteIndex(0xF0); //Enable test command  

Lcd_WriteData(0x01); 

Lcd_WriteIndex(0xF6); //Disable ram power save mode 

Lcd_WriteData(0x00); 

Lcd_WriteIndex(0x3A); //65k mode 

Lcd_WriteData(0x05); 

Lcd_WriteIndex(0x29);//Display on  

}

 

/*************************************************

函数名:LCD_Set_Region

功能:设置lcd显示区域,在此区域写点数据自动换行

入口参数:xy起点和终点

返回值:无

*************************************************/

void Lcd_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end)

{

Lcd_WriteIndex(0x2a);

Lcd_WriteData(0x00);

Lcd_WriteData(x_start+2);

Lcd_WriteData(0x00);

Lcd_WriteData(x_end+2);

Lcd_WriteIndex(0x2b);

Lcd_WriteData(0x00);

Lcd_WriteData(y_start+3);

Lcd_WriteData(0x00);

Lcd_WriteData(y_end+3);

Lcd_WriteIndex(0x2c);

}

 

/*************************************************

函数名:LCD_Set_XY

功能:设置lcd显示起始点

入口参数:xy坐标

返回值:无

*************************************************/

void Lcd_SetXY(u16 x,u16 y)

{

  Lcd_SetRegion(x,y,x,y);

}

 

/*************************************************

函数名:LCD_DrawPoint

功能:画一个点

入口参数:无

返回值:无

*************************************************/

void Gui_DrawPoint(u16 x,u16 y,u16 Data)

{

Lcd_SetRegion(x,y,x+1,y+1);

LCD_WriteData_16Bit(Data);

}    

 

/*****************************************

 函数功能:读TFT某一点的颜色                          

 出口参数:color  点颜色值                                 

******************************************/

unsigned int Lcd_ReadPoint(u16 x,u16 y)

{

  unsigned int Data;

  Lcd_SetXY(x,y);

  //Lcd_ReadData();//丢掉无用字节

  //Data=Lcd_ReadData();

  Lcd_WriteData(Data);

  return Data;

}

/*************************************************

函数名:Lcd_Clear

功能:全屏清屏函数

入口参数:填充颜色COLOR

返回值:无

*************************************************/

void Lcd_Clear(u16 Color)               

{

   unsigned int i,m;

   Lcd_SetRegion(0,0,X_MAX_PIXEL-1,Y_MAX_PIXEL-1);

   Lcd_WriteIndex(0x2C);

   for(i=0;i    for(m=0;m    {

  LCD_WriteData_16Bit(Color);

    }   

}


附上其头文件:


#include "type.h"

#define CPU_F ((double)1000000)

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

 

#define RED  0xf800

#define GREEN 0x07e0

#define BLUE 0x001f

#define WHITE 0xffff

#define BLACK 0x0000

#define YELLOW  0xFFE0

#define GRAY0   0xEF7D        //灰色0 3165 00110 001011 00101

#define GRAY1   0x8410      //灰色1      00000 000000 00000

#define GRAY2   0x4208      //灰色2  1111111111011111

 

 

#define LCD_SDA      P6DIR |= BIT0

#define LCD_RS       P6DIR |= BIT1

#define LCD_CS       P6DIR |= BIT2

#define LCD_RST      P6DIR |= BIT3

#define LCD_SCL      P6DIR |= BIT4

#define LCD_LED      P6DIR |= BIT5

 

//液晶控制口置1操作语句宏定义

#define LCD_CS_SET  P6OUT |= BIT2

#define LCD_RS_SET  P6OUT |= BIT1

#define LCD_SDA_SET  P6OUT |= BIT0

#define LCD_SCL_SET  P6OUT |= BIT4

#define LCD_RST_SET  P6OUT |= BIT3

#define LCD_LED_SET  P6OUT |= BIT5

 

//液晶控制口置0操作语句宏定义

#define LCD_CS_CLR  P6OUT &=~ BIT2

#define LCD_RS_CLR  P6OUT &=~ BIT1

#define LCD_SDA_CLR  P6OUT &=~ BIT0

#define LCD_SCL_CLR  P6OUT &=~ BIT4

#define LCD_RST_CLR  P6OUT &=~ BIT3

#define LCD_LED_CLR  P6OUT &=~ BIT5

 

void LCD_GPIO_Init(void);

void Lcd_WriteIndex(u8 Index);

void Lcd_WriteData(u8 Data);

void Lcd_WriteReg(u8 Index,u8 Data);

u16 Lcd_ReadReg(u8 LCD_Reg);

void Lcd_Reset(void);

void Lcd_Init(void);

void Lcd_Clear(u16 Color);

void Lcd_SetXY(u16 x,u16 y);

void Gui_DrawPoint(u16 x,u16 y,u16 Data);

unsigned int Lcd_ReadPoint(u16 x,u16 y);

void Lcd_SetRegion(u16 x_start,u16 y_start,u16 x_end,u16 y_end);

void LCD_WriteData_16Bit(u16 Data);

 


具体接线在上面头文件已经声明了,这个代码大家简单修改就可以直接上手了


代码确实会比较多,因此我就不再一一列举


这个代码也是在STM32基础上改造出来的,32的代码有时间再写一份,其实原理都是差不多的。


大家也可以根据自己实际情况再加以修改。


三、取模使用与总结

开门见山:

 


取好这些选项,就可以开始取模了,其他的哪里不明白欢迎随时评论,一起探讨交流!


觉得有用的话点个赞再走呗!


四、代码链接

链接:https://pan.baidu.com/s/1qhu37QGhI8jmy8sGuwZn_g 

提取码:2580

关键字:MSP430F5529  OLED显示 引用地址:MSP430F5529之1.44寸OLED显示

上一篇:MSP430F5529之超声波测距+OLED 显示
下一篇:使用MSP430F5529的ADC测量,并用OLED显示传感器输出的模拟量

推荐阅读最新更新时间:2024-11-12 11:50

定时器/计数器方式1的编程和应用
  定时器/计数器的方式0与方式1基本相同,只是计数器的计数位数不同。方式0为13位计数器,方式1为16位计数器。由于方式0是为兼容MCS-48而设,且其计数初值计算复杂,所以在实际应用中,一般不用方式0,而采用方式1。      例1:假设系统时钟频率采用6 MHz,要在P1.0引脚上输出一个周期为2 ms的方波,如右图所示。      基本思想:方波的周期用定时器T0来确定,即在T0中设置一个初值,在初值的基础上进行计数,每隔1 ms计数溢出1次,即T0每隔1 ms产生一次中断,CPU响应中断后,在中断服务子程序中对P1.0取反。这样,就可以在P1.引脚上输出一个周期为2 ms的方波,如右图所示。为此要做如下几步工作。   
[单片机]
搭载2160Hz超高频PWM调光,超值实力OPPO A1 Pro将于11月16日发布
搭载2160Hz超高频PWM调光,超值实力OPPO A1 Pro将于11月16日发布 OPPO刚刚公布了 A1 Pro 的更多产品细节,其将率先采用行业领先的 2160Hz 超高频PWM调光,并拥有 2.32mm 的极窄下边框。 A1 Pro搭载了十亿色OLED屏幕,支持120Hz高刷新率,并拥有56°黄金曲率。再加上超窄边框的设计,A1 Pro可以提供更为惊艳的观感和舒适的握持感。 OPPO A1 Pro 的这块超窄双曲屏还是一款专业护眼屏幕,目前已经通过国家眼科工程中心的专业护眼测试,可从硬件层面降低蓝光的影响,缓解视觉疲劳。 此外A1 Pro还搭载硬件1亿像素主摄镜头,影像能力全面提升。更多产
[手机便携]
搭载2160Hz超高频PWM调光,超值实力OPPO A<font color='red'>1</font> Pro将于11月16日发布
STM32学习笔记1——建立一个工程
这个寒假有幸在学长的帮助下接触到arm,作为单片机还没学明白的我,51基础也就是几节郭天祥老师的视频,现在学习arm也是一头雾水。不过也学了这么多天了,需要整理下思路来看看自己学了什么了。好了,废话不多说,开始我的arm的学习之路。 准备条件 1.一块开发板。(笔者认为这是非常重要的,方便你能随时对你的代码进行下载调试。笔者手上的是一块最新的ARM CORTEX M0内核的STM32F091RC开发板)。 2.一个顺手的IDE。(对于软件,我的观点一向是最新的就是最好用的,所以我用的是KEIL的5.13版本,在此附上 ](%28https://www.keil.com/demo/eval/arm.htm#DOWNLOAD%29
[单片机]
STM32学习笔记<font color='red'>1</font>——建立一个工程
MSP430F5529学习笔记(二)——按键|IO输入
学习了简单的IO口输出点灯实验,IO既有输出也有输入,在MSP430中输出由PxOUT寄存器进行操作,相对应的就有输入寄存器PxIN来进行输入的操作。 为体现按键效果我采用了按键控制LED灯的使用场景,这个也是单片机中按键的基础操作,通过对输入信号的检测来改变输出信号。首先我们是对LED的简单配置 WDTCTL = WDTPW +WDTHOLD;// stop watchdog timer P1DIR |=BIT0;//板载LED设置为输出 P1OUT|=BIT0; 以上操作即为关闭看门狗,设置对应IO口输出状态并给予IO口初始状态,如有疑问可参照我上一篇笔记。 按键外设的IO口配置 按键作为常用外设之一,
[单片机]
Synaptics ClearView OLED显示驱动器支持华硕ROG手机
2018 年6月7日,美国,圣何塞 —— 全球领先的人机界面解决方案开发商Synaptics(NASDAQ:SYNA)今日宣布其ClearView™ R66455 OLED显示驱动器IC(DDIC)被新款 华硕ROG手机 采用。ROG专为超高性能游戏设计,搭载了Synaptics R66455 DDIC,其配备的6英寸18:9 AMOLED显示屏具备惊人的90Hz刷新率和1ms像素反应时间。Synaptics高度准确的色彩增强功能助力ROG手机具备业界领先的108.6% DCI-P3 色域和10000:1对比度。 Synaptics高级副总裁兼移动部门总经理Kevin Barber表示 :“Synaptics凭借业界领先的OL
[手机便携]
欧姆龙CP1L-EL转OPC UA协议欧姆龙PLC转OPC UA协议
上篇文章我们讲了欧姆龙转OPC UA协议,在非标工业自动系统中,往往需要将PLC数据采集到PC端上位软件,MES,SCADA,直接采集PLC需要做大量的软件开发和调试工作量,甚至需要购买软件驱动然后在做开发,如果使用标准OPC UA客户端组建加上OPC UA网关采用OPC UA统一标准将大大降低开发难度和实现效率,深圳市钡铼技术有限公司推出的BL102网关很好的解决了这个问题,今天以欧姆龙PLC转OPC UA为例进行说明。 添加LAN口设备CP1L-E (1)点击“LAN”,点击鼠标右键,点击“添加”,弹出设备配置框。(2)设备名称:命名设备,如:因采集欧姆龙CP1L-EL为例,可以填写CP1L-EL。(3)填写采集设备的
[嵌入式]
欧姆龙CP<font color='red'>1</font>L-EL转OPC UA协议欧姆龙PLC转OPC UA协议
STM32L1XX使用HAL_UART_Transmit_DMA发送串口数据
使用STM32CubeMX生成初始化代码。 问题: HAL_UART_Transmit_DMA函数只能调用一次,第二次就返回状态HAL_UART_STATE_BUSY 0x02。 原因: stm32l1xx_hal_uart.c开头有描述 (##) DMA Configuration if you need to use DMA process (HAL_UART_Transmit_DMA() and HAL_UART_Receive_DMA() APIs): (+++) Declare a DMA handle structure for the Tx/Rx channel. (+
[单片机]
STM32L<font color='red'>1</font>XX使用HAL_UART_Transmit_DMA发送串口数据
中洋品牌陷巨屏手机之争:1年来销量增20倍
    华为Mate,6.1英寸巨屏   新浪科技 康钊   从5寸屏、到5.7屏、到6.1寸屏,手机市场似乎在上演巨屏手机的争霸战,并且,华为、酷派、中兴、联想等越来越多的国产手机也加入到巨屏手机战团,令中洋品牌手机大战开辟了一个新领域。   “中华酷联”齐推巨屏手机   在每个重要的展会上,一款款令业界吃惊的巨屏手机亮相。今年1月的CES 2013大会上,联想K900亮相,这款5.5英寸大屏机是国产手机最早的5.5英寸以上大屏机之一。   与这款大屏机同时在CES 2013大会亮相的是中兴通讯的最新的四核旗舰Grand Memo,采用5.7英寸720p显示屏。   另一款则是在CES 2013大会也亮相的酷派9070,拥有一
[手机便携]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved