查看單個文章
舊 2012-03-20, 05:43 PM   #1
avgx
註冊會員
榮譽勳章

勳章總數0
UID - 343354
在線等級: 級別:0 | 在線時長:1小時 | 升級還需:4小時
註冊日期: 2010-10-27
文章: 2
精華: 0
現金: 2 金幣
資產: 2 金幣
預設 請問有人會 8051 嗎?? 請幫忙看看 程式 謝謝。

共陰極 7段顯示器 跑馬燈

問題 是 asm 我不會 移動 TABLE 的 index

ORG 0000H
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

MOV DPTR,#TABLE //這是 把table
MOV P1,#7
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY

-------------------------------------------------

#include<AT89X52.h>
#include<INTRINS.h>

code unsigned char table[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
};

void delayms(unsigned int time);
main()

{
while(1)
{
unsigned int t;
unsigned int m;
unsigned char y;
unsigned char x;

for (x=0; x<2;x++)
for (y=0; y<8;y++)
{
P1=y;
P2=table[8*x+y];
delayms(30);
}
}
}

C的話,寫出來了

問題1 請問 asm 怎麼 移動 DPTR(據說 這是 pointer)

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

MOV DPTR,#TABLE //這是 把table
MOV P1,#7
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY

這樣 會在 最右邊的顯示器 顯示 0(3FH) ,請問 怎麼樣令它 繼續 往下顯示
也就是說 顯示1 (06H)
請用程式碼 表達 謝謝


第2個問題

ORG 0000H
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH (第一個)
DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,3FH (第二個)

MOV DPTR,#TABLE //這是 把table
MOV P1,#7
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY

若我 第1次 要顯示 8個分別對應 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH
第2次 要顯示 8個分別對應 06H,5BH,4FH,66H,6DH,7DH,07H,7FH,3FH

請問該怎麼做????

謝謝指導
avgx 目前離線  
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖