ardiuno编程 8x8点阵 滑动显示
8x8点阵LED介绍
8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1高电平,某一列置0低电平,则相应的二极管就亮;
行列对应的接线引脚如下图:
蓝色数字为点阵的引脚编号,红色C为列column标识,R为行row标识,例如第一行,第一列点亮,需要R1对应的引脚高电平,C1对应引脚低电平
代码
int R[] = { 2, 3, 4, 5, 17, 16, 15, 14 }; //行
int C[] = { 6, 7, 8, 9, 10, 11, 12, 13 }; //列
unsigned char LOVE_DATA[8][8] = //“心型”的数据
{
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,1,0,0,1,0,0,
0,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,0,
0,0,1,1,1,1,0,0,
0,0,0,1,1,0,0,0,
0,0,0,0,0,0,0,0
};
unsigned char I_DATA[8][8] = //“I”的数据
{
0,0,0,0,0,0,0,0,
0,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,0,
0,0,0,1,1,0,0,0,
0,0,0,1,1,0,0,0,
0,0,0,1,1,0,0,0,
0,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,0
};
unsigned char U_DATA[8][8] = //“U”的数据
{
0,0,0,0,0,0,0,0,
0,1,1,0,0,1,1,0,
0,1,1,0,0,1,1,0,
0,1,1,0,0,1,1,0,
0,1,1,0,0,1,1,0,
0,1,1,0,0,1,1,0,
0,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,0
};
unsigned char preWindow[8][8] = {0};
void setup() {
// put your setup code here, to run once:
for (int i = 0; i < 8; i++) {
pinMode(R[i], OUTPUT);
pinMode(C[i], OUTPUT);
}
}
//创客初始化
void initWindow(){
for(int i=0;i<8;i++) {
for(int j=0;j<8;j++) {
preWindow[i][j] = 0;
}
}
}
void loop() {
//滑动显示 I O U
slipDisplay(I_DATA);
slipDisplay(LOVE_DATA);
slipDisplay(U_DATA);
delay(1000);
initWindow();
for (int i = 0; i < 50; i++) {
display(I_DATA);
}
delay(1000);
for (int i = 0; i < 50; i++) {
display(LOVE_DATA);
}
delay(1000);
for (int i = 0; i < 100; i++) {
display(U_DATA);
}
delay(1000);
}
/**
*
*滑动显示
**/
void slipDisplay(unsigned char dat[8][8]){
for(int n=1;n<9;n++){
int i=0;
for(i=0;i<8-n;i++) {
for(int j=0;j<8;j++) {
preWindow[i][j] = preWindow[i+1][j];
}
}
for(int j=0;j<n && i<8;j++,i++) {
for(int id=0;id<8;id++){
preWindow[i][id] = dat[j][id];
}
}
for (int i = 0; i < 20; i++) {
display(preWindow);
}
delay(100);
}
}
/**
显示
**/
void display(unsigned char dat[8][8]) //显示函数
{
for (int r = 0; r < 8; r++) {
digitalWrite(R[r], HIGH); //选通第r行
//循环
for (int c = 0; c < 8; c++) {
digitalWrite(C[c], dat[r][c]==1?LOW:HIGH);
}
delay(2);
clear(); //清空显示去除余晖
}
}
void clear() {
for (int i = 0; i < 8; i++) {
digitalWrite(R[i], LOW);
digitalWrite(C[i], HIGH);
}
}
实际效果
8x8点阵显示