标题:
这个单片机程序怎样改 按键按下后只在LED1和LED2之间来回切换
[打印本页]
作者:
dj3365191
时间:
2023-5-28 18:32
标题:
这个单片机程序怎样改 按键按下后只在LED1和LED2之间来回切换
请教各位这个程序怎样改成按键按下后只在LED1和LED2之间来回切换,就是说上电LED1,LED2都不亮,按键按下后LED1亮,LED2灭。再按一次LED2亮,LED1灭,再按一次又是LED1亮,LED2灭,如此反复循环,谢谢
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
u16 mode;
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;
sbit key=P3^1;
void delay(u16 i)
{
while(i--);
}
void LED()
{
switch(mode)
{
case(0):LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;break;
case(1):LED1=0;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;break;
case(2):LED1=1;LED2=0;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;break;
case(3):LED1=1;LED2=1;LED3=0;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;break;
case(4):LED1=1;LED2=1;LED3=1;LED4=0;LED5=1;LED6=1;LED7=1;LED8=1;break;
case(5):LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;LED6=1;LED7=1;LED8=1;break;
case(6):LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=0;LED7=1;LED8=1;break;
case(7):LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=0;LED8=1;break;
case(8):LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=0;break;
}
}
void main()
{
while(1)
{
LED();
if(key==0)
{
delay(1000);
if(key==0)
{
mode++;
if(mode==9)
{
mode=0;
}
while(!key);
}
}
}
}
作者:
Hephaestus
时间:
2023-5-28 20:00
把这一段
switch(mode)
{
}
复制代码
改成
LED1=mode&1;
LED2=!(mode&1);
复制代码
作者:
lkc8210
时间:
2023-5-28 23:04
2023-05-28_230423.png
(16.5 KB, 下载次数: 32)
下载附件
2023-5-28 23:04 上传
作者:
lsy5110
时间:
2023-5-28 23:07
void LED()
{
switch(mode)
{
case(0):LED1=1;LED2=1;break;
case(1):LED1=0;LED2=1;break;
case(2):LED1=1;LED2=0;break;
case(3):LED1=0;LED2=1;break;
case(4):LED1=1;LED2=0;break;
case(5):LED1=0;LED2=1;break;
case(6):LED1=1;LED2=0;break;
case(7):LED1=0;LED2=1;break;
case(8):LED1=1;LED2=0;break;
}
}
作者:
leave323
时间:
2023-5-28 23:41
#include <reg52.h>
sbit LED1=P2^0;
sbit LED2=P2^1;
void delay(int i)
{
while(i--);
}
void main()
{
while(1)
{
LED1=0;
LED2=1;
if(key==0)
{
delay(1000);
if(key==0)
{LED1=~LED1;LED2=~LED2;while(!key);}
}
}
作者:
ZZZZZ134679
时间:
2023-5-29 00:06
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
bit mode;
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;
sbit key=P3^1;
void delay(u16 i)
{
while(i--);
}
void main()
{
LED3=LED4=LED5=LED6=LED7=LED8=1;
while(1)
{
if(key==0)
{
delay(20);
while(key==0)
delay(20);
mode^=1;
LED1=mode?1:0;
LED2=mode?0:1;
}
}
}
作者:
wulin
时间:
2023-5-29 05:59
去掉所有赘句,越简单越好。
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit key=P3^1;
void delay(u16 i)
{
while(i--);
}
void main()
{
while(1)
{
if(!key)
{
delay(200);
if(!key)
{
LED1=~LED1;
LED2=~LED1;
while(!key);
}
}
}
}
作者:
清风皓月抚心绕
时间:
2023-5-29 20:21
把按键分出来定一个标志位
作者:
王秋冬
时间:
2023-5-29 20:56
编程技巧,能减少程序步数,是程序简洁,谢谢分享。
作者:
chxelc
时间:
2023-5-30 08:43
#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
u16 mode;
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit key=P3^1;
void delay(u16 i)
{
while(i--);
}
void main()
{
while(1)
{
LED1=LED2=1;//假设LED高电平灭,低电平亮
if(key==0)//开关按下为低电平
{
delay(1000);//延时防误触
if(key==0)
{
LED1=~LED1;//LED1取反,上电LED1不亮,第一次按时,LED1亮,第2次按时LED1灭 LED2=~LED1;//LED2取LED1反,上电时LED2不亮,第一次按时,LED1亮,LED2灭,第二次按时,LED1灭,LED2亮
}
}
}
}
作者:
lzts88
时间:
2023-5-30 10:52
主程序 if(mode==9) 改成 if(mode == 3), 如果你循环是有灭灯的就不用改了, 你要求不灭灯只是1,2灯交叉亮灭的, 把下面 mode=0; 改为 mode = 1; 就改完收工了
作者:
13423265909
时间:
2023-5-30 11:02
用switch case来试试 case(0):LED1=1;LED2=1;break; case(1):LED1=0;LED2=1;break; case(2):LED1=1;LED2=0;break; case(3):LED1=0;LED2=1;break; case(4):LED1=1;LED2=0;break; case(5):LED1=0;LED2=1;break; case(6):LED1=1;LED2=0;break; case(7):LED1=0;LED2=1;break; case(8):LED1=1;LED2=0;break;
作者:
dj3365191
时间:
2023-5-30 11:49
谢谢各位的详细解答
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1