msp430f5529——OLED屏显示文字与图片

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

前言

为了让学习msp430不枯燥,今天我分享一个有趣的小实验给大家,把因枯燥而丢失的兴趣抓回来。


一、效果展示

msp430f5529—接oled屏显示图片与文字


二、步骤

1.OLED.C文件

代码如下(示例):OLED屏显示的一些函数


#include "oled.h"

#include "oledfont.h"

#include "type.h"

// the storage format is as follow

//[0]0 1 2 3 ... 127

//[1]0 1 2 3 ... 127

//[2]0 1 2 3 ... 127

//[3]0 1 2 3 ... 127

//[4]0 1 2 3 ... 127

//[5]0 1 2 3 ... 127

//[6]0 1 2 3 ... 127

//[7]0 1 2 3 ... 127

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

//IIC Start

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

void IIC_Start()

{


    OLED_SCLK_Set();

    OLED_SDIN_Set();

    OLED_SDIN_Clr();

    OLED_SCLK_Clr();

}


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

//IIC Stop

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

void IIC_Stop()

{

OLED_SCLK_Set() ;

//  OLED_SCLK_Clr();

    OLED_SDIN_Clr();

    OLED_SDIN_Set();


}


void IIC_Wait_Ack()

{

    OLED_SCLK_Set() ;

    OLED_SCLK_Clr();

}

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

// IIC Write byte

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

void Write_IIC_Byte(unsigned char IIC_Byte)

{

    unsigned char i;

    unsigned char m,da;

    da=IIC_Byte;

    OLED_SCLK_Clr();

    for(i=0;i<8;i++)

    {

            m=da;

        //  OLED_SCLK_Clr();

        m=m&0x80;

        if(m==0x80)

        {OLED_SDIN_Set();}

        else OLED_SDIN_Clr();

            da=da<<1;

        OLED_SCLK_Set();

        OLED_SCLK_Clr();

        }



}

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

// IIC Write Command

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

void Write_IIC_Command(unsigned char IIC_Command)

{

   IIC_Start();

   Write_IIC_Byte(0x78);            //Slave address,SA0=0

    IIC_Wait_Ack();

   Write_IIC_Byte(0x00);            //write command

    IIC_Wait_Ack();

   Write_IIC_Byte(IIC_Command);

    IIC_Wait_Ack();

   IIC_Stop();

}

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

// IIC Write Data

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

void Write_IIC_Data(unsigned char IIC_Data)

{

   IIC_Start();

   Write_IIC_Byte(0x78);            //D/C#=0; R/W#=0

    IIC_Wait_Ack();

   Write_IIC_Byte(0x40);            //write data

    IIC_Wait_Ack();

   Write_IIC_Byte(IIC_Data);

    IIC_Wait_Ack();

   IIC_Stop();

}

void OLED_WR_Byte(unsigned dat,unsigned cmd)

{

    if(cmd)

            {


   Write_IIC_Data(dat);


        }

    else {

   Write_IIC_Command(dat);


    }



}


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

// fill_Picture

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

void fill_picture(unsigned char fill_Data)

{

    unsigned char m,n;

    for(m=0;m<8;m++)

    {

        OLED_WR_Byte(0xb0+m,0);     //page0-page1

        OLED_WR_Byte(0x00,0);       //low column start address

        OLED_WR_Byte(0x10,0);       //high column start address

        for(n=0;n<128;n++)

            {

                OLED_WR_Byte(fill_Data,1);

            }

    }

}


void Delay_1ms(unsigned int Del_1ms)

{

    unsigned char j;

    while(Del_1ms--)

    {

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

    }

}



void OLED_Set_Pos(unsigned char x, unsigned char y)

{

    OLED_WR_Byte(0xb0+y,OLED_CMD);

    OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);

    OLED_WR_Byte((x&0x0f),OLED_CMD);

}


void OLED_Display_On(void)

{

    OLED_WR_Byte(0X8D,OLED_CMD);

    OLED_WR_Byte(0X14,OLED_CMD);  //DCDC ON

    OLED_WR_Byte(0XAF,OLED_CMD);  //DISPLAY ON

}


void OLED_Display_Off(void)

{

    OLED_WR_Byte(0X8D,OLED_CMD);

    OLED_WR_Byte(0X10,OLED_CMD);  //DCDC OFF

    OLED_WR_Byte(0XAE,OLED_CMD);  //DISPLAY OFF

}


void OLED_Clear(void)

{

    u8 i,n;

    for(i=0;i<8;i++)

    {

        OLED_WR_Byte (0xb0+i,OLED_CMD);

        OLED_WR_Byte (0x00,OLED_CMD);

        OLED_WR_Byte (0x10,OLED_CMD);

        for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);

    } 

}

void OLED_On(void)

{

    u8 i,n;

    for(i=0;i<8;i++)

    {

        OLED_WR_Byte (0xb0+i,OLED_CMD);

        OLED_WR_Byte (0x00,OLED_CMD);

        OLED_WR_Byte (0x10,OLED_CMD);

        for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA);

    }

}


//x:0~127

//y:0~63

//size:16/12

void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 Char_Size)

{

    unsigned char c=0,i=0;

    c=chr-' ';

    if(x>Max_Column-1){x=0;y=y+2;}

    if(Char_Size ==16)

        {

        OLED_Set_Pos(x,y);

        for(i=0;i<8;i++)

        OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);

        OLED_Set_Pos(x,y+1);

        for(i=0;i<8;i++)

        OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);

        }

        else {

            OLED_Set_Pos(x,y);

            for(i=0;i<6;i++)

            OLED_WR_Byte(F6x8[c][i],OLED_DATA);

        }

}


u32 oled_pow(u8 m,u8 n)

{

    u32 result=1;

    while(n--)result*=m;

    return result;

}


void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size2)

{

    u8 t,temp;

    u8 enshow=0;

    for(t=0;t    {

        temp=(num/oled_pow(10,len-t-1))%10;

        if(enshow==0&&t<(len-1))

        {

            if(temp==0)

            {

                OLED_ShowChar(x+(size2/2)*t,y,' ',size2);

                continue;

            }else enshow=1;


        }

        OLED_ShowChar(x+(size2/2)*t,y,temp+'0',size2);

    }

}

void OLED_ShowVI(u8 x,u8 y,u32 num,u8 size2)

{

    OLED_ShowNum(x+size2*4-1,y,num%10,1,size2);

    OLED_ShowNum(x+size2*3-1,y,num/10%10,1,size2);

    OLED_ShowNum(x+size2*2-1,y,num/100%10,1,size2);

    OLED_ShowString(x+size2*1-1,y,".",size2);

    OLED_ShowNum(x-1,y,num/1000,1,size2);

}


void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)

{

    unsigned char j=0;

    while (chr[j]!='')

    {       OLED_ShowChar(x,y,chr[j],Char_Size);

            x+=8;

        if(x>120){x=0;y+=2;}

            j++;

    }

}

void OLED_ShowCHinese(u8 x,u8 y,u8 no)

{

    u8 t,adder=0;

    OLED_Set_Pos(x,y);

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

        {

                OLED_WR_Byte(LHR[2*no][t],OLED_DATA);

                adder+=1;

     }

        OLED_Set_Pos(x,y+1);

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

            {

                OLED_WR_Byte(LHR[2*no+1][t],OLED_DATA);

                adder+=1;

      }

}

void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[])

{

 unsigned int j=0;

 unsigned char x,y;


  if(y1%8==0) y=y1/8;

  else y=y1/8+1;

    for(y=y0;y    {

        OLED_Set_Pos(x0,y);

    for(x=x0;x        {

            OLED_WR_Byte(BMP[j++],OLED_DATA);

        }

    }

}

void OLED_Init(void)

{

    P3DIR |= BIT5+BIT6;

    Delay_1ms(200);

    OLED_WR_Byte(0xAE,OLED_CMD);//--display off

    OLED_WR_Byte(0x00,OLED_CMD);//---set low column address

    OLED_WR_Byte(0x10,OLED_CMD);//---set high column address

    OLED_WR_Byte(0x40,OLED_CMD);//--set start line address

    OLED_WR_Byte(0xB0,OLED_CMD);//--set page address

    OLED_WR_Byte(0x81,OLED_CMD); // contract control

    OLED_WR_Byte(0xFF,OLED_CMD);//--128

    OLED_WR_Byte(0xA1,OLED_CMD);//set segment remap

    OLED_WR_Byte(0xA6,OLED_CMD);//--normal / reverse

    OLED_WR_Byte(0xA8,OLED_CMD);//--set multiplex ratio(1 to 64)

    OLED_WR_Byte(0x3F,OLED_CMD);//--1/32 duty

    OLED_WR_Byte(0xC8,OLED_CMD);//Com scan direction

    OLED_WR_Byte(0xD3,OLED_CMD);//-set display offset

    OLED_WR_Byte(0x00,OLED_CMD);//


    OLED_WR_Byte(0xD5,OLED_CMD);//set osc division

    OLED_WR_Byte(0x80,OLED_CMD);//


    OLED_WR_Byte(0xD8,OLED_CMD);//set area color mode off

    OLED_WR_Byte(0x05,OLED_CMD);//


    OLED_WR_Byte(0xD9,OLED_CMD);//Set Pre-Charge Period

[1] [2] [3] [4]
关键字:msp430f5529  OLED屏  显示 引用地址:msp430f5529——OLED屏显示文字与图片

上一篇:基于MSP430f5529 编码电机测速 接收脉冲数 PWM调速 CCS编译器 代码分析
下一篇:msp430f5529入门(1)自创按键控制LED灯实验

小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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