• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

单片机不同按键控制不同IO口输出驱动三极管遇到难题

0de0afb2cda703c1 2020-07-24 浏览量:521
4个按键  K1 K2 K3 K4 其中 K1是开启和暂停键(本来想长按开显示短按启动定时器 新手还没这么去编程),K2 K3 K4 按键每个按键下可以选择工作时长:按一下能切 5分钟 10分钟 15分钟  K2对应一个IO口驱动三极管 K3K4都是一样的(工作时长略微不同而已)。 现在遇到的问题点是, 1.K2选好时间档位,我按下K1开关/暂停 键,正常运行倒计时,时间没到00能正常启动/暂停,到00了选其他时间档位就不能正常启动了倒计时。。。2.K2控制的输出IO口置高,然后其他2个输出口为0但是实际编出来的效果是暂停了 K2控制的IO口还是输出高。。。不同按键单独控制一个IO口 暂停时关闭,启动是打开,思路是有,但是C语音编程就是没效果。。。一直查资料2天了没进展,附上 按键和定时器的编码

单片机源程序如下:
void Key_Event_Handle()  
{
                if((K1==0)&&(munite_counts!=0))     
                                                {
                                                        DelayMS(10);
                                                        if(K1==0)
                                                        {
                                                                while(!K1);
                                                                ET0=~ET0;
                                                                TR0=~TR0;
                                                        /@@*        if((flag==1)&&(TR0==1))
                                                                {
                                                                        flag=0;
                                                                        SONIC=1;
                                                                        HEAT=0;
                                                                        UV=0;
                                                                }
                                                                if((flag1==1)&&(TR0==1))
                                                                {
                                                                        flag1=0;
                                                                        SONIC=0;
                                                                        HEAT=1;
                                                                        UV=0;
                                                                }        
                                                                if((flag2==1)&&(TR0==1))
                                                                {
                                                                        flag2=0;
                                                                        SONIC=0;
                                                                        HEAT=0;
                                                                        UV=1;
                                                                }        */        
                                                        }        
                                                }
                
                if(K2==0) 
                {
                        DelayMS(10); 
                                if(K2==0)
                                {
                                 flag=1;
                                        flag1=0;
                                        flag2=0;
                                                K2num++;           
                                                while(!K2);  
                                                K3num=0;
                                                K4num=0;
                                //                ET0=0;
                                        //        TR0=0; 

                                                if(K2num==1)
                                                {
                                                        munite_counts=3;
                                                        Second_Counts=0;
                                                }
                                                if(K2num==2)                         //
                                                {
                                                        munite_counts=10;
                                                }
                                                if(K2num==3)                 //
                                                {
                                                        munite_counts=15;
                                                }
                                                if(K2num==4)                 //
                                                {
                                                        munite_counts=20;
                                                }
                                                if(K2num==5)                         //
                                                {
                                                        K2num=0;
                                                        munite_counts=2;
                                                }
                                        }
                                Key_Flag_Idx=0;
                                        i=0;
                        }        
                
                if(K3==0)
                {
                        DelayMS(10);  
                                if(K3==0)
                                {
                                        flag=0;
                                        flag1=1;
                                        flag2=0;
                                                K3num++;         
                                                while(!K3); 
                                                K2num=0;
                                                K4num=0;
                                                //ET0=0;
                                                //TR0=0; 

                                                if(K3num==1)  
                                                {
                                                        munite_counts=2;
                                                        Second_Counts=0;
                                                }
                                                if(K3num==2)                         //
                                                {
                                                        munite_counts=10;
                                                }
                                                if(K3num==3)                 //
                                                {
                                                        munite_counts=20;
                                                }
                                                if(K3num==4)                         //
                                                {
                                                        munite_counts=30;
                                                }
                                                if(K3num==5)                         //
                                                {
                                                        K3num=0;
                                                        munite_counts=3;
                                                }
                                }
                                Key_Flag_Idx=0;
                                i=0;
                        }
                                
                if(K4==0) 
                        {
                        DelayMS(10); 
                                if(K4==0)
                                {
                                        flag=0;
                                        flag1=0;
                                        flag2=1;
                                while(!K4); 
                                                K2num=0;
                                                K3num=0;
                                //ET0=0;
                                //TR0=0; 
                                munite_counts=1;
                                        Second_Counts=0;
                                }
                                Key_Flag_Idx=0;
                                i=0;
                        }
}


void DSY_Refresh() interrupt 1
{
        TH0=(65536-5000)/256; 
        TL0=(65536-5000)%256;
        i++;
        if(i==2)  
        {
                i=0;
                Second_Counts++;                        
                if(Second_Counts==60) 
                {
                        Second_Counts=0;
                        munite_counts--;
                        if(munite_counts==0)
                        {
                                TR0=0;
                        }
                }
        }
}

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 觉得你的逻辑有问题,在按键处理完后只是修改了状态特征变量,并没有进行相应的 开始、暂停处理

    此外你的编程习惯很不好,全是全局变量,连一个i都是全局变量,这样很容易跑飞程序的

    • 发布于 2020-07-24
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:1
  • 这个程序对K1 K2的赋值感觉有问题,最好把K1 K2赋值的语句贴上来看一下
    • 发布于2020-07-24
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

单片机不同按键控制不同IO口输出驱动三极管遇到难题