一、目的:
功能:5*5点阵驱动,间隔2秒,循环显示数字0至9。
二、硬件:
1、最小系统ATMEGA-328P UNO
2、5*5点阵
3、220欧电阻*10
三、电路连接
点阵引脚接线
行:连接7,8,9,10,11
列:连接2,3,4,5,6
注:经过实验发现,此模块为共阴极,当行为LOW,列为HIGH时,LED点亮。
四、点阵相关知识:
共阴的,就是led的负极接在一起,靠分别控制led的正极来点亮模块或数码管
共阳的,就是led的正极接在一起,靠分别控制led的负极来点亮模块或数码管
五、实验效果
六、代码 - /*
- 日期:2013-1-10
- 功能:5*5点阵驱动,间隔2秒,显示数字0至9。
- 作者:YQ
- IDE:1.0.2
- 硬件:最小系统UNO
- */
- //定义数字0-9的字库
- const int NUM_1[5][5]={{0,0,1,0,0},{0,0,1,1,0},{0,0,1,0,0},{0,0,1,0,0},{0,1,1,1,0}};
- const int NUM_2[5][5]={{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0},{0,0,0,1,0},{0,1,1,1,0}};
- const int NUM_3[5][5]={{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0}};
- const int NUM_4[5][5]={{0,1,0,1,0},{0,1,0,1,0},{0,1,1,1,0},{0,1,0,0,0},{0,1,0,0,0}};
- const int NUM_5[5][5]={{0,1,1,1,0},{0,0,0,1,0},{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0}};
- const int NUM_6[5][5]={{0,1,1,1,0},{0,0,0,1,0},{0,1,1,1,0},{0,1,0,1,0},{0,1,1,1,0}};
- const int NUM_7[5][5]={{0,1,1,1,0},{0,1,0,0,0},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,0,0}};
- const int NUM_8[5][5]={{0,1,1,1,0},{0,1,0,1,0},{0,1,1,1,0},{0,1,0,1,0},{0,1,1,1,0}};
- const int NUM_9[5][5]={{0,1,1,1,0},{0,1,0,1,0},{0,1,1,1,0},{0,1,0,0,0},{0,1,1,1,0}};
- const int NUM_0[5][5]={{0,1,1,1,0},{0,1,0,1,0},{0,1,0,1,0},{0,1,0,1,0},{0,1,1,1,0}};
- const int col[5]={2,3,4,5,6};//定义列
- const int row[5]={7,8,9,10,11};//定义行
- //存储点阵的像素点
- int pixels[5][5];
- int lastTime;
- int flag=1;
- void setup()
- {
- for(int thisPin=0;thisPin<5;thisPin++)
- {
- pinMode(row[thisPin],OUTPUT);
- pinMode(col[thisPin],OUTPUT);
-
- digitalWrite(row[thisPin],HIGH);
- }
- lastTime=millis();
- memcpy(pixels,NUM_1,sizeof(NUM_1));
- }
- void loop()
- {
- refreshScreen();
- int currentTime=millis();
-
- //间隔2秒,循环将0-9的字库装入点阵的像素中
- if(currentTime-lastTime==2000)
- {
- switch(flag%10)
- {
- case 0:
- memcpy(pixels,NUM_0,sizeof(NUM_0));
- break;
- case 1:
- memcpy(pixels,NUM_1,sizeof(NUM_1));
- break;
- case 2:
- memcpy(pixels,NUM_2,sizeof(NUM_2));
- break;
- case 3:
- memcpy(pixels,NUM_3,sizeof(NUM_3));
- break;
- case 4:
- memcpy(pixels,NUM_4,sizeof(NUM_4));
- break;
- case 5:
- memcpy(pixels,NUM_5,sizeof(NUM_5));
- break;
- case 6:
- memcpy(pixels,NUM_6,sizeof(NUM_6));
- break;
- case 7:
- memcpy(pixels,NUM_7,sizeof(NUM_7));
- break;
- case 8:
- memcpy(pixels,NUM_8,sizeof(NUM_8));
- break;
- case 9:
- memcpy(pixels,NUM_9,sizeof(NUM_9));
- break;
- default:break;
- }
- lastTime=currentTime;
- flag++;
- }
- }
- //根据pixels内容不停刷新点阵
- void refreshScreen()
- {
- for(int i=0;i<5;i++)
- {
- digitalWrite(row[i] , LOW);
- for(int j=0;j<5;j++)
- {
- int thisPixels = pixels[i][j];
- digitalWrite(col[j] , thisPixels);
- if(thisPixels==HIGH)
- {
- digitalWrite(col[j],LOW);
- }
- }
- digitalWrite(row[i],HIGH);
- }
- }
复制代码 |