#include<reg51.h> #inclede<intrins.h> #define uchar unsigned char #define uint unsigned int uchar tape[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; sbit duan=P2^6; sbit wei=P2^7; uchar a,qian,bai,shi,ge; uint num; void display(); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; num=0; while(1) { if(a==20) { a=0; num++; if(num==9999) num=0; qian=num/1000; bai=num%1000/100; shi=num%100/10; ge=num%10; display(); } } } void display() { P0=0xf7; wei=1; wei=0; duan=1; P0=tape[ge]; duan=0; delay(6); P0=0xfb; wei=1; wei=0; duan=1; P0=tape[shi]; duan=0; delay(6); P0=0xfd; wei=1; wei=0; duan=1; P0=tape[bai]; duan=0; delay(6); P0=0xfe; wei=1; wei=0; duan=1; P0=tape[qian]; duan=0; delay(6); } void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++; } 为什么数码管上只有千位是保持不动。其他位都是闪烁的啊,怎样才能保证其他位也不闪烁啊
#include<reg51.h> #define uchar unsigned char #define uint unsigned int uchar tape[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; sbit duan=P2^6; sbit wei=P2^7; uchar a,qian,bai,shi,ge; uint num; void display(uchar qian,uchar bai,uchar shi,uchar ge); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } main() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; num=0; while(1) { if(a==20) { a=0; num++; if(num==9999) num=0; qian=num/1000; bai=num%1000/100; shi=num%100/10; ge=num%10; } display(qian,bai,shi,ge); } } void display(uchar qian,uchar bai,uchar shi,uchar ge) { P0=0xf7; wei=1; wei=0; duan=1; P0=tape[ge]; duan=0; delay(6); P0=0xfb; wei=1; wei=0; duan=1; P0=tape[shi]; duan=0; delay(6); P0=0xfd; wei=1; wei=0; duan=1; P0=tape[bai]; duan=0; delay(6); P0=0xfe; wei=1; wei=0; duan=1; P0=tape[qian]; duan=0; delay(6); } void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++; }
因板子型号不同,没有进行具体测试,改程序的问题主要是display();函数的位置不对,已经帮你调整好了,你试试应该没问题了
ORG 0000H
LJMP MIAN
ORG 000BH
LJMP INT_T0
ORG 0030H
MIAN: MOV DPTR,#TABLE
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
MOV R1,#200
MOV R2,#20
MOV R3,#0
MOV R4,#0
MOV R5,#0
MOV R6,#0
MOV TMOD,#02H
MOV TH0,#06H
MOV TL0,#00H
SETB EA
SETB ET0
SETB TR0
LOOP:
MOV P2,#07H
MOV A,R3
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY10ms
MOV P2,#06H
MOV A,R4
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY10ms
MOV P2,#05H
MOV A,R5
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY10ms
MOV P2,#04H
MOV A,R6
MOVC A,@A+DPTR
MOV P0,A
LCALL DELAY10ms
LJMP LOOP
INT_T0: DJNZ R1,QUIT
MOV R1,#200
DJNZ R2,QUIT
MOV R2,#20
INC R3
CJNE R3,#10,QUIT
MOV R3,#0
INC R4
CJNE R4,#10,QUIT
MOV R4,#0
INC R5
CJNE R5,#10,QUIT
MOV R5,#0
INC R6
CJNE R6,#10,QUIT
MOV R6,#0
QUIT:RETI
DELAY10ms:
MOV 40H,#10
LOOP1: MOV 41H,#200
DJNZ 41,$
DJNZ 40H,LOOP1
RET
END
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |