目录
一、实验目的
1熟悉8*8点阵屏的原理与功能;
2 掌握数组变量的使用;
3 连接点阵屏显示电路;
4编写8*8LED点阵屏显示控制程序
二、实验设备与环境
Arduino UNO套件、Arduino IDE、计算机、8*8显示屏、杜邦线等
三、实验重点
1 点阵屏实验电路连接;2 点阵屏驱动控制程序;3动态图案显示
四、实验难点
1 程序代码编写、调试
五、实验内容
5.1实验任务
任务描述:点阵屏行、列线序测定;点阵屏显示驱动电路连接;点阵屏逐行点亮、逐行关闭;点阵屏图案动态显示。
5.2实验原理
1.点阵屏原理
(1)数码管的共阳极与共阴极
共阳数码管是将所有发光二极管的阳极接到一起形成公共阳极(COM)。共阳数码管在应用时将公共极COM接到“+”或Vcc,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。
共阴数码管是将所有发光二极管的阴极接到一起形成公共阴极(COM)。共阴数码管在应用时将公共极COM接到地线“-”或GND,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。
(2)8*8LED共阴极点阵屏
实验所用1088AS 8*8LED点阵屏是共阴极点阵屏。8*8点阵屏共由64个发光二极管组成,每个发光二极管放置在行线和列线的交叉点上,对应某一行电平置1,某列电平置0,所在交叉点上的二极管正向导通点亮。如要将1088AS 8*8LED点阵屏第1个点点亮,则将第13针脚接高电平,9针脚接低电平;要将第1行点亮,则9针脚接低电平,13、3、4、10、6、11、15、16针脚接高电平。
2.点阵屏电路
如图所示8*8LED点阵屏显示连接电路。
点阵屏针脚编号与Arduino UNO板I/O接口编号一一相对应。按行、列LED显示顺序如下:
col:○13→D6、○3→D11、○4→D10、○10→D3、○6→A2、○11→D4、○15→D8、○16→D9
row:○9→D2、○14→D7、○8→A0、○12→D5、○1→D13、○7→A1、○2→D12、○5→A3
5.3实验内容
1.LED点阵屏显示行、列序测定
测定方法:
用杜邦线连接ArduinoUNO板的VCC(3.5V)、GND,将连接GND的杜邦线接入点阵屏的任一引脚。再用接VCC的杜邦线依次接入点阵屏的其它引脚,观察被点亮LED点的行、列位置,确定该点的行与列编号,逐步确定点阵屏针脚对应实际显示行列顺序。将测试结果填入下表:
2.点阵屏电路连接提示:根据已测定的行、列序列顺序连接,不要接错
3.点阵屏图案显示
// 静态图案显示示例
int row[]={2,7,A0,5,13,A1,12,A3};//引脚行序
int col[]={6,D11,10,D3,A2,D4,8,9};//引脚列序
unsigned char picture[8][8] ={ //点阵图案{0,0,0,0,1,0,0,0},
{0,0,0,1,1,1,0,0},
{0,0,1,1,1,1,1,0},
{0,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,0},
{0,1,1,1,1,1,0,0},
{0,0,1,1,1,0,0,0},
{0,0,0,1,0,0,0,0}
};
void setup(){
for (int i=0;i<8;i++){ // UNO板I/O引脚初始化
pinMode(row[i],OUTPUT);
pinMode(col[i],OUTPUT);
digitalWrite(row[i],HIGH);
digitalWrite(col[i],LOW);
}
}
void loop(){
display(picture); // 显示图案
}
void display(unsigned char picture[8][8]){
for (int i= 0;i<8;i++){
digitalWrite(row[i],LOW);//第i行置低电平
for (int j=0;j<8;j++){//第j列点亮
digitalWrite(col[i],picture[i][j]);
}
}
delay(5);
for(int i=0;i<8;i++){//动态清除
digitalWrite(row[i],HIGH);
digitalWrite(col[i],LOW);
}
}
4.程序扩展:任务:(1)点阵屏逐行点亮、逐行熄灭,再逐列点亮、逐列熄灭;(2)点阵屏数字(或图案)动态显示
int Row[]={2,7,A0,5,13,A1,12,A3};//引脚行序
int Column[]={6,11,10,3,A2,4,8,9};//引脚列序
unsigned char bigheart[8][8] = //'大心'
{
0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 1, 1, 0,
1, 0, 0, 1, 1, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 0, 1, 0,
0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0,
};
unsigned char I[8][8] = //'I'
{
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, 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 L[8][8] = //'L'
{
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, 0, 0, 1, 1, 0, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0,
0, 0, 0, 1, 1, 1, 1, 1,
0, 0, 0, 1, 1, 1, 1, 1,
};
unsigned char O[8][8] = //'O'
{
0, 0, 1, 1, 1, 1, 0, 0,
0, 1, 0, 0, 0, 0, 1, 0,
1, 0, 0, 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, 0, 0, 1,
0, 1, 0, 0, 0, 0, 1, 0,
0, 0, 1, 1, 1, 1, 0, 0,
};
unsigned char V[8][8] = //'V'
{
0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 1,
0, 1, 0, 0, 0, 0, 1, 0,
0, 1, 0, 0, 0, 0, 1, 0,
0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 1, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0,
};
unsigned char E[8][8] = //'E'
{
0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 0,
0, 1, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 0,
0, 1, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 1, 1, 0,
};
unsigned char U[8][8] = //'U'
{
1, 0, 0, 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, 0, 0, 1,
1, 0, 0, 0, 0, 0, 0, 1,
1, 1, 0, 0, 0, 0, 1, 1,
0, 1, 1, 0, 0, 0, 1, 1,
0, 0, 1, 1, 1, 1, 0, 0,
};
void setup() {
// 矩阵代码运行一次:
for(int i = 0; i < 8; i++)
{
pinMode(Row[i], OUTPUT);//输出模式
pinMode(Column[i], OUTPUT);//输出模式
}
}
void loop() {
//主代码循环运行:
for(int i = 0; i< 100; i++)
{
Display(I);
}
for(int i = 0; i< 100; i++)
{
Display(L);
}
for(int i = 0; i< 100; i++)
{
Display(O);
}
for(int i = 0; i< 100; i++)
{
Display(V);
}
for(int i = 0; i< 100; i++)
{
Display(E);
}
for(int i = 0; i< 100; i++)
{
Display(U);
}
for(int i = 0; i< 100; i++)
{
Display(bigheart);
}
for(int i = 0; i< 100; i++)
{
Display(bigheart);
}
for(int i = 0; i < 100; i++)
{
Display(bigheart);
}
}
void Display(unsigned char lattice[8][8])//显示函数
{
for(int r = 0; r < 8; r++)
{
digitalWrite(Row[r], LOW);
for(int c = 0; c < 8; c++)
{
digitalWrite(Column[c], lattice[r][c]);
}
delay(1);
Clear();
}
}
void Clear()//清除函数
{
for(int i = 0; i < 8; i++)
{
digitalWrite(Row[i], HIGH);
digitalWrite(Column[i], LOW);
}
5.4实验结果
结论:
实验结果依次显示出“ I love U”的字母
反思:首先,通过本次实验,我熟悉了
8*8
点阵屏的原理与功能;掌握数组变量的使用和连接点阵屏显示电路;其次,实验结果依次显示出“ I love U”的字母
;最后,希望以后再接再厉。
作品:
5.5思考题
1.怎样通过点阵屏实现一个交通灯动态提示?