Description
嵌入式单片机开发遇到的各种屏幕原理整理分享-(2)软件-16*16点阵屏(74HC595级联)
栏目:公司新闻 发布时间:2024-07-16
 引言:  上一篇介绍了常见的屏幕种类原理硬件电路。这一篇我们来玩通点阵屏,我会在这里尽量详细的介绍它,并手把手的从创建一个工程到写通代码向您展示。  我手里用的点阵屏正是上一篇出现过的。它是由4个0788BS的8*8点阵屏组成,4个74HC595芯片级联驱动,除去电源输入(VCC,GND)外,仅需要3个单片机IO口就可驱动。我这块屏在tb的祁绪电子有售卖,我展示的的点阵屏是我自己做的,电路布局

  引言:

  上一篇介绍了常见的屏幕种类原理硬件电路。这一篇我们来玩通点阵屏,我会在这里尽量详细的介绍它,并手把手的从创建一个工程到写通代码向您展示。

  我手里用的点阵屏正是上一篇出现过的。它是由4个0788BS的8*8点阵屏组成,4个74HC595芯片级联驱动,除去电源输入(VCC,GND)外,仅需要3个单片机IO口就可驱动。我这块屏在tb的祁绪电子有售卖,我展示的的点阵屏是我自己做的,电路布局和芯片布局不同,原理相同。他们给出的仅有51单片机代码,在这里我会用STM32F103ZET6驱动它,工程代码由STM32CubeMX生成,在MDK_ARM(Keil5)上使用HAL库快速开发。

  74HC595的用处说明:

  先来看点亮一块屏的方法:

  首先我们要了解74HC595是一块什么样的芯片:

  。

  14脚:DS(SER)SI(),串行数据输入引脚

  13脚:OE,  输出使能控制脚,它是低电才使能输出,所以接GND

  12脚:RCK,存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存带存储寄存器。

  11脚:SCK,移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新             的bit(从DS输入)。

  10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接 高电平即可。

  9 脚 :串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是             从这里出去的。用于595的级联。

  QA~QH:8位并行输出引脚

  介绍引脚用处不大,感兴趣的朋友,网上有很多关于这块芯片的介绍。这里重点说9、11、12、QA~QH引脚。

  我们这里给74HC595串行输入一个8位二进制数 0000 0001 ,这8位二进制数在IO口就是高低电平的变换,也是用来控制点阵屏上每一个LED灯的状态电平数据。595芯片是串行输入,接收输入数据的引脚是14脚(DS),接收的数据由QA~QH输出。11脚SCK(SH)是控制移位寄存器的,上升沿(拉高)有效。它的工作流程可以联想为给弹匣压子弹。当单片机IO输出 0000 0001 时,先给595芯片输入数据0,SH上升沿(拉高),595内的(移位)寄存器放入这个数据,它占在QA的位置,SH拉低(不拉低怎么再进入上升沿呢),第二位数据0放入寄存器时,第一位数据由原来的QA位置转到QB,新进来的第二位数据占据QA的位置,当最后一位数据输入后,QA~QH对应为 1000 0000 ,在这个过程中QA~QH还未输出,因为数据在移位寄存器的QA~QH中。这里用QA~QH代表寄存器的空间内的位置,便于大家理解。

  这时候这8位二进制数(一个字节)都输入完成,我们就要并行输出,这里就要用到595芯片的第12脚ST(RCK)存储寄存器时钟输入引脚,上升沿有效,拉高,然后移位寄存器数据转移到存储寄存器,再从QA~QH引脚并行输出。

  在这里,595芯片只用一个数据引脚输入就可以输出8位控制。大大节约了单片机的IO资源。

  暂时回到点阵屏,4个0788B的点阵屏8*8-->16*16,理论控制一块点阵屏需要4片595芯片,并且需要占用单片机4个IO口输入数据,而我这块屏幕只有1个引脚输入数据,这是神魔原因呢?这里就要说到74H595的级联功能了。也就是我们要讲的595芯片第9脚的作用。

  把上一个595芯片的9脚链接到下一个595芯片的14脚DS,想前面我们只放了8位数据,移位寄存器已满,当我们放入新的数据时,原来在寄存器QH的数据就会移出至第9脚输出。相当于在给下一个芯片输入数据。

  先点亮一块屏:

  当知道74HC595的原理后,我们就可以写代码了。

  需要用到的单片机IO资源:ST、SH、DS 。电源接5V、GND。

  打开CubeMX:

  以选择MCU开始我的工程,所以点击中间深蓝色部分的第一个浅蓝色框:ACCESS TO MCU SELECTOR 。

  选择合适与你的芯片型号,这里我选择STM32F103ZE(T6) 。

  我的封装是LQFP144、双机选择并新建工程模板。

  SYS处Debug 选择 Serial Wire。

  RCC配置和时钟树配置,可根据选择自己变更配置。新手可以先这样选。

  72那里输入72回车就行。

  配置定时器,

  打开定时器中断。

  选择GPIO:

  根据个人实际配置项目工程文件等:

  最后点击 GENERATE CODE 生成工程文件,点击 Open Project 打开工程。

  生成后的工程先编译整个工程。编译成功后我们就开始写代码。

  主函数内宏定义:

  要显示的字符:

  几个定义:

  HC595驱动函数和定时器中断回调函数:

  int main (void)主函数内:

  编译,无错误,但这里会有警告,是因为HAL_GPIO_WritePin(ST_GPIO_Port,ST_Pin,0);这一句写法的问题。可把该类函数第三参数换成 GPIO_PIN_RESET 或 GPIO_PIN_SET 。

  开发板和屏幕连接好线,将代码下载到开发板,上电。emmmm效果就是这样:

  如果是多个屏幕连接在一起,使用该代码,每块屏幕上显示相同的内容:

  四块屏连接在一起并滚动显示内容:

  屏幕的PCB上是有丝印的,将上一块屏幕的 OUT 处与 下一块屏幕的 IN 处对等链接,祁绪电子家建议是用跳线帽,但连起来会发现会不平(跳线帽的原因),这里我个人经验使用2*5P的2.54母座,将母座引脚两两短接,插入后会平一些。

  CubeMX配置不变,生成新工程,或者用原来的工程代码稍加改动。我这里是在原来的代码基础上稍加改动,都很简单。

  宏定义不变,字模修改(有些注释掉的是上面点亮一个屏幕的,可以拿来参照对比):

  595驱动函数和中断回调函数,修改:

  int main (void)主函数内:

  编译,无错误,连接屏幕与单开发板,下载代码到开发板,上电。LOOK:

  【4块16*16点阵屏滚动显示_74HC595级联_效果-哔哩哔哩】https://b23.tv/2nuCB2

  补充(1)--字模提取:

  打开字模提取软件,模式选择字符模式。点击选项进行配置,配置如图。

  选择需要的字体,在中间输入要生成字模的汉字,点击生成字模。生成的字模在下方,可直接复制取用,亦可保存字模,生成文本文件保存。

  补充(2)--关于这块屏:

  关于这块屏幕以及它的详细资料,朋友们可去祁绪电子的tb上索取。这样可以更好地理解我写的代码。这里并不是为其打广告哦。我又不认识他们,哈哈哈。

  该图片来源:祁绪电子

  我个人觉得这块屏幕够小巧,个人拿来学习用很合适,而我在该文章所展示的,是我对他们家这块的屏的复刻。毕竟我不缺原材料和PCBA白piao机会。而这种点阵屏和我接触过的的实际的产品应用是有区别的。

  我自己复刻的屏幕的原理图:(PCBA不开源)

  我在的公司很早就做过很多的屏幕,下图为08年做的点阵屏,应用于出租车后的广告显示:

  库房里年代久远的东西,哈哈哈

  工程源文件等资料获取gzh后台回复: 74HC595点阵屏

  屏幕系列,下期敬请期待,与您不见不散。