|
|
我采用了Arduino UNO Rev3 编程在单数码管上显示了一行字符串。使字符串可以在一个数码管上滚动显示,每个单词之间用'-'字符隔开。视频中字符显示的是"I-LOUE-YOU-YUANBAO",是一个C++程序员的告白。在实现过程中,我编制了字符对应的数码管编码表,可以显示数字:0123456789 和字母:ABCDEFGHIJLNOPQUY 。单个字符停留0.5s时间,间隔字符'-'停留1.5s时间。
具体实现细节请看我上传的视频下列代码,因为Arduino IDE 无法写中文注释的原因,我采用了很poor 的英文写下了注释。
//视频要顺时针旋转90°播放哦。
-
- //////////////////////////////////////////////////////
- // Display symbol in Numerical Tube
- /////////////////////////////////////////////////////
-
- /*
- Establish a simple digital and charactor map
- digital: 0,1,2,3,4,5,6,7,8,9
- character: A,b,C,d,E,F,G,H,I,J,L,n,o,P,q,U,y
- */
-
- char num_tube_char[36] = "-0123456789ABCDEFGHIJLNOPQUY";
- byte num_tube_code[36] = {
- 0b00000010, /* - */
- 0b11111100,0b01100000,0b11011010,0b11110010,
- 0b01100110,0b10110110,0b10111110,0b11100000,
- 0b11111110,0b11110110, /*from 0 to 9*/
- 0b11101110,0b00111110,0b10011100,0b01111010,
- 0b10011110,0b10001110,0b10111101,0b01101110,
- 0b00001100,0b01110000,0b00011100,0b11101100,
- 0b00111010,0b11001110,0b11100110,0b01111100,
- 0b01110110 /*from A to y*/
- };
- const int A_port = 9;
- const int B_port = 8;
- const int C_port = 2;
- const int D_port = 3;
- const int E_port = 4;
- const int F_port = 5;
- const int G_port = 6;
- const int dot_port = 7;
-
- int port[8] = {A_port, B_port, C_port, D_port, E_port, F_port, G_port, dot_port};
-
- void setup()
- {
- pinMode(A_port, OUTPUT);
- pinMode(B_port, OUTPUT);
- pinMode(C_port, OUTPUT);
- pinMode(D_port, OUTPUT);
- pinMode(E_port, OUTPUT);
- pinMode(F_port, OUTPUT);
- pinMode(G_port, OUTPUT);
- pinMode(dot_port, OUTPUT);
- }
- void loop()
- {
- int i =0;
- char word[] = {"I-LOUE-YOU-YUANBAO&"};
- while(word[i])
- {
- Display(word[i++]);
- }
- }
- /* Write in code of charactor and display in numerical tube */
- void WriteIn(byte b)
- {
- byte tmp = 0b00000000;
- int i = 0;
- while(i < 8)
- {
- tmp = b;
- b <<= 1;
- if(b >= tmp)
- {
- digitalWrite(port[i++], HIGH);
- }
- else
- {
- digitalWrite(port[i++], LOW);
- }
- }
- }
-
- void Display(const char ch)
- {
- /*Search Index from Table and find the code of charactor ch*/
- int i = 0;
- for( i = 0; i < 36; i++)
- {
- if(ch == num_tube_char[i])
- {
- WriteIn(num_tube_code[i]);
- if(num_tube_char[i] == '-')
- {
- delay(1500);
- }
- else
- {
- delay(500);
- }
- break;
- }
- }
- if(i == 36)
- {
- for(int i = 0; i < 3; i++)
- {
- WriteIn(0b00000000);
- delay(250);
- WriteIn(0b11111111);
- delay(250);
- }
- }
- }
复制代码 |
|