#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit d2=P2; //定義P2口LED。 sbit n1=P1^3; //定義P1^3口的LED燈。 void delay(int); uint num; uint table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x98,0x88,0x83, 0xc6,0xa1,0x86,0x8e }; //控制數碼管段碼從0——F亮。
void main(void) { EA=1; //開總中斷開關 EX0=1; //開外部中斷0 IT0=0; //設置中斷觸發方式 while(1) { for(num=0;num<16;num++) {
d2=0; //點亮數碼管
P0=table[num]; delay(12450); //延時閃爍。 d2=1; //關閉數碼管。 } } } void delay(int z) //延時程序。 { uint i,j; for(i=z;i>0;i--) for(j=2;j>0;j--); } void exter0() interrupt 0 //中斷程序。 { n1=0; //打開P1^3口 delay(1); //延時。 }
我用的單片機是沒有鎖存器的,數碼管是共陽極的。與外部中斷相關的是P3.2口。
我用線把P3.2接地。按理來說,如果不拔掉這個線,中斷就沒有停止,也就回不了主程序中去。但是沒有,單片機還會回到主程序中去執行數碼管的閃爍,一頓飯時間,數碼管就從6變為C,只是數碼管閃爍得慢了很多,但并沒有停止。
我不明白這個程序哪里出錯了?
void exter0() interrupt 0 //中斷程序。
{
n1=0; //打開P1^3口
delay(1); //延時。
}
你試試 把這個段 改成
void exter0() interrupt 0 //中斷程序。
{
while(1)
{
n1=0; //打開P1^3口
delay(1); //延時。
}
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |