数码管动态显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数码管动态显示的汇编及C语言
数码管动态显示是我们学习51单片机过程中的第二个必须设计的实验。

1、原理:动态显示主要是利用数码管的循环显示的方法,利用人眼的暂保留
特性,当循环频率较高时,看不到闪烁。

#include <reg52.h>
void delay()
{
unsignedinttt=300;
while(tt--);
}
sbit L1=P3^4; sbit L2=P3^5;
unsigned char code dm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code wm[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
voiddisp_n(unsigned char *p,unsigned char n, unsigned char w)
{
unsigned char i;
for(i=0;i<n;i++)
{
P1=0x00;
L1=1;
P1=dm[*(p+i)];
L1=0;
L2=1;
P1=wm[w+i-1];
L2=0;
delay();
}
}
void main()
{
unsigned char d,m,j,i;
unsigned char smg[]={1,2,3,4,5,6,7,8,9};
while(1)
{
m=1;
for(d=8;d>0;d--)
{
for(j=0;j<=10;j++)
{
for(i=10;i>0;i--)
disp_n(smg,d,m);
}
delay();
m++ ;
}
}
}
二、汇编程序
ORG 0000H
BEG:AJMP START
ORG 0030H
START: MOV SP,#60H WM EQU 31H
MOV WM,#0FEH
CS EQU 32H
MOV CS ,#1
MS EQU 33H
MOV MS,#7 NEXT: MOV A,#250
MOV B ,CS
DIV AB
MOV R2,A
B1: MOV P1,00H
MOV R0,CS
MOV R3,MS
CLR P3.4
CLR P3.5
MOV R1,#0FEH B2: MOV P1,R1
SETB P3.5
CLR P3.5
MOV A,R1
RL A
MOV R1,A
MOV DPTR,#DM
MOV A,R3
MOVC A,@A+DPTR
MOV P1,A
SETB P3.4
LCALL DELAY
MOV P1,#00H
CPL P3.4
INC R3
DJNZ R0,B2
DJNZ R2,B1
INC CS
DJNZ MS, NEXT
WM1 EQU 35H
MOV WM1,#0FEH
CS1 EQU 34H
MOV CS1 ,#8
MS1 EQU 36H
MOV MS1,#0 NEXT1: MOV A,#250
MOV B ,CS1
DIV AB
MOV R2,A
B3: MOV P1,00H
MOV R0,CS1
MOV R3,MS1
CLR P3.4
CLR P3.5
MOV R1,WM1
B4: MOV P1,R1
SETB P3.5
CLR P3.5
MOV A,R1
RL A
MOV R1,A
MOV DPTR,#DM
MOV A,R3
MOVC A,@A+DPTR
MOV P1,A
SETB P3.4
LCALL DELAY
MOV P1,#00H
CPL P3.4
INC R3
DJNZ R0,B4
DJNZ R2,B3
MOV A,WM1
RL A
MOV WM1,A
DJNZ CS1, NEXT1
DELAY : MOV R5,#2
DL2: MOV R6,#200
DL1: NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DJNZ R6,DL1
DJNZ R5,DL2
RET
DM:DB 06H,5bH,4fH,66H,6dH,7dH,07H,7fH,6fH END BEG。

相关文档
最新文档