<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機匯編語(yǔ)言(四)

51單片機匯編語(yǔ)言(四)

作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò ) 收藏
8.5功能說(shuō)明:

使用4×4矩陣式鍵盤(pán),共有16個(gè)按鍵,通過(guò)掃描方法控制顯示器輸出0~F十六進(jìn)制數。

本文引用地址:http://dyxdggzs.com/article/201611/321012.htm

程序:JP02.ASM

01:ORG 00H ;

02: START: MOV R4,#00H ;

03: L1: MOV R3,#0F7H ;掃描初值(P3.3=0)

04: MOV R1,#00H ;取碼指針 設置初值

05: L2: MOV A,R3 ;開(kāi)始掃描

06: MOV P3,A ;將掃描值輸出至P3

07: MOV A,P3 ;讀入P3值,判斷有無(wú)按下 送出行掃描初

08: MOV R4,A ;存入R4,以判斷是否放開(kāi) 值(P3.3=0)

09: SETB C ;C=1

10: MOV R5,#04H ;掃描P3.4~P3.7

11: L3: RLC A ;將按鍵值左移一位

12: JNC KEY ; 有鍵按下C=0,跳至KEY

13: INC R1 ;C=1沒(méi)鍵按下,指針值加1

14: DJNZ R5,L3 ;4列掃描完畢了? 左移檢測列

15: MOV A,R3 ;掃描值載入

16: SETB C ;C=1

17: RRC A ;掃描下一行

18: MOV R3,A ;存回掃描寄存器

19: JC L2 ;C=1,程序轉到L2處

20: JMP L1 ;C=0則4行已掃描完畢 右移掃描行

21: KEY: ACALL DELAY ;調延時(shí)子程序 消除抖動(dòng)

22: D1: MOV A,P3 ;讀入P3值

23: XRL A,R4 ;與上次讀入值作比較

24: JZ D1 ;A=0,表示按鍵未放

25: MOV A,R1 ;按鍵已放開(kāi),指針載入A 按鍵釋放從

26: ACALL DISP ;調用顯示子程序 TABLE取碼

27: JMP L1 ; 重復掃描

28: DISP: MOV DPTR,#TABLE ;數據指針指到TABLE

29: MOVC A,@A+ DPTR ;至TABLE取碼

30: MOV P0,A ; 輸出

31: RET ; 子程序返回 顯示子程序

32: DELAY: MOV R7, #60 ;

33: MOV R6, #248 ;

34: DLY1: DJNZ R6, $ ;

35: DJNZ R7, DLY1 ; 消除抖動(dòng)

36: RET ; 延時(shí)子程序

37: TABLE: DB 0C0H, 0F9H, 0A4H,0B0H ;

39: DB 99H, 92H, 82H, 0F8H ;

40: DB 80H, 90H, 88H, 83H ;

41: DB 0C6H, 0A1H, 86H, 8EH ; 編碼表

42: END ; 程序結束

中斷

9.1功能說(shuō)明:

單片機P1端口的8個(gè)LED作左移右移,不斷循環(huán)。當按外部中斷INT0開(kāi)關(guān)K1時(shí),循環(huán)停止,轉而使8個(gè)LED閃爍4次。之后,又恢復燈的左右移循環(huán)。

程序:ZD01.ASM

01: ORG 00H ; 起始地址

02: JMP START ;跳到主程序START

03: ORG 03H ;INT0中斷起始地址 規定起

04: JMP EXT0 ;跳到中斷子程序 始地址

05: START:MOV IE, #10000001B ;INT0中斷開(kāi)通

06: MOV IP, #00000001B ;INT0中斷優(yōu)先

07: MOV TCON, #00000000B ;INT0為電平觸發(fā)

08: MOV SP, #70H ;設定堆棧指針 中斷設定

09: LOOP:MOV R0, #8 ; 設置左移位數

10: MOV A , #0FEH ; 設置左移初值

11: LOOP1:MOV P1, A ; 輸出至P1

12: ACALL DELAY ; 調延時(shí)子程序

13: RL A ; 左移一位

14: DJNZ R0, LOOP1 ; 判斷移動(dòng)位數 左移

15: MOV R0, #8 ; 設置右移位數

16: LOOP2:RR A ; 右移一位

17: MOV P1, A ; 輸出至P1

18: LCALL DELAY ; 調延時(shí)子程序

19: DJNZ R0, LOOP2 ; 判斷移動(dòng)位數

20: JMP LOOP ; 重設顯示值 右移 左右移

21: EXT0: PUSH ACC ;將A 值壓入堆棧

22: PUSH PSW ;將 PSW值壓入堆棧

23: SETB RS0 ;設定工作寄存器組1 保護

24: CLR RS1 ; 現場(chǎng)

25: MOV R0, #4 ; 設置閃爍次數

26: LOOP3:MOV A, #00H ; A存有P1口欲顯值

27: MOV P1, A ; P1端口燈亮

28: LCALL DELAY ; 調延時(shí)1秒子程序

29: CPL A ;將A的值反相

30: DJNZ R0, LOOP3 ; 判斷閃爍次數 閃爍

31: POP PSW ;從堆棧取回PSW值 恢復

32: POP ACC ;從堆棧取回值 A值 現場(chǎng) 中斷

33: RETI ;返回主程序 子程序

9.4功能說(shuō)明:

開(kāi)始時(shí)P1端口8個(gè)LED燈在閃爍。當按外部中斷INT0開(kāi)關(guān)K1時(shí),使一個(gè)燈左右移3次。當按外部中斷INT1開(kāi)關(guān) K2時(shí),使二個(gè)燈左右移4次。之后, 8個(gè)LED燈恢復閃爍。

程序:ZD02.ASM

01: ORG 00H ; 主程序起始地址

02: JMP START ; 跳到主程序START

03: ORG 03H ; INT0中斷子程序起始地址

04: JMP EXT0 ; 跳至中斷子程序EXT0

05: ORG 13H ; INT1中斷子程序起始地址 地址

06: JMP EXT1 ; 跳至中斷子程序EXT1 設置

07: START:MOV IE, #10000101B ; 中斷開(kāi)通

08: MOV IP, #00000100B ; INT1優(yōu)先中斷

09: MOV TCON, #00000000B ; INT0 、INT1為電平觸發(fā) 中斷

10: MOV SP, #70H ; 設定堆棧在(70 H) 設置

11: MOV A, #00H ; 設初始值

12: LOOP: MOV P1,A ; 使P1閃爍

13: LCALL DELAY ; 調延時(shí)子程序

14: CPL A ; 將A的值反相

15: JMP LOOP ; 重復循環(huán) 閃爍

16: EXT0: PUSH ACC ; 將A 值壓入堆棧

17: PUSH PSW ; 將 PSW值壓入堆棧

18: SETB RS0 ; 保護

19: CLR RS1 ; 設置寄存器組1 現場(chǎng)

20: MOV R3,#03 ; 左右移3次

21: LOOP1:MOV R0, #08 ; 設置左移位數

22: MOV A ,#0FEH ; 設置左移初值

23: LOOP2:MOV P1, A ; 輸出至P1

24: ACALL DELAY ; 調延時(shí)子程序

25: RL A ; 左移一位

26: DJNZ R0, LOOP2 ; 判斷移動(dòng)位數

27: MOV R0,#07 ; 設置右移位數

28: LOOP3:RR A ; 右移一位

29: MOV P1, A ; 輸出至P1

30: LCALL DELAY ; 調延時(shí)子程序

31: DJNZ R0, LOOP3 ; 右移7 位? 左右

32: DJNZ R3,LOOP1 ; 左右移3次?

33: POP PSW ; 從堆棧取回PSW值 恢復 EXT0

34: POP ACC ; 從堆棧取回值 A值 現場(chǎng) 中斷子

35: RETI ; 返回主程序 程序

36: EXT1: PUSH ACC ; 將A值壓入堆棧

37: PUSH PSW ; 將 PSW值壓入堆棧

38: SETB RS1 ; 設工作組2 ,RS1=1 保護

39: CLR RS0 ; RS0=0 現場(chǎng)

40: MOV R3,#04 ;左右移4次

41: LOOP4:MOV R0, #06 ; 設置左移位數

42: MOV A ,#0FCH ; 設置左移初值

43: LOOP5:MOV P1, A ; 輸出至P1

44: ACALL DELAY ; 調延時(shí)子程序

45: RL A ; 左移一位

46: DJNZ R0, LOOP5 ; 判斷移動(dòng)位數

47: MOV R0,#06 ; 設置右移位數

48: LOOP6:RR A ; 右移一位

49: MOV P1, A ; 輸出至P1

50: LCALL DELAY ; 調延時(shí)子程序

51: DJNZ R0, LOOP6 ; 判斷 左右

52: DJNZ R3,LOOP4 ; 左右移4次?

53: POP PSW ; 從堆棧取回PSW值 恢復 EXT1

54: POP ACC ; 從堆棧取回值 A值 現場(chǎng) 中斷子

55: RETI ; 返回主程序 程序

56: DELAY:MOV R5, #20 ; 延時(shí)0.2秒子程序

57: DLY1: MOV R6, #20 ;

58: DLY2: MOV R7, #248 ;

59: DJNZ R7, $ ;

60: DJNZ R6, DLY2 ;

61: DJNZ R5, DLY ; 延時(shí)子

62: RET ; 程序

63: END ; 程序結束



關(guān)鍵詞: 51單片機匯編語(yǔ)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>