- #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); //延时函数
- }
- }
- }
- }
复制代码
|