51单片机点阵滚动显示程序
时间: 2023-12-05 13:05:55 浏览: 75
51单片机源码程序-点阵显示.zip
以下是一个基于51单片机的点阵滚动显示程序的示例代码:
```
#include <reg51.h>
unsigned char code font[] = { // 存储点阵字模的数组
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 空格
0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, // !
0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, // "
// 其他字符的点阵字模
};
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 120; j++);
}
void main()
{
unsigned char i, j, k, x;
unsigned char disp[16] = { // 待显示的字符串数组
' ', 'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!', ' ', ' '
};
TMOD = 0x01; // 设置定时器0为模式1
TH0 = 0xff; // 定时器初值
TL0 = 0xff;
TR0 = 1; // 启动定时器
ET0 = 1; // 允许定时器0中断
while (1) {
for (i = 0; i < 16; i++) { // 每次滚动一个字符的宽度
for (j = 0; j < 8; j++) { // 显示8行点阵
x = 0;
for (k = i; k < i + 8; k++)
x = (x << 1) | (font[disp[k]-32][j] >> 7); // 获取一行点阵数据
P1 = ~x; // 在点阵上显示
delay(1);
P1 = 0xff; // 清除显示
}
}
}
}
void InterruptTimer0() interrupt 1 // 定时器0中断服务函数
{
TH0 = 0xff; // 定时器初值
TL0 = 0xff;
}
```
这个程序会循环显示一个字符串,并且每隔一段时间就会滚动一格。在代码中,点阵字模存储在一个数组中,每个字符对应一个8x8的点阵。程序使用定时器中断来控制滚动的速度。
阅读全文