|
通过按键轮流让4个端口输出高电平,
: ////////一个按键控制4种模式,分别点亮4个LED******************
#include<reg52.h>//头文件
#define unchar unsigned char
#define unint unsigned int
P3M1 = 0x00; P3M0 = 0x0F; //P3(00000000B,00001111B)
sbit KEY=P3^4; // 定义按键
sbit OUT1=P3^0; // 输出1
sbit OUT2=P3^1; // 输出2
sbit OUT3=P3^2; // 输出3
sbit OUT4=P3^3; // 输出4
bit flag=1; //定义控制运行符
unchar Mod; //定义亮灯模式
unint tt; //定义中断次数
void Init_Mod() //初始化函数
{
Mod=0;
OUT1=0;
OUT2=0;
OUT3=0;
OUT4=0;
}
void Init_Timer()
{
TMOD=0x01;
TR0=1;
EA=1;
ET0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void delay(unint z) //延时函数,延时z(ms)
{
unint x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--);
}
void Input_Mod() //状态模式标记函数
{
if(Mod==4) Mod=0;
if(KEY==0) //按键按下
{ delay(20);
if(KEY==0) //延时消抖
Mod++; //按键次数标记
}
while(!KEY) //松手检测
{; ;}
}
//4种模式下的执行
void run()
{
switch(Mod)
{ case 0:{ET0=0;OUT1=1;OUT2=0;OUT3=0;OUT4=0;}break;// 模式1
case 1:{ET0=0;OUT2=1;OUT1=0;OUT3=0;OUT4=0;}break;// 模式2
case 2:{ET0=0;OUT3=1;OUT1=0;OUT2=0;OUT4=0;}break;// 模式3
case 3:{ET0=0;OUT4=1;OUT1=0;OUT2=0;OUT3=0;}break;// 模式4
}
}
void main()
{ Init_Mod();
Init_Timer();
while(1)
{ Input_Mod();
if(flag==1) //flag 控制run的运行
{ run();
if(Mod==1||Mod==3) flag=0;
}
if(Mod==0||Mod==2) flag=1;
}
}
|
|