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


評論