|
設(shè)置的流水燈按鍵key2啟動(dòng)后key1對(duì)應(yīng)的P3.2中斷啟動(dòng)進(jìn)去后停止了,但是在啟動(dòng)按鍵key2執(zhí)行流水燈后中斷就感覺失效了無法停止,并且兩個(gè)按鈕同時(shí)按下不松開的情況下竟然去執(zhí)行key2的流水燈了,第二個(gè)問題除了main()函數(shù)調(diào)用使其中斷結(jié)束后不執(zhí)行程序還有什么辦法使中斷結(jié)束后不回到程序執(zhí)行嗎?
單片機(jī)源程序如下:- #include<reg51.h>
- #include <intrins.h>
- sbit key1=P3^2; //定義P3.2口為按鍵key1
- sbit key2=P3^3; //定義P3.3口為按鍵key2
- sbit led1=P1^0; //定義P1.0口為電源指示燈紅燈
- sbit led2=P1^1; //定義P1.1口為電源指示燈綠燈
- char a[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //初始化數(shù)組對(duì)應(yīng)流水燈端口
- int i,k;
- void delay(int x) //延時(shí)函數(shù)
- {char i;
- while(x--)
- { for(i=0;i<120;i++); }}
- void exint0() interrupt 0 //中斷函數(shù)
- {
- if(key1==0)
- {
- delay(100); //按鍵防抖
- if(key1==0) //判斷執(zhí)行中斷
- {
- P2=0Xff; //P2口復(fù)位
- led1=0; //紅色電源指示燈亮起
- led2=1; //綠色電源指示燈停止
- key2=1;//初始化P3.3按鍵
- i=0; //初始化數(shù)值
- k=0; //初始化數(shù)值
- main();//返回主函數(shù)。--使其中斷結(jié)束后不在回到程序繼續(xù)執(zhí)行
- }
- }
- }
- void interr()//中斷函數(shù)打開
- {
- EA=1; //開啟總中斷
- EX0=1; //開啟外部中斷P3.2
- IT0=0; //設(shè)置外部中斷觸發(fā)模式,1是下降沿觸發(fā),0是低電平觸發(fā)
- }
- main()
- {
- interr();//初始化中斷函數(shù)
- i=k=0;//初始化數(shù)值
- led1=0; //紅色電源指示燈亮起
- led2=1; //綠色電源指示燈停止
-
- while(1)//程序循環(huán)掃描
- {
- if(key2==0)//判斷P3.3接口按鍵是否啟動(dòng)
- {
- interr();//初始化中斷函數(shù)
- i=0; //初始化數(shù)值
- led2=0; //綠色電源指示燈亮起
- led1=1; //紅色電源指示燈停止
- k=1; //初始化數(shù)值
-
- while(k)//初始化數(shù)值K為1后-開始循環(huán)流水燈
- {
- for(i=0; i<8; i++) //循環(huán)判斷 向下循環(huán)點(diǎn)亮LED
- {
- P2=a[i]; // 右移數(shù)組,點(diǎn)亮下一位LED
- delay(400); //延時(shí)函數(shù)
- }
-
- for(i=6;i>0; i--) //循環(huán)判斷 向上循環(huán)點(diǎn)亮LED
- {
- P2=a[i]; // 左移數(shù)組,點(diǎn)亮上一位LED
- delay(400); //延時(shí)函數(shù)
- }
- }}
- }
- }
復(fù)制代碼
|
-
-
流水燈仿真.zip
2023-4-17 00:18 上傳
點(diǎn)擊文件名下載附件
57.7 KB, 下載次數(shù): 2
|