AT89C51单片机实验 LED 0-9999循环显示的程序图

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-04
AT89C51单片机实验 LED 0-9循环显示的程序图(最好有程序设计流程图)

A_BIT EQU 20H



;个位数存放处
B_BIT EQU 21H



;十位数存放处
TEMP EQU 22H



;计数器寄存处
STAR: MOV TEMP,#0


;初始化计数器
STLOP: ACALL DISPLAY

;

INC TEMP

MOV A,TEMP

CJNE A,#100,NEXT

;等于100重来

MOV TEMP,#0

NEXT: LJMP STLOP

;显示子程序
DISPLAY: MOV A,TEMP


MOV B,#10
DIV AB
MOV B_BIT,A
MOV A_BIT,B
MOV DPTR,#NUMTAB
MOV R0,#4

DPL1:
MOV R1,#5
DPLOP: MOV A,A_BIT

MOVC A,@A+DPTR
MOV P0,A
CLR P2.7
ACALL D1MS
SETB P2.7
MOV A,B_BIT
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
ACALL D1MS
SETB P2.6
DJNZ R1,DPLOP
DJNZ R0,DPL1
RET
D1MS:
MOV R7,#50
D1: MOV R6,#20
D2: DJNZ R6,$

DJNZ R7,D1

RET

NUMTAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;013456789字形码

END
这是两位从0到99的,你参考下。

哈哈,帮你搞定了,不知道你怎么连线的,下面是的是用AT89S51单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地的C语言源程序:#include unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};unsigned char dispcount; void delay1s(void){ unsigned char p,i,j,k; for(p=5;p>0;p--) for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--);} void main(void){ while(1) { for(dispcount=0;dispcount<10;dispcount++) { P0=table[dispcount]; delay1s(); } }}

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

uint t1oc=20;   //20*50000us=1s

uint count;

uchar tp[4];

//数码管显示代码

unsigned char code tab[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,

0x40,0x80}; 

//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  16  17  

//0 1 2 3 4 5 6 7 8 9  A  B  C  D  E  F   -   .   

unsigned char code tab_w[]={

0x7F,0xBF,0xDF,0xEF};//位选择代码 从右到左

void delay1ms(unsigned int count)  //延时1ms

{

 unsigned char j;

 for(;count>0;count--)

 for(j=0;j<120;j++);

}

void display(unsigned char num,unsigned char wei)

{

 P2=tab_w[wei];

 P3=tab[num];

 delay1ms(2);

 P3=0x00; 

}

//定时器0     50000us  12MHz

void initTimer(void)

{

 TMOD=0x1;

 TH0=0x3c;

 TL0=0xb0;

}

//定时器0    定时中断

void timer0(void) interrupt 1

{

 TH0=0x3c;

 TL0=0xb0; 

 t1oc--;

  if(t1oc==0)

 {

  t1oc=20; //20*50000us=1s

  count++;

  if(count>9999)

  {

     count=0;

  }

  tp[3]=count/1000;

  tp[2]=count%1000/100;

  tp[1]=count%100/10;

  tp[0]=count%10;

 }

}

void main()

{  

 initTimer();

 TR0=1;

 ET0=1;

 EA=1;

 while(1)

 {

  display(tp[0],0);

  display(tp[1],1);

  display(tp[2],2);

  display(tp[3],3);

 }

}



void display(unsigned char num,unsigned char wei)
{
P2=tab_w[wei];
P3=tab[num];
delay1ms(2);
P3=0x00;
}

用什么显示的,液晶?数码管?用什么程序写,C51? 汇编?