/**************************************************************************************
* 按键控制LED流水灯实验 *
实现现象:定义按键 1,控制流水灯从中间 LED 依次向外点亮,再从两侧向中间依次熄灭,重复
此过程。按键控制流水灯的运行与暂停
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define led P2 //将P2口定义为led 后面就可以使用led代替P2口
sbit k1=P3^1; //定义独立按键1
u16 lightled[6]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb}; //小灯显示方式
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : keypros
* 函数功能 : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros()
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
while(!k1); //检测按键是否松开
while(1) //按下后说明需要停止,就会进入这个死循环函数,知道按键再次按下
{
delay(50000); //用循环的延时函数来实现停止
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
while(!k1); //检测按键是否松开
break; //说明再一次按下了按键,需要进行实验,用break 来跳出循环
}
}
}
}
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
u8 i;
led=0x00; //刚开始让小灯全亮
delay(50000); //大约延时450ms
while(1)
{
for(i=0;i<6;i++) //将led左移一位
{
led=lightled[i];
delay(50000); //大约延时450ms
keypros(); //检测按键是否按下
}
}
}
* 按键控制LED流水灯实验 *
实现现象:定义按键 1,控制流水灯从中间 LED 依次向外点亮,再从两侧向中间依次熄灭,重复
此过程。按键控制流水灯的运行与暂停
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
#define led P2 //将P2口定义为led 后面就可以使用led代替P2口
sbit k1=P3^1; //定义独立按键1
u16 lightled[6]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb}; //小灯显示方式
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : keypros
* 函数功能 : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros()
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
while(!k1); //检测按键是否松开
while(1) //按下后说明需要停止,就会进入这个死循环函数,知道按键再次按下
{
delay(50000); //用循环的延时函数来实现停止
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
while(!k1); //检测按键是否松开
break; //说明再一次按下了按键,需要进行实验,用break 来跳出循环
}
}
}
}
}
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
u8 i;
led=0x00; //刚开始让小灯全亮
delay(50000); //大约延时450ms
while(1)
{
for(i=0;i<6;i++) //将led左移一位
{
led=lightled[i];
delay(50000); //大约延时450ms
keypros(); //检测按键是否按下
}
}
}