0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

单片机

初学单片机

#include

sbit LED=P1^7;

sbit KEY=P3^7;

void delay(unsigned int a);

main(){

int b=0;

while(1){

if(KEY==0){

switch(b){

case 0:{

delay(20);

while(KEY==0){

LED=~LED;

b=1;

while(KEY==0);}}

break;

case 1:{

delay(20);

while(1){

LED=~LED;

delay(20);

if(KEY==0)

break;}

b=2;

while(KEY==0);}

break;

case 2:{

delay(20);

LED=0;

b=0;

while(KEY==0);}

break;}}}}

void delay(unsigned int a){

unsigned int i;

while(--a!=0)

for(i=600;i>0;i--);}

这个程序,我的设想是第一次按微动开关,LED常亮,第二次按开关,LED闪烁,第三次按开关,LED再次常亮,第四次按开关,LED灭。但是不知道为什么,LED的切换状态很乱,没有达到预想效果。请高人指点,谢谢

提问者:周小舟1 地点:- 浏览次数:7817 提问时间:10-22 18:06
我有更好的答案
提 交
3条回答
sdvywye 02-12 14:44
#include
sbit LED=P1^7;
sbit KEY=P3^7;
void delay(unsigned int a);
main()
{
        int b=0;
        while(1)
        {
                if(KEY==0)
                {
                        switch(b)
                        {
                                case 0:
                                {
                                        delay(20);
                                        while(KEY==0)
                                        {
                                                LED=~LED;
                                                b=1;
                                                while(KEY==0);
                                        }
                                }
                                        break;
                                case 1:
                                {
                                        delay(20);
                                        while(1)
                                        {
                                                LED=~LED;
                                                delay(20);
                                                if(KEY==0)
                                                break;
                                        }
                                        b=2;
                                        while(KEY==0);
                                }
                                        break;
                                case 2:
                                {
                                        delay(20);
                                        LED=0;
                                        b=0;
                                        while(KEY==0);
                                }
                                        break;
                        }
                }
        }
}
void delay(unsigned int a)
{
        unsigned int i;
        while(--a!=0)
        for(i=600;i>0;i--);
}
这样呢?
blnocyyp2002 02-18 02:20


逻辑混乱了 慢慢来
你自己分析一遍就知道了
比如你的那个 case0 里面 while(key==0){.....} 如果一直按着 那灯的就一直改变状态了
宋小辉1 02-11 08:16
用状态机做,很容易的
撰写答案
提 交
1 / 3
1 / 3
相关单片机
具有音调控制的单片机立体声前置放大器
用于单片机与电子装置中的开关电源
单片机软硬件复位的条件都有啥
电动机的单片机控制
单片机应用系统开发实例导航