#include "8052.h" /*-----------------------------------------------------------------*\ * 禮拜二實驗三進階題 * * 主字元是 LOVE * * 一開始顯示 L 慢慢向右移動 * * 同時 O 慢慢出現 * * 等 O 到正中央時變成慢慢往上移動 * * 同時 V 慢慢出現 * * 等 V 到正中央時變成慢慢往左移動 * * 同時 E 慢慢出現 * * 等 E 到正中央時變成慢慢往下移動 * * 同時 L 慢慢出現 * * 回到第一個步驟 繼續周而復始 * \*-----------------------------------------------------------------*/ /*code char word [ ] = { 0xff , 0x00 , 0x00 , 0x00 , 0x00 , 0x41 , 0x41 , 0x7f , 0x41 , 0x41 , 0x00 , 0x00 , 0xff , 0x00 , 0x00 }; // 大字型 */ code char love[]= { 0x00, 0x02, 0x02, 0x3e, 0x00, 0x00, 0x3e, 0x22, 0x3e, 0x00, 0x00, 0x3c, 0x02, 0x3c, 0x00, 0x00, 0x2a, 0x2a, 0x3e, 0x00 }; code char serial [ ] ={ 0x01 , 0x02 , 0x04 , 0x08 , 0x10 }; // display 是要顯示在點矩陣的字 char display[] = {0x00, 0x02, 0x02, 0x3e, 0x00}; // L 的字型 void delay (int t ); void show (); int count = 0, act = 0; int now_display = 0; int mode = 0; // 四種模式 上下左右 show L(0) -> O(1) -> V(2) -> E(3) void main ( ) { int x , i = 4; while (1) { //for ( x = 0;x[0] [x] 表示第幾行字型檔, -> 表示丟過去 * [2]->[1], [3]->[2], [4]->[3] 最後再把 [4] 放進去最新要顯示的那行字型檔即可 */ if (act < 5) { act++; now_display++; // 0~5 display[0] = love[now_display]; display[1] = love[now_display+1]; display[2] = love[now_display+2]; display[3] = love[now_display+3]; display[4] = love[now_display+4]; } else { // act 清空以便下個字計算移動了幾次 act = 0; // 換向上 mode = 1; // 因為向上移動時表示已經移動到下一個字 // 而下一個字的最後一個字元是在自行檔的第 2*5 = 10 個位置 now_display=10; } } else if (count == 400 && mode == 1) { //up count = 0; /* * * 參考附件 png 圖檔說明 * 點矩陣上下移動要 7 個才可以換到下一個字 所以 act < 7 用於上下移動 */ if (act < 7) { act++; display[0] = display[0]<<1 | ((love[now_display]>>(7-act))&0x01); display[1] = display[1]<<1 | ((love[now_display+1]>>(7-act))&0x01); display[2] = display[2]<<1 | ((love[now_display+2]>>(7-act))&0x01); display[3] = display[3]<<1 | ((love[now_display+3]>>(7-act))&0x01); display[4] = display[4]<<1 | ((love[now_display+4]>>(7-act))&0x01); } else { act = 0; mode = 2; now_display = 20; } } else if (count == 400 && mode == 2) { // left count = 0; /* * * 原理跟向右相反 * */ if (act < 5) { act++; now_display--; display[4] = display[3]; display[3] = display[2]; display[2] = display[1]; display[1] = display[0]; display[0] = love[now_display]; } else { now_display = 0; act = 0; mode = 3; } } else if (count == 400 && mode == 3) { // down count = 0; /* * * 原理跟向上相反 參考圖檔 * */ if (act < 7) { act++; display[0] = display[0]>>1 | ((love[now_display]<<(7-act))&0x40); display[1] = display[1]>>1 | ((love[now_display+1]<<(7-act))&0x40); display[2] = display[2]>>1 | ((love[now_display+2]<<(7-act))&0x40); display[3] = display[3]>>1 | ((love[now_display+3]<<(7-act))&0x40); display[4] = display[4]>>1 | ((love[now_display+4]<<(7-act))&0x40); } else { act = 0; mode = 0; } } } } void delay(int t) { int x; for (x=0;x