点阵屏16x24上下滚动代码
时间: 2023-08-06 08:21:51 浏览: 40
下面是一个使用Arduino的点阵屏16x24上下滚动的示例代码:
```c++
#include <LedControl.h>
// 初始化点阵屏
LedControl lc=LedControl(12,11,10,1);
// 定义滚动的文本
char text[]="Hello World! ";
// 定义每个字符的字模
byte chars[][8]={
{0x00,0x7e,0x81,0x81,0x81,0x7e,0x00,0x00}, // H
{0x00,0x00,0x81,0xff,0x81,0x00,0x00,0x00}, // e
{0x00,0x00,0xfe,0x91,0x91,0x92,0x00,0x00}, // l
{0x00,0x00,0xff,0x81,0x81,0x81,0x00,0x00}, // l
{0x00,0x00,0x7e,0x81,0x81,0x7e,0x00,0x00}, // o
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} // 空格
};
// 定义每个字符的宽度
byte charWidths[]={6,3,6,6,6,6};
// 定义滚动速度
int scrollSpeed=100;
// 定义当前滚动的位置和字符
int scrollPos=0;
int currentChar=0;
void setup() {
// 设置点阵屏亮度
lc.setIntensity(0,8);
// 清空点阵屏
lc.clearDisplay(0);
}
void loop() {
// 每隔一段时间滚动一次
if(millis()-lastScrollTime>=scrollSpeed) {
lastScrollTime=millis();
scrollPos++;
// 如果滚动到了当前字符的末尾,切换到下一个字符
if(scrollPos>charWidths[currentChar]) {
scrollPos=0;
currentChar++;
if(currentChar>=sizeof(text)-1) {
currentChar=0;
}
}
// 根据滚动位置和当前字符,计算显示的内容
byte display[24][2];
for(int y=0;y<24;y++) {
for(int x=0;x<2;x++) {
byte b=0;
if(y-scrollPos>=0 && y-scrollPos<8) {
b=chars[currentChar][y-scrollPos];
} else if(y-scrollPos>=8 && y-scrollPos<16) {
b=chars[currentChar+1][y-scrollPos-8];
} else if(y-scrollPos>=16 && y-scrollPos<24) {
b=chars[currentChar+2][y-scrollPos-16];
}
display[y][x]=b>>x*8;
}
}
// 在点阵屏上显示
for(int y=0;y<24;y++) {
for(int x=0;x<2;x++) {
lc.setRow(0, y, display[y][x]);
}
}
}
}
```
这段代码可以在Arduino上运行,使用LedControl库来控制点阵屏。它定义了一个滚动的文本和每个字符的字模和宽度,以及滚动速度和当前滚动的位置和字符。在循环中,它根据滚动位置和当前字符计算要显示的内容,并使用LedControl库在点阵屏上显示。