废话
续上篇
《4个74HC595级联控制16x16点阵横向滚动带仿真(一)》
将横向滚动的程序分享给QQ群里后,群内的晚秋兄弟提出了另一种思路——采用行扫描、移位方式做滚动,于是熬夜将其实现了一下。仿真程序还是跟前篇一样,不再赘述。
效果预览
代码
![](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-05 01:11:28 *@Desctription : 16x16点阵采用4个74HC595移位寄存器控制, * 4个移位寄存器采用串联方式。 * 本例采用行刷新模式。 * 取模方式:横向取模,字节不倒序。 * 适用于普中开发板。 * 为尽量减少RAM占用,未用buff[32]缓存满屏 * 显存的方式来存储要显示的文字码值,而采用 * 3个基准指针和3个缓存字节循环赋值的方式 * 注意: * 由于采用4个595级联方式,输入数据速度太慢, * 导致闪烁感较强。可改用6T模式,改善很多。 * * 更改k值可以更改滚动速度。 * 更改延时也可以更改滚动速度,但注意可能引 * 起闪烁。 *@History : #v1.0 [Press F5 to insert time] 1. some comment ********************************************************** ********************************************************** */ #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 DelayX10us(uchar multi); //行扫描模式下的行序号,两两一组。如0x80, 0x00为点亮第一行,0x40, 0x00为第二行 uchar code ROW_NUM[] = { 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, }; //要显示的字符。开头和末尾均留1个空白字符,以显示滚入、滚出效果。任意替换中间的汉字即可 uchar code words[] = { /*-- 起始空白,滚入效果 --*/ /*-- 宽度x高度=16x16 --*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,