#include <REG51.H> #define uchar unsigned char #define uint unsigned int uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar ACT[4]={0xfe,0xfd,0xfb,0xf7}; /***************************************************************/ uint data cnt; bit bdata bitflag; /**********************************************/ void init(void) { bitflag=0; EX0=1; IT0=1; EA=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; init(); while(1) { if(bitflag)cnt++; if(cnt>999)cnt=0; for(i=0;i<100;i++) { P0=SEG7[cnt/100]; P2=ACT[2]; delay(1); P0=SEG7[(cnt%100)/10]; P2=ACT[1]; delay(1); P0=SEG7[cnt%10]; P2=ACT[0]; delay(1); } } } /************************************************/ void extern_int0(void) interrupt 0 using 0 { bitflag=!bitflag; } 上面的程序是用一按键来实现中断,下降沿有效,按一下开始计数并送数码管显示,再按一下停,现在功能有没有实现我不清楚,但我无论是仿真还是真正调试都发现P0.7和P0.6莫名奇妙的置低了,换到P1口也一样,另外我在初始化函数里面即使把它们都置高或者置低也没效果,很是奇怪,哪位能指点下 |