AT89C51单片机实验 LED 0-9999循环显示的程序图
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? 汇编?