|
內(nèi)容:通過(guò)不同按鍵,激活不同的外部中斷,以調(diào)節(jié)P1.7上LED發(fā)光二極管的閃爍頻率- #include "reg52.h"
- sbit Led1Pin =P1^7; //定義LED所在的引腳
- #define LEDON (0) //使LED亮的電平
- #define LEDOFF (1) //使LED滅的電平
- #define LEDFLASHSPEED1 (200) //速度1時(shí)的延時(shí)值
- #define LEDFLASHSPEED2 (2000) //速度2時(shí)的延時(shí)值
- unsigned int LedFlashSpeed; //用于存放選擇的速度
- bit Led1OutValue; //與LED燈對(duì)應(yīng)的輸出變量,用于刷新到Led1Pin
- //延時(shí)函數(shù)
- //x為延時(shí)時(shí)間,范圍1~65536
- void xDelay(unsigned int x)
- {
- unsigned char y; //聲明局部變量
- for(;x>0;x--) //外層循環(huán)
- for(y=110;y>0;y--); //內(nèi)層循環(huán)
- }
- //延時(shí)函數(shù)
- void Init(void)
- {
- Led1OutValue=LEDOFF; //輸出變量賦初值
- LedFlashSpeed=LEDFLASHSPEED1; //設(shè)置默認(rèn)速度
- IT0=1; //設(shè)置外部中斷為邊沿觸發(fā)方式
- IT1=1;
- EX0=1; //使能外部中斷
- EX1=1;
- EA=1; //使能所有中斷
- }
- //主函數(shù)
- void main(void)
- {
- Init(); //調(diào)用初始化函數(shù)
- while(1){
- Led1OutValue^=1; //輸出變量狀態(tài)取反
- Led1Pin=Led1OutValue; //將輸出變量的值刷新到對(duì)應(yīng)引腳
- xDelay(LedFlashSpeed); //延時(shí)一會(huì)
- }
- }
- //外部中斷0的中斷服務(wù)函數(shù)
- void ExInt0(void) interrupt 0
- {
- EX0=0; //失能外部中斷0
- LedFlashSpeed=LEDFLASHSPEED1; //設(shè)置速度
- EX0=1; //使能外部中斷0
- }
- //外部中斷1的中斷服務(wù)函數(shù)
- void ExInt1(void) interrupt 2
- {
- EX1=0; //失能外部中斷1
- LedFlashSpeed=LEDFLASHSPEED2;
- EX1=1; //使能外部中斷1
- }
復(fù)制代碼
|
|