欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

点阵实验

程序员文章站 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);
	}
}
相关标签: arduino

上一篇: c#读取写XML

下一篇: