P2口接8个LED流水灯,P3.0接一个按键
按键按下一次流水灯方向改变一次
单片机源程序如下:
#include<reg52.h> //51系列单片机头文件
#include<intrins.h> //51系列单片机头文件
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit k1=P3^0;
uchar a,b,c,d,y=0; //定义一个变量,用来给P2口赋值
void delayms(uint xms) //延时子函数
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
void key()
{
uchar x;
if(k1==0)
{
delayms(10); //延时10ms 去抖
if(k1==0) //再判断k1按键是否按下
{
while(!k1);
x++;
if(x==4)
x=1;
if(y==4)
x=0;
switch(x) //条件选择
{
case 1: y=1; break;
case 2: y=2; break;
case 3: y=3; break;
default: break;
}
}
}
}
void display()
{
if(y==0)
{
P2=a;
delayms(500);
a=~a; //状态0时 LED闪烁
}
if(y==1)
{
P2=b;
delayms(500);
b=_crol_(b,1); //状态1时 LED选择左移
}
if(y==2)
{
P2=c;
delayms(500);
c=_cror_(c,1); //状态2时 LED选择右移
}
if(y==3)
{
P2=d;
delayms(500);
d=d; //状态3时 LED全亮
}
}
void main()
{
a=0xff; //高4位和低4位都置为1
b=0x01; //只有低4位的最低位为1
c=0xfe; //低4位的最低位为0
d=0xff;
while(1)
{
key();
display(); //按键显示
}
}
|