#include <REG51.H> #define uchar unsigned char #define uint unsigned int uchar code SEG7[10]={0x12,0xb7,0x19,0x91,0xb4,0xd0,0x50,0x97,0x10,0x90}; uchar ACT[4]={0xfe,0xfd,0xfb,0xf7}; uint ms,cnt; /****************************/ void initial(void) { TMOD=0x02; TH0=0xf0; TL0=0xf0; TR0=1; P0=0xff; } /*************************************************/ void main(void) { ms=0;cnt=0; initial(); while(1) { if(TF0==1){cnt++; TF0=0;} if(cnt>=20){cnt=0;ms++;P0=~P0;} if(ms>999)ms=0; P1=SEG7[ms/100]; P2=ACT[0]; P1=SEG7[(ms%100)/10]; P2=ACT[1]; P1=SEG7[ms%10]; P2=ACT[2]; } } 上面的程序是为了做时间显示,至于时间系数先不必管他,我用了P0并在后面的循环里面每隔一毫秒取一下反,目的就是通过示波器看时间对不对,结果发现波形出现了两个周期,就是10毫秒方波延续一会,4点几或者几毫秒延续一会,并且是交替周期性出现这种现象的。我把if(ms>999)这个语句中的ms改的小些就可以,我专门试了一下,可能200以下的数就可以,不会出现周期交替变化的现象了,为什么呢,请高手指教 |