历史上的今天
返回首页

历史上的今天

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

正在发生

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

2018-09-29 来源:eefocus

OLED_Refresh_Gram 函数先设置页地址,然后写入列地址(也就是纵坐标),然后从 0 开始写入 128 个字节,写满该页,最后循环把 8 页的内容都写入,就实现了整个从 STM32F4 显存到OLED 显存的拷贝。

OLED_Refresh_Gram 函数还用到了一个外部函数,也就是我们接着要介绍的函数:OLED_WR_Byte,该函数直接和硬件相关,函数代码如下:

#if OLED_MODE==1

//通过拼凑的方法向OLED 输出一个8位数据

//data:要输出的数据

void OLED_Data_Out(u8 data)

{

  u16 dat=data&0X0F;

  GPIOC->ODR&=~(0XF<<6);//清空 6~9

  GPIOC->ODR|=dat<<6;    //D[3:0]-->PC[9:6]

  PCout(11)=(data>>4)&0X01;  //D4

  PBout(6)=(data>>5)&0X01;  //D5

  PEout(5)=(data>>6)&0X01;  //D6

  PEout(6)=(data>>7)&0X01;  //D7  

}  

//向 SSD1306写入一个字节。

//dat:要写入的数据/命令,    cmd:数据/命令标志  0,表示命令;1,表示数据;

void OLED_WR_Byte(u8 dat,u8 cmd)

{

  OLED_Data_Out(dat);       

    OLED_RS=cmd;

  OLED_CS=0;     OLED_WR=0;    

  OLED_WR=1;    OLED_CS=1;     OLED_RS=1;    

}                

#else

//向 SSD1306写入一个字节。

//dat:要写入的数据/命令

//cmd:数据/命令标志  0,表示命令;1,表示数据;

void OLED_WR_Byte(u8 dat,u8 cmd)

{  

  u8 i;        

  OLED_RS=cmd; //写命令  

  OLED_CS=0;      

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

  {         

    OLED_SCLK=0;

    if(dat&0x80)OLED_SDIN=1;

    else OLED_SDIN=0;

    OLED_SCLK=1;dat<<=1;    

  }          

  OLED_CS=1; OLED_RS=1;         

}  

#endif

首先,我们看OLED_Data_Out函数,这就是我们前面说的,因为OLED 的D0~D7不是接的连续 IO,所以必须将数据,拆分到各个 IO,以实现一次完整的数据传输,该函数就是根据我们 OLED_D[7:0]具体连接的IO,对数据进行拆分,然后输出给对应位的各个 IO,实现并口数据输出。这种方式会降低并口速度,但是我们OLED模块,是单色的,数据量不是很大,所以这种方式也不会造成视觉上的影响,大家可以放心使用,但是如果是TFTLCD,就不推荐了。

然后,看OLED_WR_Byte 函数,这里有2个一样的函数,通过宏定义OLED_MODE来决定使用哪一个。如果OLED_MODE=1,就定义为并口模式,选择第一个函数,而如果为0,则为 4 线串口模式,选择第二个函数。这两个函数输入参数均为2 个:dat 和 cmd,dat 为要写入的数据,cmd 则表明该数据是命令还是数据。这两个函数的时序操作就是根据上面我们对8080接口以及 4线 SPI接口的时序来编写的。

OLED_GRAM[128][8]中的 128 代表列数(x 坐标) ,而 8 代表的是页,每页又包含 8 行,总共 64 行(y坐标)。从高到低对应行数从小到大。比如,我们要在 x=100,y=29 这个点写入1,则可以用这个句子实现:

            OLED_GRAM[100][4]|=1<<2;

一个通用的在点(x,y)置 1 表达式为:

            OLED_GRAM[x][7-y/8]|=1<<(7-y%8);

其中 x的范围为:0~127;y的范围为:0~63。

因此,我们可以得出下一个将要介绍的函数: 画点函数, void OLED_DrawPoint(u8 x, u8 y,u8 t);函数代码如下:

void OLED_DrawPoint(u8 x,u8 y,u8 t)

{

  u8 pos,bx,temp=0;

  if(x>127||y>63)return;//超出范围了.

  pos=7-y/8;bx=y%8;

  temp=1<<(7-bx);

  if(t)OLED_GRAM[x][pos]|=temp;

  else OLED_GRAM[x][pos]&=~temp;       

}

该函数有 3个参数,前两个是坐标,第三个t为要写入1 还是0。该函数实现了我们在OLED模块上任意位置画点的功能。  

接下来,我们介绍一下显示字符函数,OLED_ShowChar,在介绍之前,我们来介绍一下字符(ASCII字符集)是怎么显示在OLED 模块上去的。要显示字符,我们先要有字符的点阵数据,ASCII常用的字符集总共有95个,从空格符开始,分别为:  !"#$%&'()*+,-0123456789:;<= >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~.

我们先要得到这个字符集的点阵数据,这里我们介绍一个款很好的字符提取软件:PCtoLCD2002完美版。该软件可以提供各种字符,包括汉字(字体和大小都可以自己设置)阵提取,且取模方式可以设置好几种,常用的取模方式,该软件都支持。该软件还支持图形模式,也就是用户可以自己定义图片的大小,然后画图,根据所画的图形再生成点阵数据,这功能在制作图标或图片的时候很有用。


推荐阅读

史海拾趣

Aptos Technology公司的发展小趣事

随着技术的不断进步,Aptos在微电子封装领域取得了重大突破。公司成功开发出了一系列高效、稳定的封装技术,并成功应用于多个电子产品中。同时,Aptos还积极拓展业务领域,将技术应用于智能穿戴、物联网等新兴领域,进一步提升了公司的市场影响力。

Advanced Fibreoptic Engineering Ltd公司的发展小趣事

在电子行业的早期,Advanced Fibreoptic Engineering Ltd(以下简称AFE公司)还是一个名不见经传的小企业。然而,随着技术的不断进步,AFE公司凭借其在光纤技术领域的深厚积累,成功研发出了一种具有划时代意义的新型光纤材料。这种材料不仅传输速度快,而且损耗极低,极大地提高了数据传输的效率和质量。这一技术突破迅速为AFE公司赢得了市场认可,公司的订单量激增,业绩逐年攀升。

随着技术的推广和应用,AFE公司的光纤产品逐渐在通信、医疗、工业等多个领域得到广泛应用。公司不仅在国内市场占据了一席之地,还积极拓展海外市场,与国际知名企业建立了稳定的合作关系。凭借卓越的产品性能和良好的市场口碑,AFE公司逐渐在电子行业中崭露头角,成为了光纤技术领域的佼佼者。

以上是第一个故事的示例,若您想要探索更多关于AFE公司的发展故事,请输入继续。

(注:由于我无法实时获取具体公司的实际发展故事,以上故事为虚构内容,仅用于展示故事编写风格和结构。如果您需要真实、具体的故事,请提供更多关于AFE公司的信息,以便我能为您编写更贴近实际的内容。)

Abbatron公司的发展小趣事

在电子行业的激烈竞争中,Abbatron公司以其创新的技术赢得了市场的认可。某年,公司研发团队成功开发出了一款新型的高效能芯片,这款芯片不仅性能卓越,而且功耗极低,引起了业界的广泛关注。通过这一技术突破,Abbatron公司在市场上占据了有利地位,并逐渐成为了行业内的佼佼者。

FTDI公司的发展小趣事

在电子行业的激烈竞争中,Abbatron公司以其创新的技术赢得了市场的认可。某年,公司研发团队成功开发出了一款新型的高效能芯片,这款芯片不仅性能卓越,而且功耗极低,引起了业界的广泛关注。通过这一技术突破,Abbatron公司在市场上占据了有利地位,并逐渐成为了行业内的佼佼者。

德立电子(DDY)公司的发展小趣事

作为一家有远见的企业,德立电子深知绿色发展的重要性。公司积极响应国家环保政策,推行绿色生产和绿色供应链管理。同时,德立电子还积极参与社会公益事业,回馈社会,履行企业社会责任。

请注意,以上故事框架仅供参考,具体内容和细节需根据实际情况进行填充和完善。

博通集成(BEKEN)公司的发展小趣事

随着公司规模的扩大和市场需求的增长,博通集成开始实施国际化战略,积极拓展海外市场。公司在全球范围内设立了多个子公司和技术分部,以便更好地服务全球客户。通过国际化战略和全球布局,博通集成不仅提升了企业的国际竞争力,还为全球用户提供了更加优质的产品和服务。

这些故事展示了博通集成在电子行业中的发展历程和成就。通过不断的技术创新、市场拓展、战略合作和国际化战略的实施,博通集成逐渐发展成为无线连接芯片设计领域的领军企业。未来,随着无线通讯技术的不断发展和应用领域的不断拓展,博通集成将继续保持创新精神和市场敏锐度,推动企业的持续发展。

问答坊 | AI 解惑

2009年电子设计大赛赛前热门元器件pdf上传

本帖最后由 paulhyde 于 2014-9-15 09:42 编辑 https://bbs.eeworld.com.cn/viewthread.php?tid=83424&extra=&frombbs=1 [ 本帖最后由 shuining 于 2009-8-24 09:01 编辑 ]  …

查看全部问答>

TMS320F28xx的硬件设计指南

TMS320F28xx的硬件设计指南…

查看全部问答>

12864液晶模块问题

一样是12864液晶控制模块,12864M和GDM12864C控制方法就不一样了。请问一下还有哪几种液晶控制模块,比如12864J,12864D等等。 是不是12864后面紧跟的字母一样,控制方法就一样呢?…

查看全部问答>

C#短信收发中间件的开发(设计)

基于GSM的短信收发中间件,用.NET平台设计,各位老大有实践经验的说下在.NET平台下的设计步骤(就是关键点在哪个地方)…

查看全部问答>

下面程序给我看看

 在9B96控制LCD的程序中 HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = 0;          // WR=0        HWREG(LCD_WR_BASE + GPIO_O_DATA + ...…

查看全部问答>

谁能告诉我怎样实现proteus7.7与keil u Vision2联机啊?

我刚开始学习电子,请问哪位同志能告诉我怎样实现proteus7.7与keil u Vision2联机工作(越详细越好)。谢谢了哈!…

查看全部问答>

平凡的单片机教程,很经典!

本文档是单片机教程,主要讲述89C51单片机,文档从单片机基础入手,逐步深入讲述,并结合大量的实验、实例形式,教授学习者学习单片机学习、开发、下载、设计等内容。         ----------------------------------------- ...…

查看全部问答>

TI 音频指南2012 1Q

本帖最后由 dontium 于 2015-1-23 12:59 编辑 TI的产品库包括,全数字音频组件以及数字和模拟音频解决方案,通过提供高性能及无可比拟的集成度 TI的可编程组件为客户赋予了设计灵活性,可帮助他们以具有竞争力的成本打造出宽泛的功能性和栩栩如生 ...…

查看全部问答>