arduino uno开发板一块
1588led8X8点阵一块
杜邦线若干
面包板
220欧电阻8个
arduino IDE
如图,认真学习一下1588各引脚对应各led点,及1588各引脚位置。大家一定要分析好。基本原理:当第一行接入高电平,第一列接入低电平,其它列高电平,那么第一个led灯就会亮了。所有led灯点亮原理是一样的。
下面根据基本原理来实现一个箭头。首先这里要知道一个概念:人眼视觉暂留。当led亮/灭间隔很小时,人是看不到灯灭的。所以要让8x8点阵显示一个箭头,就是每次点亮一行上的对应led.再灭掉。然后处理第二行。依次下去。所有就灰亮了。int led[8][8] = {//箭头方阵,1处是亮灯的led {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}};void setup() { // put your setup code here, to run once: for (int i = 3; i <= 18; i++) { pinMode(i, OUTPUT); digitalWrite(i, LOW); } // Serial.begin(9600);}void loop() { // put your main code here, to run repeatedly: for (int i = 3; i <= 10; i++) { digitalWrite(i, HIGH); ///////////////////// for (int j = 11; j <= 18; j++) { digitalWrite(j, 1 - led[i - 3][j - 11]);//把对应的灯点亮 delayMicroseconds(200);//点亮200微秒 digitalWrite(j, HIGH);//再把它灭掉 } digitalWrite(i, LOW); } //////////////////////////////////////////////////////////////}
上面已经实现了一个箭头显示。那么如何让箭头东起来呢?实际上原来是一样的。只要把我们的8x8点阵里数字左移就好了。每次把点阵输出后左移一次。就实现了箭头左移效果const int myspeed = 500;//速度控制int fast = 0;//速度控制变量int led[8][8] = { {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}};void setup() { // put your setup code here, to run once: for (int i = 3; i <= 18; i++) { pinMode(i, OUTPUT); digitalWrite(i, HIGH); }}void loop() { fast = 0; while (fast++ < myspeed) {//速度控制 for (int i = 3; i <= 10; i++) {// uno 3 到 10引脚,分别按图对应接8x8led的9 14 8 12 1 2 5 digitalWrite(i, HIGH); ///////////////////// for (int j = 11; j <= 18; j++) {//uno 11 到 18,分别对应接8x8led的 13 3 4 10 6 11 15 16 digitalWrite(j, 1 - led[i - 3][j - 11]);//把点阵输出。注意0 1反向电平输出 digitalWrite(j, HIGH); } digitalWrite(i, LOW); } } /////////////////////////////////////////////////////////// // int led[][8],点阵左移功能for(int i=0;i<8;i++){ int temp=led[i][0]; for(int j=0;j<7;j++){ led[i][j]=led[i][j+1]; } led[i][7]=temp; }}