#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; uchar a,num,t,shi,fen,M1,M2; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //void display(uchar,uchar); void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. { //delay(500);大约延时500ms. uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void T0_time() interrupt 1 { TH0=(65536-50000)/256;//重装初值 TL0=(65536-50000)%256;//重装初值 num++; } void display(uchar miao1,uchar miao2) //显示子函数 { dula=1; P0=table[miao1]; //送段选数据,低、秒 dula=0; P0=0xff; //消影 wela=1; P0=0xdf; wela=0; delay(1); dula=1; P0=table[miao2]; //送段选数据,高、秒 dula=0; P0=0xff; //消影 wela=1; P0=0xef; wela=0; delay(1); } void main() { TMOD=0X01;//设置定时器0为方式1 TH0=(65536-50000)/256;//定时器0装初值,定时50ms TL0=(65536-50000)%256;//定时器0装初值,定时50ms EA=1; //开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0
/*开始为0*/ dula=1; P0=0x3f; dula=0; P0=0xff; wela=1; P0=0xcf; wela=0;
while(1) //扫描、显示数码管 { if(num==20) { num=0; t++; if(t==60) t=0; M2=t/10; M1=t%10; display(M1,M2); } } }
在6位数码管显示,用数码管的最后两位计时,计到59,问题是最后位的数码管很暗而且是一秒闪一下。而我独立显示最后一位数码管就不会这样
|