#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=0;cnt=0; /****************************/ void initial(void) { TMOD=0x0a; TH0=0x90; TL0=0x90; IE=0x00; TR0=1; } /**************************************************/ void delay(uint k) { uint data i,j; for(i=0;i<k;i++) { for(j=0;j<121;j++){;} } } /****************************/ void main(void) { uchar i; initial(); for(;;) { while(!TF0); TF0=0; if(++cnt>=9){cnt=0;ms++;} for(i=0;i<100;i++) {if(ms>99) ms=ms-ms/99*99; P1=SEG7[ms/10]; P2=ACT[0]; delay(1); P1=SEG7[(ms%10)]; P2=ACT[1]; delay(1); } } } 一个51单片机计算脉冲宽度的小程序,我将GATE设为1,即设为INTO脚输入高电平开始计时,输入低结束的程序,并送数码管显示。我只有两个数码管,所以让它从1到99循环。可是我一通电,它就成了秒表,慢慢的加从1到99,这到没什么,因为INTO本来就是高电平吧,可是当我把INTO拉低以后,数码管有时不亮,有时就亮一个数码管,这是为什么呢,哪位大侠帮小弟解释一下啊 |