正文

【038】两位数码管计数演示2007-05-05 16:24:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/25592.html

分享到:

  • ;**************************************************************************   
  • ; 标题: 两位数码管计数演示(汇编)   
  • ; 作者: wentao     http://blog.liuwentao.net   
  • ;                  http://wentao.programfan.com   
  • ; 日期: 2007.3.2   
  • ; 软件: Keil A51 V8.00    
  • ; 芯片: AT89X51   
  • ; 说明: 实验板实测通过,数码管为8位共阳   
  • ; 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!    
  • ;**************************************************************************   
  •   
  • dis_0 equ 30h        ;30单元存储个位值   
  • dis_1 equ 31h        ;31单元存储十位值   
  • count equ 32h        ;32单元为计数器   
  •   
  •          org   0000h  
  •          ajmp  start   
  •          org   0030h  
  • start:   mov   count,#0     ;计数器清0   
  •          mov   p2,#0xff     ;关所有数码管   
  • lop:     lcall display      ;调用显示子程序   
  •          inc   count        ;计数器加1   
  •          mov   a,count      ;计数器值送入a   
  •          cjne  a,#100,lop   ;未计到100继续计数   
  •          ajmp  start        ;计到100则重新开始循环   
  •   
  • display:                    ;显示子程序   
  •          mov   a,count      ;计数器值送入a(被除数)   
  •          mov   b,#10        ;除数10送入b   
  •          div   ab           ;a除以b   
  •          mov   dis_0,b      ;余数b(个位值)送入个位存储单元   
  •          mov   dis_1,a      ;商a(十位值)送入十位存储单元    
  •                             ;以上是将计数值个位十位分开   
  •                             ;以下是将分开的个位十位分别在两个数码管上显示   
  •          mov   r0,#200      ;用于延长每个数(两位)的显示时间   
  • d_lop:   mov   dptr,#table  ;数码管段码表首址送入dptr   
  •          mov   a,dis_0      ;取个位值   
  •          movc  a,@a+dptr    ;个位数对应的段码送入a中   
  •          mov   p0,a         ;段码送入P0口   
  •          mov   p2,#0x7f     ;开个位显示(P2.7口控制个位数码管)   
  •          lcall d_1ms        ;延时1ms使两位数码管动态显示时能看清   
  •          mov   a,dis_1      ;取十位值   
  •          movc  a,@a+dptr    ;十位数对应的段码送入a中   
  •          mov   p0,a         ;段码送入P0口   
  •          mov   p2,#0xbf     ;开十位显示(P2.6口控制十位数码管) </