51c语言数码管编程,51单片机的数码管循环显示编程实例

要求在数码管上循环显示数字 1~5。

296d34bbc5dc9aefeb85ac342e342e25.png

范例分析:

1.1硬件分析

数码管采用共阳极结构。

1.2软件设计

设计中要求循环显示1~5,很显然应采用循环的方法来实现,最简单的方法是将1~5的段码依次由p0口送出。

准备程序

0baa0bdf2dd65e8fc6991b54ecd34566.png

2、控制转移类指令的特点及使用

(1)长转移指令

ljmp addr16

功能:长距离无条件转移指令

说明:三字节指令,它直接将指令中的16位常数装入pc,使程序无条件转移到指定的地址处执行。目标语句可以是程序存储器64kb空间的任何地方。

(2)绝对转移指令

ajmp addr11

例: 4002h ajmp mm

……

4600h mm: mov a,#00h

注意:目标语句必须和当前语句同页。在51中,64kb程序存储器分成32页,每页2kb(7ffh)。

(3)短跳转指令

sjmp 目标语句(rel)

例: 4060h sjmp loop

……

4090h loop:mov a,#0ffh

……

注意:短跳转的目标语句地址必须在当前语句向前127(7fh)字节,向后128(80h)字节,否则在进行程序编译时会出错。

(4)变址寻址转移指令

jmp @a+dptr

该指令主要用于多分支的跳转程序设计。跳转的目标地址是累加器a和数据指针dptr之和,它可以是64kb存储空间的任何地方。

例 根据标志单元r2中的内容,分别转各个处理程序。

程序如下:

pj1: mov dptr ,#tab1

clr c

mov a,r2

add a,r2 ;(r2) ×2←a

jnc nadd

nc dph ;(r2)×2>;256时,16位数据指针高8位加1

nadd:jmp @a+dptr

tab1:ljmp prg0 ;转处理程序0的首地址

ljmp rrg1

ljmp rrg n

(5)减1条件转移指令组

djnz rn,目标地址(rel);如果(rn)-1≠0,则程序跳转到目标语句,否则顺序执行下一条语句。

djnz direct,目标地址(rel);如果(direct)-1≠0,则程序跳转到目标语句,否则顺序执行下一条语句。

例 将8031内部ram的40h~4fh单元置初值a0h~afh。程序为:

start:mov ro,#40h ;ro赋值,指向数据单元

mov r2,#10h ;r2赋值,为传送字节数,十六进制数

mov a,#0a0h ;给a赋值

loop: mov @ro,a ;开始传送

inc,ro ;修改地址指针,准备传下一数地址

inc a ;修改传送数据值

djnz r2,loop ;如果未传送完,则继续循环传送

ret ;当r2的值减为0时,则传送结束

3、延时程序的设计和延时时间的计算方法

延时程序是一种应用较为广泛的小程序,一般采用多条语句循环执行来实现延时。

例1:设计一延时程序,延时时间为1ms(fosc=12mhz)。

例2:设计一延时250ms的程序

已有上例所举延时1ms子程序,调用250次,即得延时250ms子程序

delay2:mov r3,#fah

del3:acall delay1

del2: nop

nop

djnz r3,del3

ret

本段程序延时的时间为:

1+(2+993+2)250+2=249253us

误差不到1ms

思考:如何设计延时1s程序?

4、子程序的设计方法

4.1子程序:在程序中反复多次执行的程序段,可编写为子程序,在使用时通过主程序调用就可以使用它。这样不但可以减少编程工作量,也缩短了程序的长度。

4.2子程序的使用:

(1)子程序调用:

指令:acall ××× ;绝对调用,2kb范围

lcall ××× ;长调用,64kb范围

(2)子程序返回:

指令:ret ;子程序返回指令

reti ;中断子程序返回指令

org 2000h

main: clr p3.2

mov p0,#0f9h

lcall del

mov p0,#0a4h

lcall del

mov p0,#0b0h

lcall del

sjmp main

del: mov r7,#10

del1: mov r6,#123

…………

djnz r7,del1

ret

end

5、循环程序设计的基本方法

循环程序:在程序中需要反复执行的程序段,为了避免在程序中多次的编写,可以通过利用条件转移或无条件转移指令来控制程序的执行。结构流程图一般如下图所示:

f1ab2848b1769342236c90711a300b99.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值