AT892051单片机汉字点阵滚动显示源码

需积分: 9 3 下载量 187 浏览量 更新于2024-11-30 收藏 10KB TXT 举报
"该资源提供了一个基于80C51系列单片机(如AT892051)的汉字点阵滚动指示牌的源程序。程序实现了汉字字符的滚动显示,通过调整SPEED变量可以改变滚动速度,且包含了将两个字节数据转换为点阵列的函数two_onebyte()。" 这篇代码描述了一个简单的汉字滚动显示系统,适用于80C51系列的微控制器,如S52和S2052。程序的核心是通过处理存储在HZ数组中的汉字点阵数据来实现动态显示。以下是对主要知识点的详细解释: 1. **数据类型定义**:`uchar` 和 `uint` 是自定义的数据类型别名,分别代表无符号字符型和无符号整型,它们通常用于节省内存空间。 2. **头文件引用**:`#include<AT892051.H>` 引入了针对AT892051单片机的特定头文件,包含了与该芯片相关的寄存器定义和函数声明。 3. **变量定义**: - `col` 和 `disrow` 分别表示当前显示的列和行。 - `word` 用于追踪当前显示的汉字编码位置。 - `BUFF[6]` 临时存储一行汉字点阵数据的缓冲区。 - `HZ[]` 是一个二维数组,存储了所有汉字的点阵数据。 4. **宏定义**: - `SPEED` 定义了滚动的速度,数字越大滚动越慢。 5. **函数定义**: - `two_onebyte()` 函数将两个字节的数据融合为一个新的字节,用于生成点阵列。它根据`col`值决定如何混合两个字节,然后取反以适应显示器的工作方式。 - `loadoneline()` 函数负责加载一行汉字点阵数据到缓冲区BUFF中,根据当前的`word`和`disrow`计算出正确的点阵数据。 - `sendoneline()` 函数将缓冲区中的数据发送到显示器,通过调用`SBUF`发送数据并等待发送完成标志`TI`。 6. **主函数`main()`**: - 在无限循环中,程序按列逐个显示汉字,每列显示`SPEED`次,然后移动到下一行。当所有列都显示完毕后,`word`向后移动32(一个汉字的宽度),如果超过最大值则重置回零,保证了连续滚动。 7. **汉字点阵数据**:`HZ[]`数组包含了一系列的汉字点阵编码,每个汉字由多个字节组成,对应16x16点阵的每一位。这些数据通常是预先通过点阵字库生成。 8. **I/O操作**:`P1`口的设置用于控制显示器的行选择,通过`P1=0x10+disrow`和`P1=0x20+disrow`交替改变行选择信号,使得显示的汉字能够滚动。 这个程序利用了80C51系列单片机的特性,结合硬件接口,实现了汉字点阵滚动显示的功能,具有一定的可定制性和实用性。