硬件上多定义一个开关和一个灯
sbit led3=P3^6
sbit key3=P3^3
再多定义一个变量 k 即可
程序中间段落很明显,增加
if(key3==0)//按键3
{
delay_ms(50)
if(key3==0)
{
k++
k=k%2
switch(k)
{
case 0: led3=1break//关小灯
case 1: led3=0break//开小灯
default: break
}
}
while(!key3)
}
一个简单的开关控制一盏灯的c程序如下:
#include<reg52.h>
sbit S1=P1^4 //将S1位定义为P1^4,检测独立按键
sbit led0=P1^0 //将led0定义为P1.0口的LED
/***********************************************************************************************************************************************
延时函数
***********************************************************************************************************************************************/
void delay(void)
{
unsigned int i
for(i=5000i>0i--)
}
/***********************************************************************************************************************************************
主函数
***********************************************************************************************************************************************/
void main(void)
{
while(1)
{
if(S1==0) //判断是否有键按下
{
delay() //有键按下,延时去抖,真正应用时要少用这种延时,占用时间,用定时器延时或一个寄存器循环检测10多次按键
if(F0==0) //用F0标志位判断键按下是否已经处理,因刚学C语言没多久,
//不知道怎么定义RAM能位寻址的寄存器,先用F0,按键多的话,一个F0不够用
{
F0=1 //F0置1,表示这次按键按下已处理
led0=~led0 //将LED亮灭状态取反
}
}
else //S1=1说明按键释放
{
F0=0 //F0清零,清按键已处理标志
}
}
}
#include<reg52.h>#define uint unsigned int
#define uchar unsigned char
void delay_ms(uint)
sbit led0=P0^0
sbit led1=P0^1
sbit key1=P3^2
sbit key2=P3^3
void main()
{
uchar i=0
uchar j=0
while(1)
{
if(key1==0)//按键1
{
delay_ms(10)
if(key1==0)
{
i++
i=i%2
switch(i)
{
case 0: led0=1 break//关小灯
case 1: led0=0 break//开小灯
default: break
}
}
while(!key1)
}
if(key2==0)//按键2
{
delay_ms(10)
if(key2==0)
{
j++
j=j%2
switch(j)
{
case 0: led1=1 break//关小灯
case 1: led1=0 break//开小灯
default: break
}
}
while(!key2)
}
}
}
void delay_ms(uint z) //延时子程序
{
uint x,y
for(x=zx>0x--)
for(y=110y>0y--)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)