前言:
淘宝买了个51开发板学习用,其16*16点阵屏是4个74HC595级联控制,这种方式方便更改行、列刷新模式,但每显示一行或一列时都有32bit数据串行输入再一起并行输出,速度较慢,容易产生闪烁感。而且配套教程太垃圾,。。太多槽点就不吐槽了,全靠自力更生,新手初学,个中辛苦就不谈了。
教程没有横向滚动的例程,于是自己写了一个,记录一下。也画了个Protues的原理图,供没有这款开发板的朋友研究。
软件环境:Keil uvsion 4, Protues 7.8
本例采用列扫描模式,只实现了向左滚动。需要向右滚动的朋友请自行更改或参见
《4个74HC595级联控制16x16点阵横向滚动带仿真(二)》。
原理图:
代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
/** ********************************************************** ****** Copyright(C), 2010-2016, 吐泡泡的虾 ****** ********************************************************** *@Tittle : 16x16点阵滚动显示汉字——横向滚动 *@Version : v1.0 *@Author : 吐泡泡的虾 *@Dat : 2016-08-04 14:23:59 *@Desctription : 16x16点阵采用4个74HC595移位寄存器控制, * 4个移位寄存器采用串联方式。 * 本例采用列刷新模式。 * 取模方式:纵向取模,字节不倒序。 * 注意: * 由于采用4个595级联方式,输入数据速度太慢, * 导致闪烁感较强。可改用6T或1T模式,改善很多。 *@History : * * ********************************************************** ********************************************************** */ #include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit DS_595 = P3 ^ 4; //P3^4: 595的数据输入管脚 sbit SHCP_595 = P3 ^ 6; //P3^6: 595的移位寄存器时钟管脚 SCK sbit STCP_595 = P3 ^ 5; //P3^5: 595的输出寄存器时钟管脚 RCK // sbit MR_595 = P2 ^ 3; //P0^3: 595的输出输出寄存器重置管脚 MR void InputTo595(uchar *displayBuff, uchar len); void OutputFrom595(); void Init_IO(); void DelayX10us(uchar multi); //列扫描模式下的列序号,两两一组。如0x80, 0x00为点亮第一列,0x40, 0x00为第二列 uchar code COL_CODE[] = { 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00<