//使用 AT89c51 单片机控制四个数码管动态显示 0—9999 ,12MHz#include〈reg51。h〉void jiayi();//加 1 函数void chufa();//除法函数void xianshi();//显示函数void delay();//延时函数sbit P2_0=P2^0;//个位位码sbit P2_1=P2^1;//十位位码sbit P2_2=P2^2;//百位位码sbit P2_3=P2^3;//千位位码unsigned char qianwei,baiwei,shiwei,gewei;unsigned int count=0;unsigned char code dis[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极 0-9void main(){ while(1) { jiayi(); chufa(); xianshi(); } }void chufa()//将数字的各个位拆开{ qianwei=count/1000;//千位数 baiwei=count%1000/100; //百位数 shiwei=count%100/10; //十位数 gewei=count%10; //个位数}void jiayi(){ count=count+1; if(count==10000) count=0;} void delay()//延时{ unsigned int i,j; for(i=0;i<10;i++) {for(j=0;j<200;j++); }}void xianshi()//显示当前数值{ P2_0=1; //显示个位 P1=dis[gewei]; delay(); P2_0=0; P2_1=1;//显示十位 P1=dis[shiwei]; delay(); P2_1=0; P2_2=1; //显示百位 P1=dis[baiwei]; delay(); P2_2=0; P2_3=1; //显示千位 P1=dis[qianwei]; delay(); P2_3=0;}