点阵实验
程序员文章站
2024-03-15 14:01:53
...
点阵实验
实验现象
利用8×8点阵显示出心跳动画
理论学习
该点阵为共阳点阵,行控制LED阳极
原理图
注意:模拟I/O口不仅仅是模拟I/O的功能,同时它也具备了数字I/O口的功能,所有的I/O都有数字I/O的功能,但是模拟I/O口在这个基础之上有了模拟I/O口的功能
代码编写
#define h1 2
#define h2 7
#define h3 A5
#define h4 5
#define h5 13
#define h6 A4
#define h7 12
#define h8 A2
#define l1 6
#define l2 11
#define l3 10
#define l4 3
#define l5 A3
#define l6 4
#define l7 8
#define l8 9
//大心脏的显示
unsigned char table1[8][8] = {
0,0,0,0,0,0,0,0,
0,1,1,0,0,1,1,0,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
0,1,1,1,1,1,1,0,
0,0,1,1,1,1,0,0,
0,0,0,1,1,0,0,0,
};
//小心脏的显示
unsigned char table2[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,
};
void setup()
{
pinMode(h1, OUTPUT);
pinMode(h2, OUTPUT);
pinMode(h3, OUTPUT);
pinMode(h4, OUTPUT);
pinMode(h5, OUTPUT);
pinMode(h6, OUTPUT);
pinMode(h7, OUTPUT);
pinMode(h8, OUTPUT);
pinMode(l1, OUTPUT);
pinMode(l2, OUTPUT);
pinMode(l3, OUTPUT);
pinMode(l4, OUTPUT);
pinMode(l5, OUTPUT);
pinMode(l6, OUTPUT);
pinMode(l7, OUTPUT);
pinMode(l8, OUTPUT);
}
void display(unsigned char dat[8][8]) {
digitalWrite(l1, LOW); //选通第一列
digitalWrite(h1, dat[0][0]);
digitalWrite(h2, dat[1][0]);
digitalWrite(h3, dat[2][0]);
digitalWrite(h4, dat[3][0]);
digitalWrite(h5, dat[4][0]);
digitalWrite(h6, dat[5][0]);
digitalWrite(h7, dat[6][0]);
digitalWrite(h8, dat[7][0]);
delay(1); //延时一小段时间,等待LED被点亮
clear(); //清空显示去除余晖
digitalWrite(l2, LOW); //选通第二列
digitalWrite(h1, dat[0][1]);
digitalWrite(h2, dat[1][1]);
digitalWrite(h3, dat[2][1]);
digitalWrite(h4, dat[3][1]);
digitalWrite(h5, dat[4][1]);
digitalWrite(h6, dat[5][1]);
digitalWrite(h7, dat[6][1]);
digitalWrite(h8, dat[7][1]);
delay(1);
clear();
digitalWrite(l3, LOW); //选通第三列
digitalWrite(h1, dat[0][2]);
digitalWrite(h2, dat[1][2]);
digitalWrite(h3, dat[2][2]);
digitalWrite(h4, dat[3][2]);
digitalWrite(h5, dat[4][2]);
digitalWrite(h6, dat[5][2]);
digitalWrite(h7, dat[6][2]);
digitalWrite(h8, dat[7][2]);
delay(1);
clear();
digitalWrite(l4, LOW); //选通第四列
digitalWrite(h1, dat[0][3]);
digitalWrite(h2, dat[1][3]);
digitalWrite(h3, dat[2][3]);
digitalWrite(h4, dat[3][3]);
digitalWrite(h5, dat[4][3]);
digitalWrite(h6, dat[5][3]);
digitalWrite(h7, dat[6][3]);
digitalWrite(h8, dat[7][3]);
delay(1);
clear();
digitalWrite(l5, LOW); //选通第五列
digitalWrite(h1, dat[0][4]);
digitalWrite(h2, dat[1][4]);
digitalWrite(h3, dat[2][4]);
digitalWrite(h4, dat[3][4]);
digitalWrite(h5, dat[4][4]);
digitalWrite(h6, dat[5][4]);
digitalWrite(h7, dat[6][4]);
digitalWrite(h8, dat[7][4]);
delay(1);
clear();
digitalWrite(l6, LOW); //选通第六列
digitalWrite(h1, dat[0][5]);
digitalWrite(h2, dat[1][5]);
digitalWrite(h3, dat[2][5]);
digitalWrite(h4, dat[3][5]);
digitalWrite(h5, dat[4][5]);
digitalWrite(h6, dat[5][5]);
digitalWrite(h7, dat[6][5]);
digitalWrite(h8, dat[7][5]);
delay(1);
clear();
digitalWrite(l7, LOW); //选通第七列
digitalWrite(h1, dat[0][6]);
digitalWrite(h2, dat[1][6]);
digitalWrite(h3, dat[2][6]);
digitalWrite(h4, dat[3][6]);
digitalWrite(h5, dat[4][6]);
digitalWrite(h6, dat[5][6]);
digitalWrite(h7, dat[6][6]);
digitalWrite(h8, dat[7][6]);
delay(1);
clear();
digitalWrite(l8, LOW); //选通第八列
digitalWrite(h1, dat[0][7]);
digitalWrite(h2, dat[1][7]);
digitalWrite(h3, dat[2][7]);
digitalWrite(h4, dat[3][7]);
digitalWrite(h5, dat[4][7]);
digitalWrite(h6, dat[5][7]);
digitalWrite(h7, dat[6][7]);
digitalWrite(h8, dat[7][7]);
delay(1);
clear();
}
void clear() {
digitalWrite(h1, LOW);
digitalWrite(h2, LOW);
digitalWrite(h3, LOW);
digitalWrite(h4, LOW);
digitalWrite(h5, LOW);
digitalWrite(h6, LOW);
digitalWrite(h7, LOW);
digitalWrite(h8, LOW);
digitalWrite(l1, HIGH);
digitalWrite(l2, HIGH);
digitalWrite(l3, HIGH);
digitalWrite(l4, HIGH);
digitalWrite(l5, HIGH);
digitalWrite(l6, HIGH);
digitalWrite(l7, HIGH);
digitalWrite(l8, HIGH);
}
void loop()
{
//显示第一副图
for (int i = 0; i < 100; i++) {
display(table1);
}
//显示第二幅图
for (int i = 0; i < 50; i++) {
display(table2);
}
}
上一篇: c#读取写XML