找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2447|回复: 3
收起左侧

各位大神,求告知这个oled的程序怎么改为竖屏显示呀

[复制链接]
ID:803579 发表于 2020-9-16 00:09 | 显示全部楼层 |阅读模式
#include "LM13232A.h"
#include "LMFONT.h"
       
#define        _CS1                PCout(0)
#define        _RST                 PCout(1)
#define        RS                         PCout(11)
#define        SCLK                PCout(10)
#define        SID                 PCout(9)

extern unsigned char LIG1[2];
extern unsigned char LIG2[2];
uchar   ContrastLevel;     // 对比度设置级别

void lm13232_GPIO_ITN(void)
{
GPIO_InitTypeDef  GPIO_InitStructure;       
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);       
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;               
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;               
GPIO_Init(GPIOC, &GPIO_InitStructure);                                                 
}

//-------写命令------------------------
void SdCmd(uchar Command)
{
   uchar j;
   SCLK = 1;  
    RS = 0;       //0写命令            
    _CS1 = 0;                  
   for(j=0;j<8;j++)
     {
      if(Command&0x80) SID=1;            
      else         SID=0;                 
      SCLK=0;                          
      SCLK=1;                 
                Command=Command<<1;
      }
   _CS1=1;                    
}
//-----写数据--------------------------
void SdData(uchar DData)
{
   uchar j;
   SCLK = 1;        
   RS  = 1; //1写数据                  
   _CS1 = 0;                  
   for(j=0;j<8;j++)
     {                        

          if(DData&0x80) SID=1;
      else         SID=0;       
      SCLK=0;                  
      SCLK=1;                  
          DData=DData<<1;
      }
   _CS1=1;                     
}


//-----------------------------------
// 写一个字节
//-----------------------------------
void WriteScreen(uchar *DisplayData)        // 显示为: 132x32/8 byte
{
        uchar TempData;
        uchar i, j;
        for(i=0;i<4;i++)
                {
                        SdCmd(0xb0 | i);        // select page
                        SdCmd(0x10);            // start form column 0开始
                        SdCmd(0x00);            // (2byte command)
                        for(j=0;j<132;j++)
                                {
                                        TempData=(*(DisplayData+(i*132)+j));
                                        SdData(TempData);
                                }
                }
}

/*显示位置*/
void LM_Pos(uchar x,uchar y)
{
        SdCmd(0xb0+y);
        SdCmd(((x&0xf0)>>4)|0x10);
        SdCmd((x&0x0f)|0x01);
}

/*清屏函数*/
void LM_Cler(void)
{
        uchar i,n;
        for(i=0;i<8;i++)
                {
                        SdCmd(0xb0+i);
                        SdCmd(0x00);
                        SdCmd(0x10);
                        for(n=0;n<132;n++)SdData(0x00);
                }
}

//在指定位置显示一个字符,包括部分字符
//x:0~127
//y:0~63
//mode:0,反白显示;1,正常显示                                 
//size:选择字体 16/12
void LM_ShowChar(uchar x,uchar y,uchar chr)
{
        uchar c=0,i=0;
        c=chr-' ';//得到偏移后的值       
        if(x>Max_Column-1){x=0;y=y+2;}
        if(SIZE ==16)
                {
                        LM_Pos(x,y);
                        for(i=0;i<8;i++)
                        SdData(F8X16[c*16+i]);
                        LM_Pos(x,y+1);
                        for(i=0;i<8;i++)
                        SdData(F8X16[c*16+i+8]);
                }
                else
                        {       
                                LM_Pos(x,y+1);
                                for(i=0;i<6;i++)
                                SdData(F6x8[c][i]);
                        }
}

//m^n函数
int LM_pow(uchar m,uchar n)
{
        int result=1;         
        while(n--)result*=m;   
        return result;
}               

//显示2个数字
//x,y :起点坐标         
//len :数字的位数
//size:字体大小
//mode:模式        0,填充模式;1,叠加模式
//num:数值(0~4294967295);                           
void LM_ShowNum(uchar x,uchar y,int num,uchar len,uchar size)
{                
        uchar t,temp;
        uchar enshow=0;                                                  
        for(t=0;t<len;t++)
        {
                temp=(num/LM_pow(10,len-t-1))%10;
                if(enshow==0&&t<(len-1))
                {
                        if(temp==0)
                        {
                                LM_ShowChar(x+(size/2)*t,y,' ');
                                continue;
                        }else enshow=1;
                          
                }
                 LM_ShowChar(x+(size/2)*t,y,temp+'0');
        }
}

//显示一个字符号串
void LM_ShowString(uchar x,uchar y,uchar *chr)
{
        unsigned char j=0;
        while (chr[j]!='\0')
        {                LM_ShowChar(x,y,chr[j]);
                        x+=8;
                if(x>120){x=0;y+=2;}
                        j++;
        }
}

//显示汉字
void LM_ShowCHinese(uchar x,uchar y,uchar no)
{                                  
        u8 t,adder=0;
        LM_Pos(x,y);       
    for(t=0;t<16;t++)
                {
                        SdData(Hzk[2*no][t]);
                        adder+=1;
                }       
        LM_Pos(x,y+1);       
    for(t=0;t<16;t++)
                        {       
                                SdData(Hzk[2*no+1][t]);
                                adder+=1;
      }                                       
}


/***********功能描述:显示显示BMP图片128×64起始点坐标(x,y),x的范围0~127,y为页的范围0~7*****************/
void LM_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<y1;y++)
        {
                LM_Pos(x0,y);
    for(x=x0;x<x1;x++)
            {      
                    SdData(BMP[j++]);                   
            }
        }
}

//-----------------------------------
// 对比度调节
//-----------------------------------
void LCD_Darker(void)
{
        if (ContrastLevel<0x3F)
            {
        ContrastLevel++;
                }
    SdCmd(0x81);                     // E-Vol setting
        SdCmd(ContrastLevel);   // (2byte command)
}


void LCD_Lighter(void)
{
        if (ContrastLevel>0x00)
            {
             ContrastLevel--;
                }
    SdCmd(0x81);            // E-Vol setting
        SdCmd(ContrastLevel);   // (2byte command)
}

//-----------------------------------
// 初始化lcd
//-----------------------------------
void initLCDM(void)
{
        lm13232_GPIO_ITN();
          _CS1    = 1;
    _RST    = 1;
    RS      = 1;
    SCLK    = 1;
    SID     = 1;
//        _RST=1;                 // 复位lcd
        _RST=0;
        delay_ms(1);
        _RST=1;
        delay_ms(100);
    ContrastLevel=0x0f;     // 默认对比度
        SdCmd(0xaf);            // 开
        SdCmd(0x40);            // 显示起点0
    SdCmd(0xa0);            // ADC=0
    SdCmd(0xa6);            // 正常显示
    SdCmd(0xa4);            // 全部开
    SdCmd(0xa2);            // 偏差 = 1/6 (duty=1/33)
    SdCmd(0xc8);            // 公共输出模式为反向


    SdCmd(0x2f);            // 全部开

           SdCmd(0x23);                        // RA/RB setting

           SdCmd(0xf8);SdCmd(0x00);// Booster Ratio Set= 2x,3x,4x (2byte command)

        SdCmd(0x81);            // E-Vol setting
    SdCmd(ContrastLevel);   // (2byte command)
}


回复

使用道具 举报

ID:339654 发表于 2020-9-16 08:54 | 显示全部楼层
你只能取模的时候旋转字模方向
回复

使用道具 举报

ID:654028 发表于 2020-9-16 09:02 | 显示全部楼层
你取模取竖屏的试试
回复

使用道具 举报

ID:790159 发表于 2020-9-16 10:12 | 显示全部楼层
OLED点阵没有多少,你可以做一个显存,然后全局刷新
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表