/*單片機中斷反應(yīng) *///==聲明區(qū)=====================================================================================================#include#define uint unsigned int#define uchar unsigned charvoid delay(uint a);bit c,b;//==主程序區(qū)===================================================================================================void main(){EA=1;//打開總中斷EX0=1;//打開外部中斷0IT0=0;//將中斷0設(shè)置為電平觸發(fā)IT1=0;//將中斷0設(shè)置為電平觸發(fā)EX1=1;//打開外部中斷1while(1){P1=0xfe;//關(guān)掉INT0里面的LEDP0=0xff;//關(guān)掉INT1里面的數(shù)碼管P0=0x00;P2=0xf8;P1=0xfe;while(1); }}//=子程序區(qū)=====================================================================================================void delay(uint a){uint b,c;for(b=a;b>0;b--)for(c=110;c>0;c--);}void Int0() interrupt 0//外部中斷0的服務(wù)子程序不用在聲明區(qū)聲明的{uint a;a=10;while(a--)//這里不能用while(1)如果不是的話當(dāng)外部中斷已經(jīng)成了高電平,但無法跳出中斷服務(wù)子程序{P0=0x00;P2=0xf8;P1=0xff;delay(1000);P1=0x00;delay(1000);}}void Int1() interrupt 2//外部中斷1 的服務(wù)子程序也是不用在聲明區(qū)聲明的。 {delay(1);c=P3^3;if(c==0){delay(1);if(c==0){uint a;a=10;while((a--))//這里不能用while(1)如果不是的話當(dāng)外部中斷已經(jīng)成了高電平,但無法跳出中斷服務(wù)子程序{P1=0xff;P2=0xf8;P0=0x3f;delay(1000);P2=0xf9;P0=0x00;delay(1000);P2=0xf8;P0=0x06;delay(1000);P2=0xf8;P0=0x5b;delay(1000);P2=0xf8;P0=0x4f;delay(1000);P2=0xf8;P0=0x66;delay(1000);P2=0xf8;P0=0x6d;delay(1000); }} }}
/*程序功能是第一個LED亮的,P3^2口是低電平是進入中斷程序,中斷實現(xiàn)功能是八個LED一起閃爍。P3^3口是低電平是進入外部中斷1,外部中斷1的程序?qū)崿F(xiàn)是,第一個數(shù)碼管顯示0,1,2,3,4,5.但我還沒有弄明白為什么0和1轉(zhuǎn)換的時候有一個時間間隔而大家的延時都是一樣,但是在顯示就不一樣了。程序?qū)崿F(xiàn)在中斷結(jié)束以后INT0的8個LED還是在點亮的,INT1的最后的一個數(shù)碼管還是點亮的,因為沒有在主程序里面關(guān)掉LED和數(shù)碼管。注意我的開發(fā)板P0口是接數(shù)碼管(是共陰極的)P2口是74HC138,P1口是LED*/
評論