电子技术论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
下载方法|用单线程|避免多扣帖子规范|求助必读|发帖建议积分策略|勋章介绍|新人必读获取金币|推广论坛|出售帖子基本礼节|致会员信|版规总则
禁涉政治|反对低俗|举报专帖征集相片|留下足迹|推荐精华上传附件|制作分卷|使用网盘禁发qq群|恶意灌水|纯表情帖加入团队|监督机制|安全上网
查看: 1355|回复: 0

求助,按键按下后不能立即执行的问题

[复制链接]
发表于 2020-1-18 20:10:51 | 显示全部楼层 |阅读模式

注册家电维修技术论坛,与同行畅聊维修技术,享更多技术论坛功能。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
下面的程序按键按下后不能立即执行,需要延时一个周期后才能进入按键选择的程序,并且要按着不放,求助大神应该怎么写才能立即执行按键选择的延时程序
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uint unsigned int
uint i,j;
sbit led0=P1^0;
sbit k1=P2^4;
sbit k2=P2^5;
sbit k3=P2^6;
sbit k4=P2^7;
void DelayUs2x(unsigned char t);//函数声明
void DelayMs(unsigned char t);
void main()
{       

        while(1)
        {
        if(!k1)         //K1按键指令

          DelayMs(10);
          if(!k1)
               
                  
          
         {
                 while(!k1)
                   {  
                k1=0;   
                k2=1;
                k3=1;
                k4=1;
       
                         {led0=0;//释放则执行需要的程序
                        break;}
                                  
                   }
                         
                 }
                 
            
        if(!k2)                 //K2按键指令
       
          DelayMs(10);
          if(!k2)
                    

         {
                 while(!k2)
                   {
                  
                 k2=0;
                 k1=1;       
                 k3=1;
                 k4=1;
       
                         {led0=1;//释放则执行需要的程序
                        for(i=4000;i>0;i--)
                                for(j=110;j>0;j--);       
                     led0=0;
                        for(i=1000;i>0;i--)
                                for(j=110;j>0;j--);       
                        break;}         
                   }
                 
                 }
        if(!k3)          //K3按键指令

          DelayMs(10);
          if(!k3)
               
       
          
         {
                 while(!k3)
                   {
                k3=0;
                k1=1;   
                k2=1;
                k4=1;

                         {led0=1;//释放则执行需要的程序
                        for(i=8000;i>0;i--)
                                for(j=110;j>0;j--);       
                     led0=0;
                        for(i=1000;i>0;i--)
                                for(j=110;j>0;j--);       
                        break;}                   
               }
                 
             }
        if(!k4)           //K4按键指令
       
          DelayMs(1);
          if(!k4)
                    
         {
                 while(!k4)
                   {
                 k4=0;
                 k1=1;
                 k2=1;       
                 k3=1;
                         led0=0;//释放则执行需要的程序
                        for(i=1000;i>0;i--)
                                for(j=110;j>0;j--);       
                     led0=1;
                        for(i=16000;i>0;i--)
                                for(j=110;j>0;j--);       
                        break;          
           }
                  
         }
}
}

void DelayUs2x(unsigned char t)
{   
while(--t);
}
void DelayMs(unsigned char t)
{
     
while(t--)
{
     //大致延时1mS
     DelayUs2x(245);
         DelayUs2x(245);
}
}
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|家电维修技术论坛 ( 鄂ICP备09003585号-2 )

GMT+8, 2025-1-30 22:53 , Processed in 0.057976 second(s), 4 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

CopyRight © 电子技术论坛
电子邮箱:8794149@qq.com | 联系 QQ:3081868839 | 官方网址:www.dzdu.com

Qiji. All Rights Reserved


服务条款 | 站长声明

Wuhan Qiji Technology Co., Ltd.武汉奇迹科技有限公司版权所有


鄂ICP备09003585号-2鄂公网安备42010602000420号

快速回复 返回顶部 返回列表