/* ch06-3-3.c - 兩個外部中斷實驗 */
//==宣告區===================================
#include // 定義8x51暫存器之標頭檔,P2-17~19
#define SEG P2 // 定義七節顯示器接至Port 0
void delay1ms(int); // 宣告延遲函數
/* 宣告七節顯示器驅動信號陣列(共陽) */
unsigned char code TAB[]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, //數字0-4
0x92, 0x83, 0xf8, 0x80, 0x98 }; //數字5-9
void left(int); // 宣告單燈左移函數
void right(int); // 單燈右移函數開始
//==主程式===================================
main() // 主程式開始
{ IE=0x85; // 准許INT 0,INT 1中斷(6-4頁)
IP=0x04;
SEG=0x00;
// 設定INT 0具有最高優先權(6-5頁)
// 初值=0000 0000,燈全亮
while(1) // 無窮迴圈,程式一直跑
{

delay1ms(250);
SEG=~SEG; // 延遲250 1m=0.25s
// LED反相
} // while迴圈結束
} // 主程式結束
//==副程式===================================
/* INT 0的中斷副程式 - 單燈左移3圈 */
void my_int0(void) interrupt 0 // INT0 中斷副程式開始
{ int i; // 宣告i變數(計數值)
for (i=0;i<10;i++) // for迴圈顯示9-0(下數)
{ SEG=TAB[i]; // 顯示數字至七節顯示器
delay1ms(250); // 延遲500 1m=0.5s
SEG=0xff; // 關閉七節顯示器
delay1ms(250); // 延遲500 1m=0.5s
} // for迴圈結束
} // 結束中斷副 // 結束INT0 中斷副程式
/* INT 1的中斷副程式 - 單燈右移3圈 */
void my_int1(void) interrupt 2 // INT1 中斷副程式開始
{ int i; // 宣告i變數(計數值)
for (i=9;i>=0;i--) // for迴圈顯示9-0(下數)
{ SEG=TAB[i]; // 顯示數字至七節顯示器
delay1ms(250); // 延遲500 1m=0.5s
SEG=0xff; // 關閉七節顯示器
delay1ms(250); // 延遲500 1m=0.5s
} // for迴圈結束
} // 結束中斷副 // 結束INT1 中斷副程式
/* 延遲函數,延遲約x 1ms */
void delay1ms(int x) // 延遲函數開始
{ int i,j; // 宣告整數變數i,j
for (i=0;i for (j=0;j<120;j++); // 計數120次,延遲1ms
} // 延遲函數結束
arrow
arrow
    全站熱搜

    joan710317 發表在 痞客邦 留言(0) 人氣()