标题:
这个单片机程序,如何让按键切换为开与关
[打印本页]
作者:
56464不能去啊
时间:
2018-12-2 15:03
标题:
这个单片机程序,如何让按键切换为开与关
按键按下后,开始key=0的循环。怎样才能使实物中的按键再按一次,让该程序回到key=1?
单片机源码:
#include<reg52.h>
void delay(unsigned int a);
unsigned char b=0;
sbit key=P3^3;
void main()
{
while(1)
{
if(key==1)
{
delay(10);
if(key==1);
P1 = 0X08;
P2 = 0XC3;
}
if(key==0)
{
delay(10);
if(key==0);
while(1)
{
b++;
if(b==1)
{
P1 = 0X01;
P2 = 0XC3;
delay(100);
}
if(b==2)
{
P1 = 0X02;
P2 = 0XC3;
delay(100) ;
}
if(b==3)
{
P1 = 0X04;
P2 = 0XC3;
delay(100) ;
}
if(b==4)
{
P1 = 0X08;
P2 = 0XC3;
delay(100) ;
}
if(b==5)
{
P1 = 0X10;
P2 = 0XC3;
delay(100) ;
}
if(b==6)
{
P1 = 0X20;
P2 = 0XC3;
delay(100) ;
}
if(b==7)
{
P1 = 0X40;
P2 = 0XC3;
delay(100) ;
}
if(b==8)
{
P1 = 0X80;
P2 = 0XC3;
delay(100) ;
}
}
}
}
}
void delay(unsigned int a)
{
unsigned int i;
while(--a!=0)
{
for(i=0;i<600;i++);
}
}
复制代码
作者:
ylym
时间:
2018-12-2 19:17
我的想法有两种····
1是把while(1)的内容放在while(key=0)里面,不用while(1)
2是用if语句修改key的值,然后再用break语句跳出循环
希望能帮到您
作者:
qqqqaq12
时间:
2018-12-2 21:32
有一个粗暴的方法,用goto语句,可以直接跳转到你要去的位置。但是推荐,你把代码改一下,但是不知道你具体要实现什么功能,我的想法是,添加一个变量,按键改变数值,按下第一次,值等于1,功能为你的第一个p1p2的赋值,再按一次,等于2,实行你while(1)的功能,由于程序在大的while(1)的里面。所以只要你不改变添加的变量的值,就会一直执行,当你在按一次按键,值跳转回1,执行赋值的功能
作者:
聆烟雨
时间:
2018-12-2 22:48
抱歉楼主,我把你的代码改了一下换行。看看这是不是你要的效果,可能需要你自己添加按键去抖。
#include<reg52.h>
void delay(unsigned int a);
unsigned char b=0;
sbit key=P3^3;
unsigned char last_key = 0;
void main(){
while(1){
while(last_key==0){
P1 = 0X08;P2 = 0XC3;
if(key==0){ last_key = 1; break;} // key 默认为1 ,按下为 0
}
while(last_key==1){
b++;
if(b==1){ P1 = 0X01;P2 = 0XC3;delay(100);}
if(b==2){ P1 = 0X02;P2 = 0XC3;delay(100);}
if(b==3){ P1 = 0X04;P2 = 0XC3;delay(100);}
if(b==4){ P1 = 0X08;P2 = 0XC3;delay(100);}
if(b==5){ P1 = 0X10;P2 = 0XC3;delay(100);}
if(b==6){ P1 = 0X20;P2 = 0XC3;delay(100);}
if(b==7){ P1 = 0X40;P2 = 0XC3;delay(100);}
if(b==8){ P1 = 0X80;P2 = 0XC3;delay(100);}
if(b>8)b=0;
if(key==0){ last_key = 0; break;}
}
}
}
void delay(unsigned int a){
unsigned int i;
while(--a!=0){
for(i=0;i<600;i++);
}
}
复制代码
作者:
hello_liu
时间:
2018-12-3 14:10
添加一个变量,按键改变数值,按下第一次,值等于1,功能为你的第一个p1p2的赋值,再按一次,等于2,实行你while(1)的功能,由于程序在大的while(1)的里面。所以只要你不改变添加的变量的值,就会一直执行,当你在按一次按键,值跳转回1,执行赋值的功能
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1