正文

【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口控制十位数码管)             lcall d_1ms        ;延时1ms作用同上             djnz  r0,d_lop     ;延长每个数(两位)的显示时间             ret      d_1ms:                      ;延时1ms子程序@12M(1.001ms)             mov   r7,#250      ;1+(1+1+2)*250=1001    temp:    nop            nop            djnz  r7,temp             ret      table:  db 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90  ;段码表             ;   0    1    2    3    4    5    6    7    8    9    对应内容       end  /**************************************************************************   * 标题: 两位数码管计数演示(C51)   * 作者: wentao     http://blog.liuwentao.net                      http://wentao.programfan.com   * 日期: 2007.3.2   * 软件: Keil C51 V8.02   * 芯片: AT89X51   * 说明: 实验板实测通过,数码管为8位共阳   * 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!    **************************************************************************/      #include <reg51.h>    #define uchar unsigned char       void delay_ms(uchar ms);  // 延时毫秒@12M,ms最大值255    void display();           // 显示子程序       uchar code dis_code[10] = {0xc0,0xf9,0xa4,0xb0,0x99,  //段码表                              // 0    1    2    3    4      对应内容                               0x92,0x82,0xf8,0x80,0x90};                              // 5    6    7    8    9       uchar data dis_0;        // 个位值    uchar data dis_1;        // 十位值    uchar data count;        // 计数器       void main()    {        count = 0;           // 计数器清零        P2 = 0xff;           // 关所有数码管           while(count != 100)        {            display();       // 调用显示子程序            count++  ;       // 计数器加1                }    }    void display()                // 显示子程序    {        uchar data i = 200;       // 用于延长每个数(两位)的显示时间        dis_1 = count / 10;       // 计数器十位分离出来赋绐dis_1        dis_0 = count % 10;       // 计数器个位分离出来赋绐dis_0        while(i--)                // 直到i减为0        {            P0 = dis_code[dis_0]; // 取个位的段码            P2 = 0x7f;            // 开个位显示(P2.7口控制个位数码管)            delay_ms(1);          // 延时1ms使两位数码管动态显示时能看清            P0 = dis_code[dis_1]; // 取十位的段码            P2 = 0xbf;            // 开十位显示(P2.6口控制十位数码管)            delay_ms(1);          // 延时1ms作用同上        }    }    void delay_ms(uchar ms)       // 延时毫秒@12M,ms最大值255    {        uchar i;        while(ms--)            for(i = 0; i < 124; i++);    }

阅读(14462) | 评论(8)


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

评论

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