|
- #include <reg52.h> // 定義頭文件
- #define SEG7 P0 // 定義7段數(shù)碼管接至P0
- char code TAB[10]={ 0xc0, 0xf9, 0xa4, 0xb0, 0x99, // 數(shù)字0-4
- 0x92, 0x83, 0xf8, 0x80, 0x98}; // 數(shù)字5-9
- void delay1ms(int); // 聲明延遲函數(shù)
- main() // 主程序開始
- {
- P2=0xf7; // P2.3為0,讓最右邊數(shù)碼管顯示
- IE=0x85; // 打開外部中斷INT0和INT1
- IP=0x04; // 設(shè)置INT1優(yōu)先級(jí)高于INT0
- SEG7=0xbf; // 數(shù)碼管初始時(shí)顯示“-
- while(1); // 無窮等待,主程序無任何動(dòng)作
- } // 主程序結(jié)束
- // INT 0的中斷子程序 - 數(shù)碼管從0加到9
- void add_int0(void) interrupt 0//INT0中斷子程序開始
- { char i;
- unsigned saveSEG7=SEG7; // 儲(chǔ)存中斷前數(shù)碼管狀態(tài)
- for(i=0;i<10;i++) // 顯示0-9,共10次循環(huán)
- {
- SEG7=TAB[i]; // 顯示數(shù)字,使用實(shí)驗(yàn)板需改為"SEG7=~TAB[i];"
- delay1ms(500); // 延遲500ms
- } // for循環(huán)結(jié)束;
- SEG7=saveSEG7; // 寫回中斷前數(shù)碼管狀態(tài)
- } // 結(jié)束INT0 中斷子程序
- // INT 1的中斷子程序 - 數(shù)碼管從9減到0
- void subb_int1(void) interrupt 2//INT0中斷子程序開始
- { char i;
- unsigned saveSEG7=SEG7; // 儲(chǔ)存中斷前數(shù)碼管狀態(tài)
- for(i=9;i>=0;i--) // 顯示0-9,共10次循環(huán)
- {
- SEG7=TAB[i]; // 顯示數(shù)字,使用實(shí)驗(yàn)板需改為"SEG7=~TAB[i];"
- delay1ms(500); // 延遲500ms
- } // for循環(huán)結(jié)束;
- SEG7=saveSEG7; // 寫回中斷前數(shù)碼管狀態(tài)
- } // 結(jié)束INT0 中斷子程序
- // 延遲函數(shù),延遲約x ms
- void delay1ms(int x) // 延遲函數(shù)開始
- { int i,j; // 聲明整數(shù)變數(shù)i,j
- for (i=0;i<x;i++) // 計(jì)數(shù)x次,延遲x ms
- for (j=0;j<120;j++);// 計(jì)數(shù)120次,延遲1ms
- } // 延遲函數(shù)結(jié)束
復(fù)制代碼 |
|