您的位置 首页 传感器

51单片机汇编语言(四)

85功能说明:使用4times;4矩阵式键盘,共有16个按键,通过扫描方法控制显示器输出0~F十六进制数。程序:JP02ASM01:ORG00H;02:ST

8.5功用阐明:

运用4×4矩阵式键盘,共有16个按键,经过扫描办法操控显现器输出0~F十六进制数。

程序: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 ;开端扫描

06: MOV P3,A ;将扫描值输出至P3

07: MOV A,P3 ;读入P3值,判别有无按下 送出行扫描初

08: MOV R4,A ;存入R4,以判别是否铺开 值(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没键按下,指针值加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 ;调延时子程序 消除颤动

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

23: XRL A,R4 ;与前次读入值作比较

24: JZ D1 ;A=0,表明按键未放

25: MOV A,R1 ;按键已铺开,指针载入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 ; 消除颤动

36: RET ; 延时子程序

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功用阐明:

单片机P1端口的8个LED作左移右移,不断循环。当按外部中止INT0开关K1时,循环中止,转而使8个LED闪耀4次。之后,又康复灯的左右移循环。

程序:ZD01.ASM

01: ORG 00H ; 开始地址

02: JMP START ;跳到主程序START

03: ORG 03H ;INT0中止开始地址 规则起

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

05: START:MOV IE, #10000001B ;INT0中止注册

06: MOV IP, #00000001B ;INT0中止优先

07: MOV TCON, #00000000B ;INT0为电平触发

08: MOV SP, #70H ;设定仓库指针 中止设定

09: LOOP:MOV R0, #8 ; 设置左移位数

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

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

12: ACALL DELAY ; 调延时子程序

13: RL A ; 左移一位

14: DJNZ R0, LOOP1 ; 判别移动位数 左移

15: MOV R0, #8 ; 设置右移位数

16: LOOP2:RR A ; 右移一位

17: MOV P1, A ; 输出至P1

18: LCALL DELAY ; 调延时子程序

19: DJNZ R0, LOOP2 ; 判别移动位数

20: JMP LOOP ; 重设显现值 右移 左右移

21: EXT0: PUSH ACC ;将A 值压入仓库

22: PUSH PSW ;将 PSW值压入仓库

23: SETB RS0 ;设定作业寄存器组1 维护

24: CLR RS1 现场

25: MOV R0, #4 ; 设置闪耀次数

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

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

28: LCALL DELAY ; 调延时1秒子程序

29: CPL A ;将A的值反相

30: DJNZ R0, LOOP3 ; 判别闪耀次数 闪耀

31: POP PSW ;从仓库取回PSW值 康复

32: POP ACC ;从仓库取回值 A值 现场 中止

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

9.4功用阐明:

开端时P1端口8个LED灯在闪耀。当按外部中止INT0开关K1时,使一个灯左右移3次。当按外部中止INT1开关 K2时,使二个灯左右移4次。之后, 8个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 ; 中止注册

08: MOV IP, #00000100B ; INT1优先中止

09: MOV TCON, #00000000B ; INT0 、INT1为电平触发 中止

10: MOV SP, #70H ; 设定仓库在(70 H) 设置

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

12: LOOP: MOV P1,A ; 使P1闪耀

13: LCALL DELAY ; 调延时子程序

14: CPL A ; 将A的值反相

15: JMP LOOP ; 重复循环 闪耀

16: EXT0: PUSH ACC ; 将A 值压入仓库

17: PUSH PSW ; 将 PSW值压入仓库

18: SETB RS0 ; 维护

19: CLR RS1 ; 设置寄存器组1 现场

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

21: LOOP1:MOV R0, #08 ; 设置左移位数

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

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

24: ACALL DELAY ; 调延时子程序

25: RL A ; 左移一位

26: DJNZ R0, LOOP2 ; 判别移动位数

27: MOV R0,#07 ; 设置右移位数

28: LOOP3:RR A ; 右移一位

29: MOV P1, A ; 输出至P1

30: LCALL DELAY ; 调延时子程序

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

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

33: POP PSW ; 从仓库取回PSW值 康复 EXT0

34: POP ACC ; 从仓库取回值 A值 现场 中止子

35: RETI ; 回来主程序 程序

36: EXT1: PUSH ACC ; 将A值压入仓库

37: PUSH PSW ; 将 PSW值压入仓库

38: SETB RS1 ; 设作业组2 ,RS1=1 维护

39: CLR RS0 ; RS0=0 现场

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

41: LOOP4:MOV R0, #06 ; 设置左移位数

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

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

44: ACALL DELAY ; 调延时子程序

45: RL A ; 左移一位

46: DJNZ R0, LOOP5 ; 判别移动位数

47: MOV R0,#06 ; 设置右移位数

48: LOOP6:RR A ; 右移一位

49: MOV P1, A ; 输出至P1

50: LCALL DELAY ; 调延时子程序

51: DJNZ R0, LOOP6 ; 判别 左右

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

53: POP PSW ; 从仓库取回PSW值 康复 EXT1

54: POP ACC ; 从仓库取回值 A值 现场 中止子

55: RETI ; 回来主程序 程序

56: DELAY:MOV R5, #20 ; 延时0.2秒子程序

57: DLY1: MOV R6, #20 ;

58: DLY2: MOV R7, #248 ;

59: DJNZ R7, $ ;

60: DJNZ R6, DLY2 ;

61: DJNZ R5, DLY ; 延时子

62: RET ; 程序

63: END ; 程序完毕

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/260646.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部