史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   (MCS-51)89C52的一些程式問題!? (http://forum.slime.com.tw/thread229535.html)

gjo3x06nk4 2008-05-11 07:58 PM

(MCS-51)89C52的一些程式問題!?
 
http://img237.imageshack.us/img237/320/002no2.jpg


;主程式
;
;
ORG 0000H
AJMP MAIN
;
ORG 0003H ;INT0中斷服務副程式起始處
AJMP INT0_INT
;
ORG 0013H ;INT1中斷服務副程式起始處
AJMP INT1_INT
;
MAIN: MOV SP,#30H
MOV TCON,#00000000B ;設定INT0及INT1為低準為觸發
MOV IP,#00000001B ;INT0設定為高優先權
SETB EA ;致能所有的中斷
SETB EX0 ;起始INT0中斷
SETB INT0 ;將INT0設為輸入端
SETB EX1 ;起始INT1
SETB INT1 ;將INT1設為輸入端
;
MOV A,#00000000B
LOOP: MOV P1,A
ACALL DELAY
CPL A
AJMP LOOP
;
;
;
INT0_INT: PUSH A
PUSH PSW
CLR RS1
SETB RS0
MOV R2,#07
MOV A,#11111100B
LEFT: MOV P1,A
ACALL DELAY
RL A
DJNZ R2,LEFT
POP PSW
POP A
RETI
;
;
;
INT1_INT: PUSH A
PUSH PSW
SETB RS1
CLR RS0
MOV R2,#07
MOV A,#01111111B
RIGHT: MOV P1,A
ACALL DELAY
RR A
DJNZ R2,RIGHT
POP PSW
POP A
RETI
;
;
;
DELAY: MOV R0,#248
DEL1: MOV R1,#200
DEL2: DJNZ R1,DEL2
DJNZ R0,DEL1
RET
;
END

現在我的動作要求為
一個七段顯示器
利用外部中斷INT0,INT1
INT0中斷執行 1 -> 2 -> 3 ->.......-> 9 優先數較低
INT1中斷執行 9 -> 8 -> 7 ->.......-> 1 優先數較高
主程式中斷執行閃爍
因此必須將8個LED燈改為七段顯示器
但程式部分就不太清楚該如何改
試過一些方法及書籍都不得其解
因接觸不深效果有限
煩請高手能舉手之勞幫解
敝人也會繼續試試
多謝幫忙
:on_03:

飛鳥 2008-05-12 12:33 PM

那個七段顯示器,在電路上,要注意一下,如下圖所示
http://sun.cis.scu.edu.tw/~lab/knowledge/led04.jpg

正如上圖說的,七段共有8個接腳,(7個燈+1個共陽極或共陰)
一般是買共陽,對其他的腳輸入0就會亮,如果共陰,輸入1才會亮
電路如下圖(要記得加限流電阻):
http://sun.cis.scu.edu.tw/~lab/knowledge/led03.jpg

如果你要把P1接到7段顯示器
分別把
語法:

P1.0 - a
P1.1 - a
P1.2 - b
P1.3 - c
P1.4 - d
P1.5 - e
P1.6 - f
P1.7 - g

如果你要七段顯示器顯示0,那就是要a,b,c,d,e,f都要亮,所以,你要對P1輸出00000001B
MOV P1,#00000001B;

那要1的話,就是b,c都要亮,其他都是不亮,那你要對P1輸出10011111B
MOV P1,#10011111B;


其他的就看你自己啦
還有更進階的寫法,查表法,就可以用來跑迴圈
可以到GOOGLE找一下
8051+查表法

8051+DPTR

8051+間接定址


所有時間均為台北時間。現在的時間是 09:30 AM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1