使用的板子是洋天科技的 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=count250us) */
{
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 */
可以請問一下 16X16矩陣的32腳 怎麼接 1-16接電晶體 17-32接什麼?
回覆刪除我做出來結果只跑出一排而已 REST鍵 按下去沒反應 可以讓我參考一下妳的電路圖嗎?
還是說你可以幫我檢查一下我的線路
OK^^,可以的話您將您的電路圖mail 給我,我利用時間幫您看一下,我的MAIL: microcyh@seed.net.tw
回覆刪除我搞了快一個月 結果把重置鈕的接線 從 原本的
回覆刪除直的接 就是 上下按下去才通 不按不通
改成
斜著接 就正常動作..... 是為什麼
有沒有可以幫你算出顯示文字16進制碼的軟體 請問您有做專題嗎?
回覆刪除可以借我參考一下嗎?
直的接? 斜著接? 有電路圖嗎?......耶........沒電路圖,恕我愚鈍,我實在臆測不出你的問題>_<
回覆刪除我的EMAIL在我的BLOG上就有了: microcyh@seed.net.tw, PS:我有空才會回喔^^
我有帶學生做專題,但我自己沒做專題耶。
回覆刪除但我也有幫公司作專案,也有幫公司寫Project喔。
你說的顯示文字16進制碼是 10進制數字轉換成 16進制的功能嗎?
請問一下,想要顯示 16*16 的字型,要怎麼接線呢?? (我也是使用跟你一樣的實驗板),還有 led16*16 指的是 自行編碼嗎??
回覆刪除老師你好,我自已用了一個16*16的矩陣,目前有點個問題,就是中文字我該怎麼轉碼才能讓他顯示,我用了老半天,顯示出來的都亂掉。
回覆刪除