;************************************************************************** ; 标题: 一位数码管循环显示多个数字(汇编) ; 作者: 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++); }

评论