All pastes #994407 Raw Edit

Mine

public c v1 · immutable
#994407 ·published 2008-04-23 11:52 UTC
rendered paste body
#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<i;x++)        //   show(x);        show(); // s has no effect    }}void show () {    int x,y;    for ( x=0;x<100;x++)        for ( y=0;y<5;y++) {            P3=serial[y];            P1 = display[y]^0xff;            delay(100);            count++;            if (count == 400 && mode == 0) { // right                count = 0;                /*                 * 因為 5*7 點矩陣左右移動 5 個字就可以換到下一個字。                 * 所以 act < 5 用於計算左右移動                 * 左右移動的原理就是直接向左或向右傳遞字型檔                 * eg. 一開始向右 就是 把 [1]->[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<t;x++)        ;}