历史上的今天
返回首页

历史上的今天

今天是:2024年09月29日(星期日)

正在发生

2018年09月29日 | STM32f4---OLCD显示实验代码(04)

2018-09-29 来源:eefocus

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

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

//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值。然后我们编译此工程,直到编译成功为止。


推荐阅读

史海拾趣

Hisetec Electronic Co Ltd公司的发展小趣事

背景:在21世纪初,电子产品市场迅速增长,智能手机和平板电脑等移动设备成为新宠。Hisetec Electronic Co Ltd公司凭借其在微电子封装技术的深厚积累,成功研发出一种高密度、低功耗的封装解决方案,大幅提升了手机芯片的能效比。

发展:该技术迅速被市场认可,多家知名手机制造商如三星、苹果等纷纷采用,Hisetec公司因此订单激增,市场份额大幅提升。公司不仅扩大了生产规模,还进一步加大了研发投入,不断推出新的封装技术,巩固了其在电子封装领域的领先地位。

CONTTEK Group GmbH公司的发展小趣事

随着市场竞争的加剧,CONTTEK Group GmbH公司意识到只有不断创新才能在行业中立足。因此,公司加大了对研发的投入,积极引进新技术、新材料和新工艺,不断推动产品的升级换代。通过持续的技术创新,公司成功推出了一系列具有创新性和竞争力的新产品,进一步巩固了其在电子连接器领域的领先地位。

世纪金光(CENGOL)公司的发展小趣事

自成立以来,世纪金光始终注重科研实力的积累。公司积极承担国家科研任务,已转接和直接承担国家科研任务80多项。在这些科研项目中,世纪金光取得了丰硕的成果,其中12项成果处于国内同类技术领先水平,5项成果达到国际先进水平。这些成果的取得不仅提升了公司的技术水平,也为公司在半导体领域的竞争提供了有力支撑。

EREM公司的发展小趣事

作为一家具有社会责任感的企业,EREM始终关注环境保护和可持续发展。在生产过程中,EREM严格遵守环保法规和标准,采用环保材料和工艺,减少对环境的影响。此外,EREM还积极参与公益活动和社会责任项目,为社会做出积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

请注意,以上故事均为虚构,旨在展示EREM公司在电子行业中的发展历程和可能面临的挑战与机遇。如需了解更多关于EREM公司的信息,请查阅相关官方资料或咨询行业专家。

Gould Fiber Optics公司的发展小趣事
确保电源电路中的接地良好,避免接地不良引起的噪声和干扰。对于数字电路和模拟电路共存的电源系统,应采用模拟地和数字地分开接地的方式。
驰芯微(CHIPWISE)公司的发展小趣事

在发展过程中,驰芯微公司成功完成了多轮融资,为公司的发展提供了强有力的资金支持。这些资金主要用于车规级传感和控制类芯片的系列化业务以及新能源电池管理系统汽车电子系统一站式车规级芯片套片解决方案的研发和推广。未来,驰芯微将继续加大在技术研发和产品创新方面的投入力度,致力于成为国际领先的汽车电子芯片供应商。同时,公司还将积极拓展海外市场,提升品牌知名度和影响力。

以上五个故事框架分别围绕驰芯微公司的初创历程、技术突破、面对“芯片限制”的机遇与挑战、与明然科技的合作以及融资与未来规划等方面进行了描述。这些故事展示了驰芯微在电子行业中的发展历程和取得的成就,同时也揭示了公司未来的发展方向和目标。

问答坊 | AI 解惑

模拟厂商如何应对手机产品提出的挑战?

整个手机产业目前的状况似乎已经陷入一种以价格竞争的阶段,有点像电视机市场。手机好像已经不属于我们印象中的高科技产品,几百块钱的手机就已经具备很丰富的功能,如音乐、拍照、摄像、手写输入、超大的触摸屏,真令人不可思议。用Intersil公司中 ...…

查看全部问答>

汇编的基础问题

在51单片机中,汇编程序出现如下: Org 0000h; Ljmp main; Org 0100h; Main:------- 然而:有人写成这样: Org 0100h; Ljmp main; Main:------ 两者相同吗? 为什么? 为什么要从100h开始? 老师讲过最少从30h开始,原 ...…

查看全部问答>

??怎样屏蔽外部中断??

我用的是2450,要在某些时刻屏蔽外部中断0,5~13一共10个外部中断中的部分中断。 我想可能有两种方法吧(不知道是不是): 1.对中断寄存器操作;  2.调用API 对于第一种方法,我参考了一下三星的使用手册,知道关键是操作INTMASK寄存 ...…

查看全部问答>

怎样获得spy在shell中打印的某个数据呢?

各位高手,在shell中用spy可以查看各个任务以及总的cpu利用率,并用一个表列出结果,现在我只想取出空闲率这个数据,请问该怎样实现呢?…

查看全部问答>

在Linux中安装turbo c

我现在刚开始学嵌入式开发,要用到c语言开发,我想请问一下怎么样在Linux虚拟机中安装turbo c,我用的Linux是 RedHat 9.0版本…

查看全部问答>

LM3开发笔记_5.ADC采集

       由于项目需要监测一些模拟量所以要用到ADC,这两天试了试LM3S8962的ADC功能,有一些收获,不敢独享和拿出来和大家分享。          ADC用于将连续变化的模拟电压转换成 ...…

查看全部问答>

自己做的LM3S9B96的板子,HJTAG无法识别

有没有兄弟遇到过相同的问题啊,jtag电路是和开发板上的一样,加了27欧电阻,TMS加了上拉电阻,其他信号线没上拉,h-jtag可以识别开发板的内核ID,但是无法识别自己做的板子的。后来在其他信号线上也加了上拉,还是无法识别。外部16M晶振起振,引脚 ...…

查看全部问答>

能不能以CCSV4为例介绍一下如何计算代码执行时间?

能不能以CCSV4为例介绍一下如何计算一段代码的执行时间?CCSV4应该有自动计算某段代码执行时间的功能吧,但不知道怎么用,希望高手指点一下,最好给出截图,呵呵。…

查看全部问答>

声纳测距用什么芯片好

谁能告诉我声纳测距都可以用什么芯片?…

查看全部问答>

出正点原子stm32战舰开发板

正点原子STM32战舰开发板(99新) 就上了几次电,我本人后面转fpga,dsp方向,就放置了,一直没有时间学习,最近看板子一直在吃灰,就拿来出了。 开发板*1,3.5寸液晶*1,JLINKV8*1,ENC28J60以太网络模块*1, 2.4G无线模块NRF24L01*2=========== ...…

查看全部问答>