×
单片机 > 单片机程序设计 > 详情

数码管显示 0-9999计数器

发布时间:2020-08-27 发布时间:
|

;===========================================
四位显示器,是可以显示0000~9999的,但是在设计工程实际的产品时,前三个0,是不应该显示的。
一个成熟的程序,都应该有消除无效0的程序段。
消除无效0,其实就是用“空白”的代码来代替“0”。
在程序中,大家都知道有个七段码表,一般是把0123...的七段码依次排列在里面,那么第0~15个,通常就是0~F的七段码。
如果把“空白”七段码FFH,排在第16个位置,那么“空白”的代码就是16。
消除无效0的程序,应该从高位到低位(千位、百位、十位)依次判断,个位的0,是应该显示的,则不用判断。
某一位是0,就替换为16,如果不是0,不仅不用替换,还要停止判断后面其它的位。
比如:
千位是0:替换成16;
百位不是0:不用改,正常显示百位;
十位:无论是不是0,都应该正常显示,不用判断了。
做而论道看过不少大学的教材和参考书,都没有看到消除无效0的程序(也许,还是没有看全)。
呵呵,这大概就是“教学”和“工程”的区别吧。
;===========================================
下面做而论道把自己编写的“消除无效0的程序”公布出来,希望能够抛砖引玉。
消除无效0,话是说了很多,可是做而论道编写的程序,都是很简练的,看了不要失望。
程序如下:
;
      ORG  0000H
      LJMP MAIN
      ORG  0030H
MAIN:
      MOV  70H, #0         ;显示缓冲区.
      MOV  71H, #0
      MOV  72H, #0
      MOV  73H, #0
      MOV  74H, #00H       ;计数单元.
      MOV  75H, #80H       ;都是 BCD 码.
;-------------------------------
M_LOOP: 
      LCALL DISP
      JNB   P3.2, JIA_YI
      JNB   P3.3, QING_L
      AJMP  M_LOOP
;-------------------------------
JIA_YI:
      LCALL DISP
      JB    P3.2, M_LOOP
      MOV   A,  75H
      ADD   A,  #1
      DA    A
      MOV   75H, A
      MOV   A,  74H
      ADDC  A,  #0
      DA    A
      MOV   74H, A
J_L:
      LCALL DISP
      JNB   P3.2, J_L
      AJMP  M_LOOP
;-------------------------------
QING_L:
      LCALL DISP
      JB    P3.3, M_LOOP
      MOV   74H, #0
      MOV   75H, #0
      AJMP  M_LOOP
;-------------------------------
DISP:
      MOV  R0, #70H
      MOV  A,  74H
      SWAP A
      ANL  A,  #0FH
      MOV  @R0,  A
      INC  R0
      MOV  A,  74H
      ANL  A,  #0FH
      MOV  @R0,  A
      INC  R0
      MOV  A,  75H
      SWAP A
      ANL  A,  #0FH
      MOV  @R0,  A
      INC  R0
      MOV  A,  75H
      ANL  A,  #0FH
      MOV  @R0,  A
;---------------------------下面是消除无效的0
      MOV  R0, #70H
LL:
      CJNE @R0, #0, QQ
      MOV  @R0, #16
PP:
      INC  R0
      CJNE R0, #73H, LL
QQ:
;---------------------------下面是显示部分
      MOV  DPTR, #D_TAB
      MOV  R2, #254
      MOV  R0, #70H
D_LOOP:
      MOV  A,  @R0
      MOVC A,  @A+DPTR
      MOV  P2, #255       ;消隐.
      MOV  P0, A          ;输出段码.
      MOV  P2, R2         ;输出位码.
      LCALL  DL_1MS
      MOV  A,  R2
      RL   A
      MOV  R2, A
      INC  R0
      CJNE R0, #74H, D_LOOP
      RET
D_TAB: 
      DB  0C0H, 0F9H, 0A4H, 0B0H, 99H,  92H, 82H, 0F8H
      DB   80H,  90H,  88H,  83H, 86H, 0A1H, 86H,  8EH, 0FFH ;FF是空白的代码
;-------------------------------
DL_1MS:
      DJNZ  R7, $
      DJNZ  R7, $
      RET
;-------------------------------
END 



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
基于单片机的医院护理呼叫对讲系统设计