正文

【035】一位数码管循环显示多个数字2007-05-05 16:20:00

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

分享到:

;**************************************************************************    ; 标题: 一位数码管循环显示多个数字(汇编)    ; 作者: wentao     http://blog.liuwentao.net    ;                  http://wentao.programfan.com    ; 日期: 2007.2.21    ; 软件: Keil A51 V8.00     ; 芯片: AT89X51    ; 说明: 实验板实测通过,数码管为8位共阳    ; 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!     ;**************************************************************************               org   0000h           ajmp  start            org   0030h   start:  mov   30h,#0       ;30单元为循环控制兼变址            mov   dptr,#table  ;段码表首址    lop:    mov   a,30h        ;30单元中取要显示的值(偏址)            movc  a,@a+dptr    ;取段码表中元素值            mov   p0,a         ;段码送入P0口            mov   p2,#0xfe     ;选通P2.0口的数码管            lcall d500ms       ;延时500ms            inc   30h          ;循环变量(偏址)自加            mov   a,30h        ;检测30h值是否到预定值            cjne  a,#16,lop    ;未显示完全部继续            ajmp  start        ;循环                   d500ms:                    ;延时500ms子程序@12M(500.701ms)            mov  r5, #4        ;1+[1+(1+2*255)*244+2*244]*4+2*4=500701    temp1:  mov  r6, #244      ;1+(1+2*255)*244+2*244    temp2:  mov  r7, #255      ;1+2*255            djnz r7, $            djnz r6, temp2            djnz r5, temp1            ret      table:  db 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8  ;段码表             ;   0    1    2    3    4    5    6    7    对应内容            db 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e            ;   8    9    a    b    c    d    e    f       end  /**************************************************************************   * 标题: 一位数码管循环显示多个数字(C51)   * 作者: wentao     http://blog.liuwentao.net                      http://wentao.programfan.com    * 日期: 2007.2.19   * 软件: Keil C51 V8.02   * 芯片: AT89X51   * 说明: 实验板实测通过,数码管为8位共阳   * 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!    **************************************************************************/      #include <reg51.h>       #define uchar unsigned char       void delay_ms(uchar ms);  // 延时毫秒@12M,ms最大值255       uchar code dis_code[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, //段码表                              // 0    1    2    3    4    5    6    7   //对应内容                               0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};                              // 8    9    a    b    c    d    e    f    void main()    {        uchar i;     // 循环控制变量兼偏移量        P2 = 0xfe;   // 选通P2.0口数码管        while(1)        {            for(i = 0; i < 16; i++)            {                P0 = dis_code[i];   // 段码表中取值送P0口                delay_ms(250);      // 延时500ms                delay_ms(250);            }        }    }    void delay_ms(uchar ms)        // 延时毫秒@12M,ms最大值255    {        uchar i;        while(ms--)            for(i = 0; i < 124; i++);    }

阅读(11292) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册