久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2518|回復: 10
收起左側

求助!單片機按鍵切換不能及時轉換的問題

[復制鏈接]
ID:680011 發(fā)表于 2020-1-18 20:05 來自手機 | 顯示全部樓層 |閱讀模式
求助應該怎么寫才能讓按鍵按一下就能執(zhí)行對應的程序
按其它按鍵后都需要按住不放手幾秒后才能切換過來,哪位大神幫幫忙指點一下可以快速切換按鍵執(zhí)行程序的。
#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);//函數(shù)聲明
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;//釋放則執(zhí)行需要的程序
                        break;}
                                 
                   }
                        
                 }
                 
            
        if(!k2)                 //K2按鍵指令
        
          DelayMs(10);
          if(!k2)
                     

         {
                 while(!k2)
                   {
                  
                 k2=0;
                 k1=1;        
                 k3=1;
                 k4=1;
        
                         {led0=1;//釋放則執(zhí)行需要的程序
                        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;//釋放則執(zhí)行需要的程序
                        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;//釋放則執(zhí)行需要的程序
                        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);
}
}
回復

使用道具 舉報

ID:687171 發(fā)表于 2020-1-19 09:34 | 顯示全部樓層
你需要同時讀取幾個按鍵的IO,再根據(jù)這個包含了所有按鍵鍵值的變量去判斷需要執(zhí)行什么程序。而不是讀完一個延時之后再讀取另外一個
uint key =0;
key = 0xf0 & P2;
switch(key)
{
        case: 0x80:func(1);
                break;
        case: 0x40: func(2);
                break;
        case: 0x20: func(3);
                break;
        case: 0x10: func(4);
                break;
        default:
                break;
}
//需要判斷組合按鍵再增加對應的case
回復

使用道具 舉報

ID:462827 發(fā)表于 2020-1-19 20:42 | 顯示全部樓層
有些東西要放到中斷去,那樣才能按鍵馬上就作出響應。
回復

使用道具 舉報

ID:680011 發(fā)表于 2020-1-21 13:11 | 顯示全部樓層
屬你最牛 發(fā)表于 2020-1-19 09:34
你需要同時讀取幾個按鍵的IO,再根據(jù)這個包含了所有按鍵鍵值的變量去判斷需要執(zhí)行什么程序。而不是讀完一個 ...

這樣的程序不會寫,
回復

使用道具 舉報

ID:680011 發(fā)表于 2020-1-21 13:13 | 顯示全部樓層
hantu 發(fā)表于 2020-1-19 20:42
有些東西要放到中斷去,那樣才能按鍵馬上就作出響應。

能給個中斷發(fā)光管的代碼嗎?研究下
回復

使用道具 舉報

ID:680011 發(fā)表于 2020-1-21 15:02 | 顯示全部樓層
大哥們加入停止按鈕的程序怎么加
回復

使用道具 舉報

ID:275826 發(fā)表于 2020-1-22 19:22 | 顯示全部樓層
使用阻塞型編程就會出現(xiàn)按鍵反應慢的問題,程序中一般不要用軟件延時子程序
回復

使用道具 舉報

ID:680011 發(fā)表于 2020-2-22 13:06 | 顯示全部樓層
tyrl800 發(fā)表于 2020-1-22 19:22
使用阻塞型編程就會出現(xiàn)按鍵反應慢的問題,程序中一般不要用軟件延時子程序

請問怎么才能有延時還能按鍵快速啟停呀
回復

使用道具 舉報

ID:601478 發(fā)表于 2020-2-22 16:08 | 顯示全部樓層
用中斷掃描,按鍵可以讀一整組IO口也可以獨立定義每一個按鍵后再判斷,狀態(tài)判斷用次數(shù)累加即可,這樣判斷單擊,雙擊,長按等比較容易
回復

使用道具 舉報

ID:601478 發(fā)表于 2020-2-22 16:10 | 顯示全部樓層
論壇里面有很多相關的帖子,搜索按鍵延時就有一大堆
回復

使用道具 舉報

ID:679425 發(fā)表于 2020-2-22 16:39 | 顯示全部樓層
按鍵可以讀一整組IO口也可以獨立定義每一個按鍵后再判斷
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级在线 | 久久天堂| 久久精品二区 | 一区| 欧美一区二区三区高清视频 | 色视频在线观看 | 亚洲系列第一页 | 亚洲精品国产电影 | 一级片毛片 | 日本高清中文字幕 | 中文字幕一区二区三区精彩视频 | 欧美爱爱视频网站 | 免费视频二区 | 日韩一区二区三区视频 | 男人天堂网av | 国产一级在线 | 999视频在线播放 | 国产91精品在线 | 欧美日韩不卡合集视频 | 国产精品一区二区三区四区 | 欧美黄色免费网站 | 国产在线观看一区二区 | 欧美成视频 | 亚洲激精日韩激精欧美精品 | 国产精品视频一区二区三区四蜜臂 | 在线观看免费黄色片 | 国产成人精品一区二区三区 | 国产精品自拍啪啪 | 久久久看 | 韩国主播午夜大尺度福利 | 在线色网 | 国产国语精品 | 理论片免费在线观看 | 日韩成人免费视频 | 噜噜噜色网| 欧美一区二区综合 | 一区二区在线不卡 | 一级片在线观看 | 国产美女在线观看 | 中文字幕一区二区三区日韩精品 | 国产不卡在线播放 |