51单片机让点阵屏滚动显示
时间: 2023-09-18 09:09:15 浏览: 412
51单片机+74HC138+16×16点阵组成的汉字滚动显示电路原理图+源代码+proteus仿真+word说明文档
51单片机控制点阵屏滚动显示可以通过以下步骤实现:
1. 定义需要显示的字符串或图案,并且将其存储到数组中。
2. 设置点阵屏的行扫描和列扫描方式,以及扫描速度等参数。
3. 编写滚动函数,该函数将不断循环,每次循环将要显示的内容向左移动一定的像素,然后将移动后的内容显示在点阵屏上。
下面是一个简单的示例代码:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
// 定义点阵屏显示内容
uchar code text[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 空格
0x00,0x00,0x00,0x7f,0x00,0x00,0x00,0x00, // A
0x00,0x00,0x7f,0x41,0x41,0x22,0x1c,0x00, // B
0x00,0x00,0x3e,0x41,0x41,0x41,0x22,0x00, // C
0x00,0x00,0x7f,0x41,0x41,0x22,0x1c,0x00, // D
0x00,0x00,0x7f,0x49,0x49,0x49,0x41,0x00, // E
0x00,0x00,0x7f,0x09,0x09,0x09,0x01,0x00, // F
};
// 定义点阵屏行扫描和列扫描方式
uchar code row[] = {0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};
uchar code col[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
// 点阵屏显示函数
void display(uchar *buf)
{
uchar i, j;
for (i = 0; i < 8; i++) {
P2 = row[i]; // 设置行扫描方式
P0 = buf[i]; // 设置列扫描方式
for (j = 0; j < 100; j++) { // 设置扫描速度
_nop_();
}
}
}
// 滚动函数
void scroll(uchar *buf, uint len)
{
uint i, j;
for (i = 0; i < len; i++) { // 每次向左移动一个像素
for (j = 0; j < 8; j++) {
buf[j] <<= 1;
}
display(buf); // 显示移动后的内容
}
}
void main()
{
uchar i;
while (1) {
for (i = 0; i < sizeof(text) / 8; i++) {
scroll((uchar *)text + i * 8, 8); // 每次滚动8个像素
}
}
}
```
在这个示例代码中,我们首先定义了需要显示的字符串或图案,然后设置了点阵屏的行扫描和列扫描方式,以及扫描速度等参数。接着,我们编写了滚动函数,该函数将不断循环,每次循环将要显示的内容向左移动一个像素,然后将移动后的内容显示在点阵屏上。最后,在主函数中不断调用滚动函数,实现点阵屏的滚动显示。
阅读全文