- #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}; //初始化數組對應流水燈端口
- int i,j,k;
- void delay(int x) //延時函數
- {
- char i;
- while(x--)
- {
- for(i=0; i<120; i++);
- }
- }
- void exint0() interrupt 0 //中斷函數
- {
- P2=0Xff; //P2口復位
- led1=0; //紅色電源指示燈亮起
- led2=1; //綠色電源指示燈停止
- i=0; //初始化數值
- k=0; //初始化數值
- }
- void interr()//中斷函數打開
- {
- EA=1; //開啟總中斷
- EX0=1; //開啟外部中斷P3.2
- IT0=0; //設置外部中斷觸發模式,1是下降沿觸發,0是低電平觸發
- }
- main()
- {
- int cnt = 0;
- interr();//初始化中斷函數
- i=j=k=0;//初始化數值
- led1=0; //紅色電源指示燈亮起
- led2=1; //綠色電源指示燈停止
- while(1)//程序循環掃描
- {
- if(key2==0)//判斷P3.3接口按鍵是否啟動
- {
- k=1; //初始化數值
- }
- if(k)//初始化數值K為1后-開始循環流水燈
- {
- if(cnt == 0)
- {
- cnt = 400;
- if(!j)
- {
- P2=a[i]; // 右移數組,點亮下一位LED
- i++;
- if(i>=8)
- {
- i=6;
- j=1;
- }
- }
- else
- {
- P2=a[i]; // 右移數組,點亮下一位LED
- i--;
- if(i<=0)
- {
- i=0;
- j=0;
- }
- }
- }
- else
- {
- cnt--;
- delay(1); //延時函數
- }
- }
- }
- }
復制代碼
|