新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 51单片机汇编语言(三)

51单片机汇编语言(三)

作者: 时间:2016-11-24 来源:网络 收藏
7.2功能说明

用一位数码管循环显示0~9数字,数字变换间隔的时间为1秒。

本文引用地址:https://www.eepw.com.cn/article/201611/321011.htm

程序:SMG2.ASM

01: START: MOV DPTR, #TABLE ; 存表

02: MOV R0, #0 ; 设定初始值

03: LOOP : MOV A, R0

04: MOVC A, @A+DPTR ; 取表代码

05: MOV P0, A ; 送P0输出

06: ACALL DLY1S ; 调延时程序 存表取表

07: INC R0 ; R0值加1

08: CJNE R0, #10 , LOOP ; 不是10,循环

09: JMP START ; 重新开始 判断循环

10: DLY1S: MOV R5, #50 ;

11: D1: MOV R6, #100 ;

12: D2: MOV R7, #100 ;

13: DJNZ R7, $ ;

14: DJNZ R6, D2 ;

15: DJNZ R5, D1 ; 1秒延时

16: RET 子程序

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

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

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

20: DB 0C6H, 0A1H, 86H, 8EH ; 代码表

21: END 程序结束

7.3功能说明

使用两位数码管显示器,利用扫描方式循环显示00~99两位数。

程序:SMG3.ASM

01: START: MOV R0, #0 ;初始化计数器

02: MOV DPTR, #TABLE ;存入查表启始地址

03: LOOP: ACALL DISPLAY ; 调显示子程序

04: INC R0 ; 计数器加1

05: CJNE R0 ,#100, LOOP ; 没到100 循环

06: JMP START ; 到开始处 主程序

07: DISPLAY::MOV A, R0 ;

08: MOV B, #10 ; 16进制换成10进制

09: DIV AB ; A÷B商存A,余数存B

10: MOV R1, A ; R1内存放十位数

11: MOV R2, B ; R2内存放个位数 十进

12: MOV R3, #50 ; 设导通频率50次

13: LOOP1: MOV A, R2 ; 个位数显示

14: ACALL CHANG ; 调显示子程序

15: CLR P2.0 ;开个位显示

16: ACALL DLY10mS ; 调延时10ms程序 个位

17: SETB P2.0 ; 关闭个位显示 显示

18: MOV A, R1 ; 取十位数

19: ACALL CHANG ; 调取表显示子程序

20: CLR P2.1 ; 开十位显示

21: ACALL DLY10mS ; 调延时10ms程序 十位

22: SETB P2.1 ; 关闭十位显示 显示

23: DJNZ R3, LOOP1 ; 100次没完,继续循环 扫描

24: RET ; 子程序

25: CHANG: MOVC A, @A+DPTR ;

26: MOV P0, A ;

27: RET ; 取表子程序

28: DLY10mS:MOV R6, #20

29: D1: MOV R7, #248 ;

30: DJNZ R7, $ ;

31: DJNZ R6, D1 ; 延时10 m.S

32: RET ; 子程序

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

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

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

36: DB 0C6H, 0A1H, 86H, 8EH ; 代码表

37: END ; 程序结束

键盘控制

8.1功能说明:

用八位指拨开关(DIP)作单片机的输入,控制输出端口连接的八只LED发光二极管。如若DIP1开关为 ON(向右拨动)则LED1亮,其它开关作用相同。

程序:SR01.ASM

01: LOOP: MOV A, P3 ; 从P3读入DIP开关值

02: MOV P1, A ; 从P1输出

03: JMP LOOP ; 无穷循环

04: END ; 程序结束

8.2功能说明:

用DIP开关中的低4位作二进制的输入,控制输出端数码管显示器的输出。

程序:SR02.ASM

01: MOV DPTR,#TABLE ; 存表

02: MOV P0, #0FFH ; LED全灭

03: LOOP: MOV A, P3 ; 从P3口读入DIP开关值

04: ANL A, #0FH ; 高4位清0,取低四位

05: ACALL CHANG ; 转成七段显示码

06: MOV P0, A ; 从P0输出

07: JMP LOOP ; 转移LOOP处,循环

08: CHANG: MOVC A,@A+DPTR ; 取码

09: RET ; 返回 转换显示码子程序

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

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

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

13: DB 0C6H, 0A1H, 86H, 8EH ; 显示码表

14: END ; 程序结束

8.3功能说明:

用两个按键开关K1和K2作输入,K1为电源指示灯开关,K2为工作指示灯开关。分别控制电源指示灯(P1.0接的LED)和工作指示灯(P1.7接的LED)的接通和关闭。接通电源时,电源指示灯是在亮的状态。

当按K2时,工作指示灯亮,电源指示灯灭。按K1时,电源指示灯亮,工作指示灯灭。

程序:SR03.ASM

01: START: MOV P1, #11111110B ; P1.0所接LED亮

02: JB P2.5 , $ ; 判断P2.5(K2键)是否为1

03: ON: MOV P1, #01111111B ; P1.7所接LED亮

04: JNB P2.4, START ; 判断P2.4(K1键)是是否为0

05: JMP ON ; 未按K1键,则跳至ON

06: END ; 程序结束

8.4功能说明:

由四个按键开关组成独立式键盘,控制灯左移、右移和闪烁。

程序:JP01.ASM

01: START: MOV P1,#0FFH ;设置输出口初值

02: MOV A,#0FFH ;设置输入方式

03: MOV P2,A ;

04: LOOP: MOV A,P2 ;读入键盘状态

05: CJNE A,#0FFH,LP0 ;有键按下否

06: JMP LOOP ;无键按下等待

07: LP0: ACALL DELAY1 ;调延时去抖动

08: MOV A,P2 ;重读入键盘状态

09: CJNE A,#0FFH,LP1 ;非误读则转

10: JMP LOOP ; 按键查询

11: LP1: JNB P2.4, A1 ;K1键按下转A1

12: JNB P2.5, A2 ;K2键按下转A2

13: JNB P2.6, A4 ;K3键按下转A3

14: JNB P2.7, A4 ;K4键按下转A4 键按下后转

15: JMP START ;无键按下返回 功能处理程序

16: A1: MOV R0, #8 ;设置左移位数

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

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

19: ACALL DELAY ;调延时1秒子程序

20: RL A ;左移一位

21: DJNZ R0, LOOP2 ;判断移动位数 1号功能键

22: JMP START ;返回主程序开始处 处理程序

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

24: MOV A ,#0FCH ;设置右移初值

25: LOOP3: RR A ;右移一位

26: MOV P1, A ;输出至P1

27: ACALL DELAY ;调延时1秒子程序

28: DJNZ R0, LOOP3 ;判断移动位数 2号功能键

29: JMP START ;返回主程序开始处 处理程序

30: A3: MOV R0,#6 ;设置闪烁次数

31: MOV A ,#0F0H ;设置初值

32: LOOP4: MOV P1, A ;输出至P1

33: ACALL DELAY ;调延时1秒子程序

34: CPL A ;反相

35: MOV P1,A ;输出

36: DJNZ R0, LOOP4 ;判断移动位数 3号功能键

37: JMP START ;返回主程序开始处 处理程序

38: A4: MOV R0,#10 ;设置闪烁次数

39: MOV A, #00H ;设置初值

40: LOOP5: MOV P1,A ;输出

41: ACALL DELAY ;调延时子程序

42: CPL A ;反相

43: MOV P1,A ;输出

44: DJNZ R0, LOOP5 ;判断闪烁次数 4号功能键

45: MP START ;返回主程序开始处 处理程序

46: DELAY1: MOV R3, #60 ;消抖延时子程序

47: D2: MOV R4, #248 ;

48: DJNZ R4, $

49: DJNZ R3, D2 消除抖动

50: RET ; 延时子程序

51: DELAY: MOV R5, #50 ;延时1秒子程序

52: DLY1: MOV R6, #100 ;

53: DLY2: MOV R7, #100 ;

54: DJNZ R7, $ ;

55: DJNZ R6, DLY2 ;

56: DJNZ R5, DLY1 ;

57: RET ; 延时子程序

58: END ; 程序结束



关键词: 51单片机汇编语

评论


技术专区

关闭