請教單片機(jī)數(shù)碼管顯示程序怎么寫?
BCD2 EQU 30H;初始發(fā)
BCD1 EQU 31H
BCD0 EQU 32H
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV SP,#60H
MOV A,#250 ;送顯示數(shù)
CALL A_BCD ;將顯示數(shù)轉(zhuǎn)換成BCD碼
LOOP: MOV A,BCD0 ;送個位 顯示
MOV B,#5FH
CALL DSPL ;調(diào)用顯示程序
CALL DL2MS ; 延時2ms
MOV A,BCD1;十位
MOV B,#3FH
CALL DSPL
CALL DL2MS
MOV A,BCD2;百位
MOV B,#1FH
CALL DSPL
CALL DL2MS
JMP LOOP
DL2MS: MOV R7,#249
LOP: NOP
NOP
DJNZ R7,LOP
RET
A_BCD: MOV B,#10 ; BCD碼轉(zhuǎn)換子程序
DIV AB
MOV BCD0,B
MOV B,#10
DIV AB
MOV BCD1,B
MOV BCD2,A
RET
DSPL: MOV DPTR,#TABHEX ;顯示子程序
MOVC A,@A+DPTR
MOV P0,A
MOV P2,B
RET
TABHEX: DB 3Fh,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
上樓的是用匯編寫的,其實用C更加簡單,那我就給你發(fā)一個C寫的簡單單個數(shù)碼管顯示(自己好好加油~~)
#include<reg51.h>
#define uchar unsigned char
uchar temp,a;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void main()
{ temp=0;
TMOD=0X10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
P2=0x00;
while(1)
{
if(a==20)
{ a=0;
P2=0x01;
if(temp==10)
temp=0;
P0=table[temp++];
}
}
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
a++;
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |