佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 2229|回复: 34

Arduino Dot Matrix 新人帖

[复制链接]
发表于 19-8-2013 11:07 PM | 显示全部楼层 |阅读模式
小弟最近玩了 Dot Matrix .. 基本的操作会了一点点.. 看见 LED 发亮仿佛是看见baby 出世一样..
小弟乱打了一个 x = y 的线 其他的图画就不会了
废话少说了看图,看编制再来研究









不过小弟还是不会明白很多东西.. 小弟的编制很差..
  1. const int row[8] = {
  2.   2, 3, 4, 5, 9, 8, 7, 6 };
  3. const int col[8] = {
  4.   10, 11, 12, 13, 16, 17,18, 19 };


  5. int x = 0;
  6. int y = 0;

  7. void setup() {
  8.   for(int thisPin = 0; thisPin < 8; thisPin++ ) {
  9.     pinMode(col[thisPin],OUTPUT);
  10.     pinMode(row[thisPin],OUTPUT);
  11.     digitalWrite(col[thisPin],LOW);
  12.     digitalWrite(col[thisPin],LOW);
  13.   }
  14. }

  15. void clr(){
  16.   digitalWrite(row[x],LOW);
  17.   digitalWrite(col[x],LOW);

  18. }

  19. void loop() {
  20.   for(int a = 0; a < 8; a++){
  21.     x = a;
  22.     y = a;
  23.     digitalWrite(row[x],HIGH);
  24.     digitalWrite(col[y],HIGH);
  25.     clr();
  26.   }
  27. }

复制代码
想问问各位高手有什么方法好介绍吗 ?
小弟想要用来写 ABC , 画自己要的图片 一只金鱼..   一个爱心.. 可是要怎么编制就想不到了..






回复

使用道具 举报


ADVERTISEMENT

发表于 20-8-2013 04:12 PM | 显示全部楼层
Arduino网站不是有 example吗?
http://playground.arduino.cc/Main/DirectDriveLEDMatrix
回复

使用道具 举报

 楼主| 发表于 20-8-2013 10:53 PM | 显示全部楼层
西门庆33 发表于 20-8-2013 04:12 PM
Arduino网站不是有 example吗?
http://playground.arduino.cc/Main/DirectDriveLEDMatrix

谢谢啦我找到半条命都找不到..
会到加了插上电源.. 上载了源码到 arduino 虽然可以动不过不明白道理 只好慢慢研究先.. 希望这个会容易点
回复

使用道具 举报

 楼主| 发表于 20-8-2013 11:36 PM | 显示全部楼层
西门庆33 发表于 20-8-2013 04:12 PM
Arduino网站不是有 example吗?
http://playground.arduino.cc/Main/DirectDriveLEDMatrix

大哥真的不好意思一直来烦你..
想问问下
FrequencyTimer2::disable();
  // Set refresh rate (interrupt timeout period)
  FrequencyTimer2::setPeriod(2000);
  // Set interrupt routine to be called
  FrequencyTimer2::setOnOverflow(display);


disable = 吧 pin 11 正常运作...

setPeriod(2000) = interrupt timeout period  其实不是很明白什么意思 大大可以帮帮小弟一下吗

setOnOverflow() =  这个更加不明白了 大大.....


  setPattern(pattern);
#define F { \
    {0, 0, 1, 1, 1, 1, 1, 0}, \
    {0, 0, 1, 0, 0, 0, 0, 0}, \
    {0, 0, 1, 0, 0, 0, 0, 0}, \
    {0, 0, 1, 1, 1, 1, 0, 0}, \
    {0, 0, 1, 0, 0, 0, 0, 0}, \
    {0, 0, 1, 0, 0, 0, 0, 0}, \
    {0, 0, 1, 0, 0, 0, 0, 0}, \
    {0, 0, 1, 0, 0, 0, 0, 0}  \
}


{\{}\{}\{}\{}\}  <-- 这样的写法是什么意思 为什么他要这样排的 .....


byte patterns[numPatterns][8][8] = {
  H,E,L,L,O,o0o1,o0o2
};

那个 byte 我真的不明白是什么来的.. 看了
A byte stores an 8-bit unsigned number, from 0 to 255.
啊啊啊啊啊啊...  是不是说 byte 和 int 是一样的 分别就是 byte 0~ 255  int -32,768 ~ 32,768

他是怎样 turn LED On 的啊 T.T 电子白痴就是白痴
大大有什么方式学会吗..


  1. #include <FrequencyTimer2.h>

  2. #define SPACE { \
  3.     {0, 0, 0, 0, 0, 0, 0, 0},  \
  4.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  5.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  6.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  7.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  8.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  9.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  10.     {0, 0, 0, 0, 0, 0, 0, 0} \
  11. }

  12. #define H { \
  13.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  14.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  15.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  16.     {0, 1, 1, 1, 1, 1, 1, 0}, \
  17.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  18.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  19.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  20.     {0, 1, 0, 0, 0, 0, 1, 0}  \
  21. }

  22. #define E  { \
  23.     {0, 1, 1, 1, 1, 1, 1, 0}, \
  24.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  25.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  26.     {0, 1, 1, 1, 1, 1, 1, 0}, \
  27.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  28.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  29.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  30.     {0, 1, 1, 1, 1, 1, 1, 0}  \
  31. }

  32. #define L { \
  33.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  34.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  35.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  36.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  37.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  38.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  39.     {0, 1, 0, 0, 0, 0, 0, 0}, \
  40.     {0, 1, 1, 1, 1, 1, 1, 0}  \
  41. }

  42. #define O { \
  43.     {0, 0, 0, 1, 1, 0, 0, 0}, \
  44.     {0, 0, 1, 0, 0, 1, 0, 0}, \
  45.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  46.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  47.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  48.     {0, 1, 0, 0, 0, 0, 1, 0}, \
  49.     {0, 0, 1, 0, 0, 1, 0, 0}, \
  50.     {0, 0, 0, 1, 1, 0, 0, 0}  \
  51. }

  52. #define F { \
  53.     {0, 0, 1, 1, 1, 1, 1, 0}, \
  54.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  55.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  56.     {0, 0, 1, 1, 1, 1, 0, 0}, \
  57.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  58.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  59.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  60.     {0, 0, 1, 0, 0, 0, 0, 0}  \
  61. }

  62. #define o0o1 { \
  63.     {0, 0, 0, 0, 0, 1, 0, 0},  \
  64.     {0, 0, 0, 0, 1, 0, 1, 0}, \
  65.     {0, 0, 0, 0, 1, 0, 1, 0}, \
  66.     {0, 0, 0, 0, 1, 0, 1, 0}, \
  67.     {0, 0, 1, 1, 1, 0, 1, 1}, \
  68.     {0, 1, 1, 0, 1, 0, 1, 0}, \
  69.     {1, 0, 1, 0, 1, 0, 1, 0}, \
  70.     {1, 0, 1, 0, 1, 0, 1, 0} \
  71. }

  72. #define o0o2 { \
  73.     {0, 0, 0, 0, 0, 0, 0, 0},  \
  74.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  75.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  76.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  77.     {0, 0, 0, 0, 0, 0, 0, 0}, \
  78.     {1, 0, 0, 0, 0, 0, 0, 0}, \
  79.     {1, 0, 0, 0, 0, 0, 0, 0}, \
  80.     {1, 0, 0, 0, 0, 0, 0, 0} \
  81. }

  82. byte col = 0;
  83. byte leds[8][8];

  84. // pin[xx] on led matrix connected to nn on Arduino (-1 is dummy to make array start at pos 1)
  85. int pins[17]= {-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 19, 18, 17, 16};

  86. // col[xx] of leds = pin yy on led matrix
  87. int cols[8] = {pins[1], pins[2], pins[3], pins[4], pins[5], pins[6], pins[7], pins[8]};

  88. // row[xx] of leds = pin yy on led matrix
  89. int rows[8] = {pins[9], pins[10], pins[11], pins[12], pins[13], pins[14], pins[15], pins[16]};

  90. const int numPatterns = 8;
  91. byte patterns[numPatterns][8][8] = {
  92.   H,E,L,L,O,o0o1,o0o2
  93. };

  94. int pattern = 0;

  95. void setup() {
  96.   // sets the pins as output
  97.   for (int i = 1; i <= 16; i++) {
  98.     pinMode(pins[i], OUTPUT);
  99.   }

  100.   // set up cols and rows
  101.   for (int i = 1; i <= 8; i++) {
  102.     digitalWrite(cols[i - 1], HIGH);
  103.   }

  104.   for (int i = 1; i <= 8; i++) {
  105.     digitalWrite(rows[i - 1], HIGH);
  106.   }

  107.   clearLeds();

  108.   // Turn off toggling of pin 11
  109.   FrequencyTimer2::disable();
  110.   // Set refresh rate (interrupt timeout period)
  111.   FrequencyTimer2::setPeriod(2000);
  112.   // Set interrupt routine to be called
  113.   FrequencyTimer2::setOnOverflow(display);

  114.   setPattern(pattern);
  115. }

  116. void loop() {
  117.     pattern = ++pattern % numPatterns;
  118.     slidePattern(pattern, 60);
  119. }

  120. void clearLeds() {
  121.   // Clear display array
  122.   for (int i = 0; i < 8; i++) {
  123.     for (int j = 0; j < 8; j++) {
  124.       leds[i][j] = 0;
  125.     }
  126.   }
  127. }

  128. void setPattern(int pattern) {
  129.   for (int i = 0; i < 8; i++) {
  130.     for (int j = 0; j < 8; j++) {
  131.       leds[i][j] = patterns[pattern][i][j];
  132.     }
  133.   }
  134. }

  135. void slidePattern(int pattern, int del) {
  136.   for (int l = 0; l < 8; l++) {
  137.     for (int i = 0; i < 7; i++) {
  138.       for (int j = 0; j < 8; j++) {
  139.         leds[j][i] = leds[j][i+1];
  140.       }
  141.     }
  142.     for (int j = 0; j < 8; j++) {
  143.       leds[j][7] = patterns[pattern][j][0 + l];
  144.     }
  145.     delay(del);
  146.   }
  147. }

  148. // Interrupt routine
  149. void display() {
  150.   digitalWrite(cols[col], LOW);  // Turn whole previous column off
  151.   col++;
  152.   if (col == 8) {
  153.     col = 0;
  154.   }
  155.   for (int row = 0; row < 8; row++) {
  156.     if (leds[col][7 - row] == 1) {
  157.       digitalWrite(rows[row], HIGH);  // Turn on this led
  158.     }
  159.     else {
  160.       digitalWrite(rows[row], LOW); // Turn off this led
  161.     }
  162.   }
  163.   digitalWrite(cols[col], HIGH); // Turn whole column on at once (for equal lighting times)
  164. }
复制代码
回复

使用道具 举报

 楼主| 发表于 20-8-2013 11:55 PM | 显示全部楼层
西门庆33 发表于 20-8-2013 04:12 PM
Arduino网站不是有 example吗?
http://playground.arduino.cc/Main/DirectDriveLEDMatrix

setPattern(pattern);  


void setPattern( int pattern){
}


  其实他是什么来的 .. 为什么要这样写的

pattern = ++pattern % 8;     那个 pattern 前面的++ 怎么要放在前面的 本帖最后由 angels1026 于 20-8-2013 11:58 PM 编辑

回复

使用道具 举报

发表于 21-8-2013 07:40 PM | 显示全部楼层
angels1026 发表于 20-8-2013 11:36 PM
大哥真的不好意思一直来烦你..
想问问下
FrequencyTimer2::disable();
FrequencyTimer2::setPeriod(2000);
设定间隔时间为2000 microseconds (2 millisecond, 0.002 seconds)。我猜想你以为它是2000 ms(2 seconds)
  1. FrequencyTimer2::setOnOverflow(display);
复制代码
如果你知道FrequencyTimer2::setPeriod(2000) 是2 millisecond后,可能你已经明白了。那是每2 millisecond运行display程序,相等于另一个loop在运行


disable = 吧 pin 11 正常运作..
如果没有添加这行指令,每一个时钟(clock cycle)都会toggle pin11
  1. {\{}\{}\{}\{}\}  <-- 这样的写法是什么意思 为什么他要这样排的
复制代码
我没有注意到这个 \,应该不需要的吧?你试下把 \ 除去,看可以正常操作吗?
\是一个escape command,通常后在\的后面还有一个字母。比如“//,/*,/r,/n”
这个
const int numPatterns = 6;
byte patterns[numPatterns][8][8] = {
  H,E,L,L,O,SPACE
};
与这个
void setPattern(int pattern) {
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      leds[j] = patterns[pattern][j];
    }
  }
}

我和你一样,还没有搞清楚,因为setPattern只在setup里运行了一次,之後再也没有运行了。
请给我一些时间消化


pattern = ++pattern % 8;     那个 pattern 前面的++ 怎么要放在前面的

应该是pattern = ++pattern % 6
pattern=++pattern 与 pattern=pattern+1是同样的。每运行一次, pattern 将会加一

%(modulo) 是要取得余数
0 % 6=0
1 %6 =1
2 % 6=2
3 %6 =3
4 % 6=4
5 %6 =5
6 % 6=0
7 %6 =1
所以patern的值时常介于0和5之间,与(for i=0, i<=5, i++相似)


那个 byte 我真的不明白是什么来的.. 看了

如果同时可以使用byte与int,那当然选择使用byte。因为微控制器的资源有限,RAM很小,Arduino UNO 只有2KB RAM。反观我们的个人电脑,都是1GB以上。


本帖最后由 西门庆33 于 21-8-2013 07:46 PM 编辑

回复

使用道具 举报

Follow Us
 楼主| 发表于 23-8-2013 01:02 PM | 显示全部楼层
西门庆33 发表于 21-8-2013 07:40 PM
设定间隔时间为2000 microseconds (2 millisecond, 0.002 seconds)。我猜想你以为它是2000 ms(2 seconds) ...

大哥.. 至于这个
  1. const int numPatterns = 8;
  2. byte patterns[numPatterns][8][8] = {
  3.   H,E,L,L,O,o0o1,o0o2
  4. };
复制代码
byte patterns[][][] =
把它化成我能明白的就是
  1. byte pattern [][][] = {
  2.    
  3.    { {},{},{},{},{},{},{},{} },
  4.    { {},{},{},{},{},{},{},{} },
  5.    { {},{},{},{},{},{},{},{} },
  6.    { {},{},{},{},{},{},{},{} },
  7.    { {},{},{},{},{},{},{},{} },
  8.    { {},{},{},{},{},{},{},{} },
  9.    { {},{},{},{},{},{},{},{} },
  10.    { {},{},{},{},{},{},{},{} },

  11. }
复制代码
所以 numPattern = pattern 的 array 有几个 member ....  如果是 Hello  就有 5 个
[5][][]   接下来两个 就  H 的 member [][] 就放那个 # define 那边的 array .. 应该是这样吧.. 如果有出请打小弟



本帖最后由 angels1026 于 23-8-2013 01:03 PM 编辑

回复

使用道具 举报

发表于 23-8-2013 05:10 PM | 显示全部楼层
angels1026 发表于 23-8-2013 01:02 PM
大哥.. 至于这个byte patterns[][][] =
把它化成我能明白的就是所以 numPattern = pattern 的 array 有 ...

这个byte patterns[numPatterns][8][8] 没问题,也不过是一般的multidimensional array,容易明白。我不明白之处是它被下面的代码搞乱了
void setPattern(int pattern) {
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++) {
      leds[j] = patterns[pattern][j];
    }
  }
}

经你提醒那个#define,我现在弄清零了。原来是之前没有看清楚代码,我一直以为是这样declare array
#define HELLO {
    {0, 0, 0, 0, 0, 0, 0, 0},  
    {0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0}

    {0, 1, 0, 0, 0, 0, 1, 0},
    {0, 1, 0, 0, 0, 0, 1, 0},
    {0, 1, 0, 0, 0, 0, 1, 0},
    {0, 1, 1, 1, 1, 1, 1, 0},
    {0, 1, 0, 0, 0, 0, 1, 0},
    {0, 1, 0, 0, 0, 0, 1, 0},
    {0, 1, 0, 0, 0, 0, 1, 0},
    {0, 1, 0, 0, 0, 0, 1, 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, 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, 0, 0, 0, 0, 0, 0},
    {0, 1, 0, 0, 0, 0, 0, 0},
    {0, 1, 0, 0, 0, 0, 0, 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, 0, 0, 1, 1, 0, 0, 0},
    {0, 0, 1, 0, 0, 1, 0, 0},
    {0, 1, 0, 0, 0, 0, 1, 0},
    {0, 1, 0, 0, 0, 0, 1, 0},
    {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, 0, 1, 1, 0, 0, 0}  
}

其实我比较少用上面方式(二进制)declare font。我喜爱用下面方式(十六进制)declare font,与上面的(SPACE,H,E,L,O) declare一样,但只用一个dimension array,且代码较短
  1. unsigned char font[40] =
  2. {
  3.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,        // Char 000 (space)
  4.         0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00,        // Char 072 (H)
  5.         0x7E, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7E, 0x00,        // Char 069 (E)
  6.         0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00,        // Char 076 (L)
  7.         0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00,        // Char 079 (O)
  8. }
复制代码
本帖最后由 西门庆33 于 23-8-2013 05:12 PM 编辑

回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 23-8-2013 10:34 PM | 显示全部楼层
西门庆33 发表于 23-8-2013 05:10 PM
这个byte patterns[numPatterns][8][8] 没问题,也不过是一般的multidimensional array,容易明白。我不明 ...

大哥...   FrequencyTimer2::setOnOverflow(display);    这个是什么来的

还有就是他怎样用 二进制 来点亮 LED



回复

使用道具 举报

 楼主| 发表于 23-8-2013 10:40 PM | 显示全部楼层
西门庆33 发表于 23-8-2013 05:10 PM
这个byte patterns[numPatterns][8][8] 没问题,也不过是一般的multidimensional array,容易明白。我不明 ...

if (leds[col][7 - row] == 1) {

为什么要 7- row 的  

  金鱼眼
回复

使用道具 举报

发表于 25-8-2013 10:39 AM | 显示全部楼层
angels1026 发表于 23-8-2013 10:34 PM
大哥...   FrequencyTimer2::setOnOverflow(display);    这个是什么来的

还有就是他怎样用 二进制 来 ...
FrequencyTimer2::setOnOverflow(display);    这个是什么来的
FrequencyTimer2::setOnOverflow() 是一个timer中断,必须与FrequencyTimer2::setPeriod()配合

FrequencyTimer2::setPeriod(2000);
FrequencyTimer2::setOnOverflow(display);

上面代码是每0.002秒(2000 microseconds)执行一次display程序


还有就是他怎样用 二进制 来点亮 LED
Matrix.gif
使用上面的方阵来解释。col会一直不停的顺序从col 1扫描至col 8,每一次col更换,将会扫描row 1至row 8。因此每次只有一粒led点亮或息。此动作必须不停的运行,且速度非常快,称之为refresh rate 或者FPS(frame per second)


例:
#define E  { \
    {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, 0, 0, 0, 0, 0, 0}, \
    {0, 1, 1, 1, 1, 1, 1, 0}  \
}

每次col更换,row1 至 row8不停的扫描
for (int row = 0; row < 8; row++) {
    if (leds[col][7 - row] == 1) {
      digitalWrite(rows[row], LOW);  // Turn on this led
    }
    else {
      digitalWrite(rows[row], HIGH); // Turn off this led
    }
  }

当col=1 (注意:array是从0算起的)
row 1 = 0  ,运行digitalWrite(rows[row], LOW)  =>  
digitalWrite(rows[0], LOW)
row 2 = 0  ,运行digitalWrite(rows[row], LOW)
  =>  digitalWrite(rows[1], LOW)
row 3 = 0  ,运行digitalWrite(rows[row], LOW)
  =>  digitalWrite(rows[2], LOW)
row 4 = 0  ,运行digitalWrite(rows[row], LOW)
  =>  digitalWrite(rows[3], LOW)
row 5 = 0  ,运行digitalWrite(rows[row], LOW)
  =>  digitalWrite(rows[4], LOW)
row 6 = 0  ,运行digitalWrite(rows[row], LOW)
  =>  digitalWrite(rows[5], LOW)
row 7 = 0  ,运行digitalWrite(rows[row], LOW)
  =>  digitalWrite(rows[6], LOW)
row 8 = 0  ,运行digitalWrite(rows[row], LOW)
  =>  digitalWrite(rows[7], LOW)

当col=2
row 1 = 1  ,运行digitalWrite(rows[row], HIGH)
row 2 = 1  ,运行digitalWrite(rows[row], HIGH)
row 3 = 1  ,运行digitalWrite(rows[row], HIGH)
row 4 = 1  ,运行digitalWrite(rows[row], HIGH)
row 5 = 1  ,运行digitalWrite(rows[row], HIGH)
row 6 = 1  ,运行digitalWrite(rows[row], HIGH)
row 7 = 1  ,运行digitalWrite(rows[row], HIGH)
row 8 = 1  ,运行digitalWrite(rows[row], HIGH)

当col=3
row 1 = 1  ,运行digitalWrite(rows[row], HIGH)
  =>  digitalWrite(rows[0], HIGH)
row 2 = 0  ,运行digitalWrite(rows[row],LOW)
  =>  digitalWrite(rows[1], LOW)
row 3 = 0  ,运行digitalWrite(rows[row],LOW)
  =>  digitalWrite(rows[2], LOW)
row 4 = 1  ,运行digitalWrite(rows[row], HIGH)
  =>  digitalWrite(rows[3], HIGH)
row 5 = 0  ,运行digitalWrite(rows[row],LOW)
  =>  digitalWrite(rows[4], LOW)
row 6 = 0  ,运行digitalWrite(rows[row],LOW)
  =>  digitalWrite(rows[5], LOW)
row 7 = 0  ,运行digitalWrite(rows[row],LOW)
  =>  digitalWrite(rows[6], LOW)
row 8 = 1  ,运行digitalWrite(rows[row], HIGH)
  =>  digitalWrite(rows[7], HIGH)
由此类推
回复

使用道具 举报

发表于 25-8-2013 10:48 AM | 显示全部楼层
angels1026 发表于 23-8-2013 10:40 PM
if (leds[col][7 - row] == 1) {

为什么要 7- row 的  

我猜想他要从row 7开始,然後倒数扫描。意思是从下面扫描至上面。
回复

使用道具 举报

 楼主| 发表于 25-8-2013 09:41 PM | 显示全部楼层
西门庆33 发表于 25-8-2013 10:48 AM
我猜想他要从row 7开始,然後倒数扫描。意思是从下面扫描至上面。

大哥这个是根据我明白的东西写出来的... 我不贪心.. 只是想要一个 Fxxx 的 F 而已...
  1. #include <FrequencyTimer2.h>


  2. #define F { \
  3.     {0, 0, 1, 1, 1, 1, 1, 0}, \
  4.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  5.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  6.     {0, 0, 1, 1, 1, 1, 0, 0}, \
  7.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  8.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  9.     {0, 0, 1, 0, 0, 0, 0, 0}, \
  10.     {0, 0, 1, 0, 0, 0, 0, 0}  \
  11. }

  12. int pins[17] = { -1,2,3,4,5,6,7,8,9,10,11,12,13,19,18,17,16};
  13. int cols[8] = {pins[1], pins[2], pins[3], pins[4], pins[5], pins[6], pins[7], pins[8]};
  14. int rows[8] = {pins[9], pins[10], pins[11], pins[12], pins[13], pins[14], pins[15], pins[16] };
  15. int row = 0;

  16. byte LED [8][8];
  17. byte col = 0;
  18. byte patterns[8][8] = F ;



  19. void setup(){
  20.   for(int i = 0; i < 16; i++){
  21.     pinMode(pins[i],OUTPUT);   
  22.   }  
  23.   
  24.   FrequencyTimer2::disable();

  25.   FrequencyTimer2::setPeriod(1000);

  26.   FrequencyTimer2::setOnOverflow(display);
  27. }



  28. void loop(){
  29.   setPattern();
  30.   display();
  31. }

  32. void setPattern(){
  33.   for(int x = 0; x < 8; x++ ){
  34.     for(int y = 0; y < 8; y++){
  35.       LED[x][y] = patterns[x][y];
  36.     }
  37.   }
  38. }
  39.   

  40.   
  41.   
  42. void display(){
  43.   digitalWrite(cols[col],LOW);
  44.   col++;
  45. if(col == 8){
  46.   col = 0;
  47. }
  48.     for(int row = 0; row < 8; row++){
  49.       if(LED[col][7- row] ==1){
  50.         digitalWrite(rows[row],HIGH);
  51.       }
  52.       else{
  53.         digitalWrite(rows[row],LOW);
  54.       }
  55.     }
  56.     digitalWrite(cols[col],HIGH);
  57.   }

复制代码
F 出现在眼前了... 泪水都流了出来... 可是...


回复

使用道具 举报

 楼主| 发表于 25-8-2013 09:46 PM | 显示全部楼层
西门庆33 发表于 25-8-2013 10:48 AM
我猜想他要从row 7开始,然後倒数扫描。意思是从下面扫描至上面。


回复

使用道具 举报

发表于 26-8-2013 12:12 AM | 显示全部楼层
angels1026 发表于 25-8-2013 09:41 PM
大哥这个是根据我明白的东西写出来的... 我不贪心.. 只是想要一个 Fxxx 的 F 而已...F 出现在眼前了... 泪 ...

你的display在FrequencyTimer2::setOnOverflow(display)里执行了,loop里就不需要了。

既然只是一个字符,#define F与byte patterns[8][8] = F 可以省了。

LED更改为
byte LED[8][8] = {
    {0, 0, 1, 1, 1, 1, 1, 0},
    {0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 1, 1, 1, 1, 0, 0},
    {0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 1, 0, 0, 0, 0, 0},
    {0, 0, 1, 0, 0, 0, 0, 0}
}

setPattern()

void setPattern(){
  for(int x = 0; x < 8; x++ ){
    for(int y = 0; y < 8; y++){
      LED[x][y] = patterns[x][y];
    }
  }
}
也可以省了

最后连所有FrequencyTimer2都省了,loop里只需要一display呼叫就行了。
void loop(){
  display();
}

回复

使用道具 举报

 楼主| 发表于 26-8-2013 12:22 AM | 显示全部楼层
西门庆33 发表于 26-8-2013 12:12 AM
你的display在FrequencyTimer2::setOnOverflow(display)里执行了,loop里就不需要了。

既然只是一个字 ...

yes... 不过 LED 不亮 = = 没有 frequencytimer 加入 LED 很暗...  
不过加多一个 delay(1) 就可以了  实验完成... 研究下一步...
最后给我发现到了... frequencytimer 自动运行 (display)  
void loop 不需要写任何东西.. Fxxx 的 F 就可以出现了  
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 26-8-2013 12:23 AM | 显示全部楼层
西门庆33 发表于 26-8-2013 12:12 AM
你的display在FrequencyTimer2::setOnOverflow(display)里执行了,loop里就不需要了。

既然只是一个字 ...

那么简单的东西却花了那么多时间来消化... 看来 MCU 不适合我玩
回复

使用道具 举报

发表于 27-8-2013 11:03 PM | 显示全部楼层
angels1026 发表于 26-8-2013 12:23 AM
那么简单的东西却花了那么多时间来消化... 看来 MCU 不适合我玩

之前你没有学过编程,现在刚开始学习,已经到这地部了。算是尤秀生了。加油!
回复

使用道具 举报

 楼主| 发表于 28-8-2013 12:39 AM | 显示全部楼层
西门庆33 发表于 27-8-2013 11:03 PM
之前你没有学过编程,现在刚开始学习,已经到这地部了。算是尤秀生了。加油!

上两个礼拜手痒痒跑去 TI 公司的网页.. 随便乱填 要求 sample, 今天早上真的送来了.. 有点感动..特地从 US 寄来我的店   
sample 是 tlc5940 于是想要回家研究看看... 谁知道...


那粒东西只有我的尾指的指甲一样大小
很小很小粒
看来明天我要努力填写 form 了.. 要求所以的 sample 来试看下...


回复

使用道具 举报

发表于 29-8-2013 09:56 PM | 显示全部楼层
angels1026 发表于 28-8-2013 12:39 AM
上两个礼拜手痒痒跑去 TI 公司的网页.. 随便乱填 要求 sample, 今天早上真的送来了.. 有点感动..特地从 U ...

你是使用公司名下申请的吗?之前很多马来西亚人溅用了此方便,TI 公司不允许(只限马来西亚)个人申请了。现在开放了吗?


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 25-4-2024 01:01 AM , Processed in 0.082763 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表