STM32f4---OLCD显示实验代码(04)

发布者:Changsheng520最新更新时间:2018-09-29 来源: eefocus关键字:STM32f4  OLCD  显示实验 手机看文章 扫描二维码
随时随地手机看文章

在知道了取模方式之后,我们就可以根据取模的方式来编写显示字符的代码了,这里我们针对以上取模方式的显示字符代码如下:  

//在指定位置显示一个字符,包括部分字符

//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

     {    

    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线串行模式  (模块的BS1BS2 均接GND

//1: 并行8080 模式 (模块的BS1BS2均接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的设置(目前代码仅支持 80804线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值。然后我们编译此工程,直到编译成功为止。


关键字:STM32f4  OLCD  显示实验 引用地址:STM32f4---OLCD显示实验代码(04)

上一篇:STM32f4---TFTLCD显示实验代码(01)
下一篇:STM32f4---OLCD显示实验代码(03)

推荐阅读最新更新时间:2024-03-16 16:14

2440裸机程序——LCD图片显示实验
我使用的软件平台是MDK,工程当中需要添加 S3C2440A.s ;2440lib.c;main.c;lcd.c;sunflower_240x320.c 这五个程序。 其中sunflower_240x320.c 是一幅BMP格式向日葵图片的 *.c文件,在此不再列出,若没有这个文件,可以用转换工具如 bmp2h.exe 把bmp格式的图片转换成64K色的数组数据(*.c文件); 下面分别列出 main.c;lcd.c 这两个程序。 主程序: /*****************************************************************************************
[单片机]
STM32F4_SYSTICK定时器
关于SYSTICK定时器的说明,在STM32F4的参考手册中并没有提到,因为这个定时器是属于Cortex内核的内容。在《Cortex M3权威指南》中,可以在第八章,也即“NVIC与中断控制”那一章节的最后才可看到其详细说明,摘取如下。 //-----------------------------------------------------------------------------------------------------------// SysTick定时器被捆绑在NVIC中,用
[单片机]
<font color='red'>STM32F4</font>_SYSTICK定时器
STM32F407 周期唤醒功能
1.下图是STM32F407的中文参考手册中,RTC介绍部分。因为我想实现单片机每秒自动唤醒自己一次,开始打算用闹钟中断,但是每次唤醒以后都要自己设置下次唤醒的时间,简单的方法是秒+1,但是要考虑是不是59秒的情况,比较麻烦。所以就选择唤醒中断的方式。 2.时钟图分析: (1)通过寄存器RTC_CR WUCKSESEL 设置唤醒时钟,为了方式我选择的是10X(1HZ)。 标准库代码:RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits); (2)通过RTC_WUTR寄存器设置周期唤醒的时间 标准库代码:RTC_SetWakeUpCounter(X-1);/
[单片机]
<font color='red'>STM32F4</font>07 周期唤醒功能
基于Cortex-M4的STM32F4的复位序列
初次接触到 STM32 F7,可能会有个疑惑,为什么0地址变成了ITCM RAM 的起始地址。系统复位还是从地址0处开始执行吗?如果是,那这似乎看起来是冲突的。实际上,STM32F7是基于Cortex-M7内核,而Cortex-M7和Cortex-M3/M4的复位序列有些不一样。本文中,将针对这个问题做详细讲解。 STM32F4的复位序列 STM32F4基于Cortex-M4。对于基于Cortex-M3/M4的 芯片 ,复位后总是从0x00000000地址处,取主堆栈指针(MSP)的值,从0x00000004处,取出PC的初始值(这个值是复位向量),然后从这个值对应的地址处取指。 这两个值,就是中断向量表里的第一个和第二个
[单片机]
基于Cortex-M4的<font color='red'>STM32F4</font>的复位序列
STM32F4的库函数RCC_PLLConfig()代替SystemInit()手动初始化
STM32上电复位后首先执行Reset_Handler,然后调用SystemInit()函数完成时钟等基本初始化,再执行main函数。 ; Reset handler Reset_Handler PROC EXPORT Reset_Handler IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP SystemInit()函数在文件system_stm32f4xx
[单片机]
stm32f4的GPIO和位带区
1、stm32f4的GPIO,有GPIOA~GPIOI,每组GPIO,有16个IO引脚。GPIO地址如下: GPIOA 0x4002 0000 - 0x4002 03FF GPIOB 0x4002 0400 - 0x4002 07FF GPIOC 0x4002 0800 - 0x4002 0BFF GPIOD 0x4002 0C00 - 0x4002 0FFF GPIOE 0x4002 1000 - 0x4002 13FF GPIOF 0x4002 1400 - 0x4002 17FF GPIOG 0x4002 1800 - 0x4002 1BFF GPIOH 0x4002 1C00 - 0x4002 1FFF
[单片机]
对一款国产3D霍尔传感器的SPI封装
对一款国产的3D霍尔传感器的SPI封装.上 这篇文章完成我们的封装,以及在STM32F4的板子上面测试。 一次费我这么多引脚,我吐了。看来得上IIC,然后就是板子的引脚选择注意在cubuMX里面和实际的板子丝印多次比对,一个中断脚改了两次,气死我了。 BUTT_OUT 管脚用于检测磁铁与芯片之间的按键功能,并且也可以配置为 Trigger 模式,触发单次测量。 INT:主机向芯片发送持续感应模式或单次测量命令,芯片完成一次对应测量项的测量后,INT 脚会置 1,并且在芯片发送读取命令,读回测量数据以前,都保持为 1。主机向芯片发送唤醒睡眠模式命令后,当芯片周围测量项的变化量超出寄存器中设定的变化阈值时,INT 脚会置 1,并且在芯
[单片机]
对一款国产3D霍尔传感器的SPI封装
STM32F4入门前的热身之一:认识stm32F4 Cortex-M4
1 简介 STM32F4系列基于ARM Cortex -M4内核,采用了90纳米的NVM工艺和ART(自适应实时存储器加速器,Adaptive Real-Time Memory Accelerator )。 ART技术使得程序零等待执行,提升了程序执行的效率,将Cortext-M4的性能发挥到了极致。 STM32 F4系列可达到 210DMIPS@168MHz 。 集成了单周器DSP指令和FPU(floating point unit,浮点单元),提升了计算能力,可以进行一些复杂的计算和控制。 STM32 F4系列引脚和软件兼容于当前的STM32 F2系列产品。 技术特征  超快速数据传送  采用多达7重AHB总线矩阵
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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