2008年7月14日 星期一

微處理機C程式範例--16x16矩陣型LED動態右移顯示"歡迎光臨"

使用的板子是洋天科技的 8051及AVR綜合實驗板,因所附的16x16矩陣型LED範例程式僅有ASM版本,且不是跑馬燈右移方式,現我將其改寫成跑馬燈動態右移顯示"歡迎光臨"C語言版本,執行畫面:




程式碼如下:


/*Modified by YiHua, Chiang.
;  Reference: 8051 單晶片C語言設計實務 楊明豐
********************************************/
#include "REGX51.h" 
 /*含8051所有暫存器宣告 */
#include "lcd16x16.h"


void DelayX10ms(int);     /* 延遲函數原型宣告 */
char count=4;             /* 動態掃描速度控制 */
char ScanLine=0;          /* 掃描信號 */
char offset=0;
char i=0;                 /* 行指標 */
char j;                   /* 列指標 */
int ptr1 =0;


void ShiftLeft(void);     /* 左移函數原型宣告 */
void main()               /* 主程式 */
{
    char i;
    IE=0x82;            /* 致能計時器0中斷 */
    TMOD=0x02;          /* 設定計時器0工作於模式2 */
    TH0=(256-250);      /* 計時器0中斷時間為250us */
    TL0=(256-250);
    TR0=1;              /* 啟動計時器0 */
    while(1)
    {
        for( i=0; i         {
            DelayX10ms(50);
            ShiftLeft();
        }
        k += COLS;        /* 指向字型緩衝區下一個中文字 */
        if(k==COLS*4)     /* 已取至最後一個字型? */
        {
          ptr1 = 0;
          k=0;
        }
    }
} /* main */
void ShiftLeft(void)    /* 左移函數:如11-3節說明 */
{
      TR0=0;            /* 關閉計時器0 */
      ptr1 = ptr1 + 1;
      TR0=1;            /* 啟動計時器0 */
} /* ShiftLeft */
void T0_int(void) interrupt  1    /* 矩陣型LED動態掃描 */
{
  int x;
  if(--count==0)          /* 已經過1ms? (1ms=count250us) */
  {
    count=4;              /* 重設count =4 */
    j=0;
    x = ptr1+i;
    P0=pattern[ x ][j++];   /* 取出第一位元組資料 */


    x = ptr1 + i++;
    P2=pattern[ x ][j];     /* 取出第二位元組資料 */


    P1=ScanLine;        /* 輸出掃描信號 */
    ScanLine++;         /* 掃描下一行 */
    if(ScanLine==COLS)  /* 已掃描至最後一行? */
    {
        ScanLine=0;     /* 重新掃描第一行 */
        i=0;
    }
  }
} /* T0_int */
void DelayX10ms(int times)      /* 延遲函數:左移速度控制 */
{
    int i,j;
    for(i=0;i       for(j=0;j<1500;j++)       /* 延遲10ms,視CPU速度而異 */
         ;
} /* DelayX10ms */


8 則留言:

  1. 可以請問一下  16X16矩陣的32腳 怎麼接  1-16接電晶體 17-32接什麼?
    我做出來結果只跑出一排而已 REST鍵 按下去沒反應 可以讓我參考一下妳的電路圖嗎?
    還是說你可以幫我檢查一下我的線路

    回覆刪除
  2. OK^^,可以的話您將您的電路圖mail 給我,我利用時間幫您看一下,我的MAIL: microcyh@seed.net.tw

    回覆刪除
  3. 我搞了快一個月 結果把重置鈕的接線 從 原本的
    直的接 就是 上下按下去才通 不按不通
    改成
    斜著接 就正常動作..... 是為什麼 

    回覆刪除
  4. 有沒有可以幫你算出顯示文字16進制碼的軟體 請問您有做專題嗎?
     
    可以借我參考一下嗎?

    回覆刪除
  5. 直的接? 斜著接?  有電路圖嗎?......耶........沒電路圖,恕我愚鈍,我實在臆測不出你的問題>_<
    我的EMAIL在我的BLOG上就有了: microcyh@seed.net.tw,  PS:我有空才會回喔^^

    回覆刪除
  6. 我有帶學生做專題,但我自己沒做專題耶。
    但我也有幫公司作專案,也有幫公司寫Project喔。
    你說的顯示文字16進制碼是 10進制數字轉換成 16進制的功能嗎?

    回覆刪除
  7. 請問一下,想要顯示 16*16 的字型,要怎麼接線呢?? (我也是使用跟你一樣的實驗板),還有 led16*16 指的是 自行編碼嗎??

    回覆刪除
  8. 老師你好,我自已用了一個16*16的矩陣,目前有點個問題,就是中文字我該怎麼轉碼才能讓他顯示,我用了老半天,顯示出來的都亂掉。

    回覆刪除

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...