打印
[STM32]

立创商城STM32F系列——STM32f4 OLCD显示实验代码(04)

[复制链接]
935|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小乐Tzz|  楼主 | 2018-9-7 11:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32f4————OLCD显示实验代码(04)
/*******************************************************/
在知道了取模方式之后,我们就可以根据取模的方式来编写显示字符的代码了,这里我们针对以上取模方式的显示字符代码如下:   
//在指定位置显示一个字符,包括部分字符
//x:0~127 y:0~63
//mode:0,反白显示;1,正常显示           
//size:选择字体  12/16/24   
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{                  
  u8 temp,t,t1,y0=y;
  u8 csize=(size/8+((size%8)?1:0))*(size/2);//得到字体一个字符对应点阵集所占的字节数
  chr=chr-' ';//得到偏移后的值      
     for(t=0;t<csize;t++)
     {     
    if(size==12)temp=asc2_1206[chr][t];        //调用 1206 字体
    else if(size==16)temp=asc2_1608[chr][t];  //调用 1608 字体
    else if(size==24)temp=asc2_2412[chr][t];  //调用 2412 字体
    else return;              //没有的字库
         for(t1=0;t1<8;t1++)
    {
      if(temp&0x80)OLED_DrawPoint(x,y,mode);
      else OLED_DrawPoint(x,y,!mode);
      temp<<=1;y++;
      if((y-y0)==size)
      {
        y=y0; x++;break;
      }
    }        
       }
}
该函数为字符以及字符串显示的核心部分,函数中 chr=chr-' ';这句是要得到在字符点阵数据里面的实际地址,因为我们的取模是从空格键开始的,例如oled_asc2_1206[0][0],代表的是空格符开始的点阵码。在接下来的代码,我们也是按照从上到小(先 y++),从左到右(再 x++)的取模方式来编写的,先得到最高位,然后判断是写 1 还是 0,画点;接着读第二位,如此循环,直到一个字符的点阵全部取完为止。这其中涉及到列地址和行地址的自增,根据取模方式来理解,就不难了。
oled.c的内容就为大家介绍到这里,接下来我们看看oled.h 代码:
#ifndef __OLED_H
#define __OLED_H              
#include "sys.h"
#include "stdlib.h"        
//OLED 模式设置
//0: 4线串行模式  (模块的BS1,BS2 均接GND)
//1: 并行8080 模式 (模块的BS1,BS2均接VCC)
#define OLED_MODE   1                           
//-----------------OLED 端口定义----------------                  
#define OLED_CS    PBout(7)
#define OLED_RST     PGout(15)   
#define OLED_RS    PDout(6)
#define OLED_WR    PAout(4)        
#define OLED_RD    PDout(7)   
//使用4 线串行接口时使用   
#define OLED_SCLK    PCout(6)
#define OLED_SDIN    PCout(7)           
#define OLED_CMD    0    //写命令
#define OLED_DATA    1    //写数据
//OLED 控制用函数
void OLED_WR_Byte(u8 dat,u8 cmd);        
……        //忽略部分函数声明
void OLED_ShowString(u8 x,u8 y,const u8 *p);     
#endif
该部分比较简单,OLED_MODE 的定义也在这个文件里面,我们必须根据自己 OLED 模块 BS1和 BS2的设置(目前代码仅支持 8080和4线SPI)来确定OLED_MODE的值。
最后我们来看看主函数代码:
int main(void)
{   
  u8 t=0;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  delay_init(168);  //初始化延时函数
  uart_init(115200);    //初始化串口波特率为 115200
  LED_Init();          //初始化 LED
    OLED_Init();        //初始化OLED
       OLED_ShowString(0,0,"ALIENTEK",24);   
  OLED_ShowString(0,24, "0.96' OLED TEST",16);   
    OLED_ShowString(0,40,"ATOM 2014/5/4",12);   
    OLED_ShowString(0,52,"ASCII:",12);   
    OLED_ShowString(64,52,"CODE:",12);   
  OLED_Refresh_Gram();//更新显示到OLED     
  t=' ';   
  while(1)   
  {     
    OLED_ShowChar(36,52,t,12,1);//显示 ASCII字符   
    OLED_ShowNum(94,52,t,3,12);  //显示 ASCII字符的码值      
    OLED_Refresh_Gram();//更新显示到OLED
    t++;
    if(t>'~')t=' ';   
    delay_ms(500); LED0=!LED0;
  }
}
该部分代码用于在OLED上显示一些字符,然后从空格键开始不停的循环显示 ASCII字符集,并显示该字符的ASCII值。然后我们编译此工程,直到编译成功为止。
/*******************************************************/


【立创商城】STM32F103CBT6 托盘  https://item.szlcsc.com/8796.html

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

70

帖子

0

粉丝