补充下:可能由于压缩软件的原因。致使下载下来后出现错乱。这儿将程序复制过来。可以直接学习。
/*******************************************************************************************************************************************
***************************************************************************************************************************************
************************************************************************************************************************************************************
作品名称:按键控制LED
制作人:舒适
注释热:舒适
作品介绍:硬件连接,LED灯接P1口。LED阳极接高电平,阴极接端口。
此电路共定义了4个按键端口:P3.4,P3.5,P3.6,P3.7
电路设计要求:
1: 点动按下key1键时灯亮。连续按着成流水灯形状。按键弹开后灯全部灭掉。
2: 按下key2键时,实现计数功能。按键弹开后停止计数。
3: 按下key3时,灯逐个点亮。又逐个熄灭。
4: 按下 key4时,第一次按,从左到右流水,第二次按,从右到左流水。第三次按,全部停止。
/*********************************************************************************************************************************************************
*********************************************************************************************************************************************************
*******************************************************************************************************************************************************/
#include //包含的源文件
***it key1=P3^4;
***it key2=P3^5;
***it key3=P3^6;
***it key4=P3^7;
int a[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //左流水灯数组
int b[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};//右流水灯数组
int c[]={0xFE,0xfc,0xF8,0xF0,0xE0,0xC0,0x80,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};//逐个点亮,逐个灭掉数组
void delay() //延时子程序
{int i;
for(i=0;i<30000;i++);
}
void aa() //实现要求1的子程序,点动按下按键,灯亮,连续按下时。成流水灯显示。
{int i=0; //定义了一个整形的i
while(!key1) //判断按键一是否被按下
{P0=a[i]; //流水灯
delay();
i++;
if(i==8)
i=0;
}
}
void bb() //实现要求2的功能。按下按键2时,实现计数的功能。弹开按键后停止计数
{while(!key2) //判断按键2是否有被按下。如按下则计数器自动加1
{P0--;
delay();
if(P0==0)
P0=0xFF;
}
}
void cc() //实现要求3的功能。按下按键3,则LED灯从左到右,依次全亮,然后从右到左依次全部熄灭。
{int i=0;
P0=0xFF;
while(!key3)
{P0=c[i];
delay();
i++;
if(i==16)
i=0;
}
}
void dd() //实现要求4的功能。第一次按key4时,LED从左到右流水,第二次按键时,LED依次从右到左流水。第三次按下时,全部熄灭。
{int i=0,j=0,k=0,h=0;
loop:P0=0xFF; //灯全部熄灭
if(key4==0) //第一次判断按键4是否被按下
{for(i=0;i<30000;i++); //延时消抖动
if(key4==1) //判断按键4是否弹起
while(1)
{P0=a[j]; //左流水灯
delay();
j++;
if(j==8)
j=0;
if(key4==0) //第二次判断按键4 是否被按下。
{for(i=0;i<30000;i++); //延时消抖动
if(key4==1) //判断按键是否被弹起
while(1)
{P0=b[k]; //右流水灯
delay();
k++;
if(k==8)
k=0;
if(key4==0) //第三次判断按键4是否被按下。
{for(i=0;i<30000;i++); //延时消抖动
if(key4==1) //判断按键是否被弹起
goto loop; //无条件返回到loop函数
}
}
}
}
}
}
void main() //主函数。
{while(1)
{P0=0xFF;
while(!key1)aa();
while(!key2)bb();
while(!key3)cc();
while(!key4)dd();
}
}
|