您的位置 首页 数字

单片机学习之九:多位数码动态显示

一、 试验现象8个数码管显示多位数9876.5432二、 试验目的掌握多位数码动态显示的原理和编程方法掌握查表指令movc的用法三、 试验任务分析通

  一、 实验现象

  8个数码管显现多位数9876.5432

  二、 实验意图

  把握多位数码动态显现的原理和编程办法

  把握查表指令movc的用法

  三、 实验任务剖析

  经过实验四的剖析咱们知道,各个数码管的段码都是p0口的输出,也便是说,各个数码管输入的段码都是相同的。那么怎样让8个数码管显现不同的数字呢?

  咱们咱们都知道电影的原理,它播映的实际上是一个个独立的画面,只不过因为咱们视觉上的暂留效果,使得咱们感觉画面是接连的。

  多位数码显现也能够选用这个原理,咱们先只让最低位显现2,经过一段延时,再只让次低位显现3,如此类推。只需咱们的延时时刻满足短,就能够使得数码的显现看起来十分的安稳清楚。实验证明这个延时选用1~5ms即可,进程如下图所示。

  

 

  在本例中,因为咱们需求重复的把不同的段码送到P0,把位码送到P2,因而把这两个进程编制成两个子程序,然后重复调用,这样一方面使得程序简化,另一方面使得程序的可读性增强。

  在这两个子程序中,因为咱们要顺次输出不同的段码和位码,假如逐次给P0或许P2赋值,一方面程序的杂乱程度添加,别的一方面会使得程序的灵活性下降。想象一下,假如咱们要改动显现的数字,那么程序改动起来多么费事。

  所以咱们选用如下的办法,以P0口输出段码为例:咱们能够把要显现的段码放在一个表格中,然后每次从这个表格里边取数,送到P0口即可。这样,假如要改动显现的数字,只需求改动表格里边的数就能够拉。

  下面便是依照这个思路编写的程序。

  四、实验程序

  org 0000h

  clr p1.5

  main: mov r7,#0ffh

  mov r6,#0ffh

  loop: lcall play1 ;调用显现段码子程序,具体意义见注释(1)

  lcall play2 ;调用显现位码子程序

  lcall delay ;调用1ms延时程序

  cjne a,#80h,loop ;判别是否显现到最左面的数

  ljmp main

  play1: mov a,r7 ;查表求段码子程序,具体解说可参阅注释

  inc a

  mov r7,a

  mov dptr,#table1

  movc a,@a+dptr

  mov p0,a

  ret

  play2: mov a,r6 ;查表求位码子程序

  inc a

  mov r6,a

  mov dptr,#table2

  movc a,@a+dptr

  mov p2,a

  ret

  table1: db 52h,62h,0e1h,64h ;寄存段码

  db 04h,0eah,40h,60h

  table2: db 01h,02h,04h,08h ;寄存位码

  delay: mov r4,#02h ;延时1ms子程序

  del2: mov r3,#0ffh

  del3: djnz r3,del3

  djnz r4,del2

  ret

  end

  五、注释:

  1、首要看看(1)句子,依据上面的剖析咱们知道,它的意思是调用把段码送到P0口的子程序play1。

  2、剖析play1子程序,依据上面的剖析咱们能够大致知道,它是经过查表的办法,来求的段码的。

  那么表格在哪里?咱们看到标号为table1的句子没有?它便是寄存段码的表格。它把从最低位到最高位的段码顺次的放在这个表格里边。

  在这儿,db也是一个伪指令,它的意思是把后边的数字或许字符(用ASCII代码)存入从标号开端的接连单元里边。也便是说标号table1对应的地址单元里边存的是52h,table+1对应的地址单元里边存的是62h。

  假定table1对应的地址单元是0029h,那么0029h单元里边寄存的是52h,002A单元里边寄存的是62h,如下图所示。那么,怎样从表格中取得咱们要的数呢?过程如下:

  

 

  (1) 首要给a赋值(a)=00h。

  (2) 然后取得table1的地址,如0029h,存入dptr寄存器,即(dptr)=0029h

  (3) 接下来把a的内容和dptr的内容相加相加,即00h+0029h=0029h,这便是表格里边榜首个数的地址啦。

  (4) 然后把a中的数加1,即(a)=01h

  (5) 重复上面的第三步,就能够找到表格中的第二个数62h的地址啦。Play1子程序便是依照这样的办法编写的,咱们参照有关的教材自己剖析吧。

  3、play2子程序是给p2口送位码的子程序,办法和play1相同,这儿就不再赘述了。同理,table2表格中寄存的便是每个数码管的位码了。

  六、课后练习:

  1、学习该程序中呈现的理论知识

  2、编写一个程序,让1个数码管计数,从0到9。一秒种改变一次

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部