ORG 0000H
START:MOV DPTR,#TAB
ACALL SCAN1
AJMP START
SCAN1:MOV R5,#00H
MOV R4,#16
MOV R0,#00
MOV R1,#16
LOOP:MOV P2,#00H
MOV P3,#00H
MOV A,R0
MOVC A,@A+DPTR
MOV P2,A
INC R0
MOV A,R1
MOVC A,@A+DPTR
MOV P3,A
INC R1
MOV P1,R5
ACALL DELAY
MOV P2,#00H
MOV P3,#00H
MOV A,R5
INC A
MOV R5,A
DJNZ R4,LOOP
RET
DELAY:MOV R6,#5
D1:MOV R7,#100
D2:DJNZ R7,D2
DJNZ R6,D1
RET
TAB:DB 44H,28H,10H,2DH,0C3H,04H,24H,24H,25H,0FEH,24H,2CH,14H,64H,04H,00H
DB 20H,42H,81H,06H,0F8H,20H,40H,0FFH,92H,92H,92H,92H,92H,0FFH,00H,00H
END
可左移和静态显示,程序如下:
#include<reg51.h>
sbit R=P2^0;
sbit CLK=P2^1;
sbit STB=P2^2;
char code table[]={0x01,0x00,0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,0x00,0x00,0xFF,0xFE,0x02,0x00,
0x04,0x08,0x0F,0xFC,0x18,0x08,0x28,0x08,0x48,0x08,0x08,0x08,0x0F,0xF8,0x08,0x08};
void delay(int z)
{
int x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void WriteByte(char dat)
{
char i;
for(i=0;i<8;i++)
{
dat=dat>>1;
R=CY;
CLK=0;
CLK=1;
}
}
void main()
{
int num;
while(1)
{
for(num=0;num<16;num++)
{
WriteByte(table[2*num+1]);
WriteByte(table[2*num]);
P1=num;
STB=1;
STB=0;
delay(2);
}
}
}
哪块不懂问我!1540624329