找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1868|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

STC8H3K64S4單片機(jī)輸入口檢查不到輸入口狀態(tài)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:337139 發(fā)表于 2024-1-23 11:26 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
運(yùn)行的結(jié)果是,按鍵只能按一下檢測到后中,LED不停地閃爍,給人的感覺是按鍵沒有彈起一直有測到低電平。
出現(xiàn)這種現(xiàn)象是為哪里設(shè)置引起的?

請各位大師幫助 看一下哪里的問題?

#include "stc8h.h"

sbit Led_Red   = P1^7;
sbit Led_Green = P3^4;
sbit Led_Blue  = P5^5;


sbit   Key1 = P3^6;       // 00模式
sbit   Key2 = P3^5;       // 00模式
sbit   Key3 = P5^1;       // 00模式



bit  Key_flag=0;        //按鍵松開按下標(biāo)識

u8   Counter,Key_Modle;

extent  void delay_ms(u16 mS);

void IO_Int(void)
{
    P_SW2 |= 0x80;  //擴(kuò)展寄存器(XFR)訪問使能

    P0M1 = 0x00;   P0M0 = 0x00;   //設(shè)置P0.4、P0.5為漏極開路
    P1M1 = 0x00;   P1M0 = 0x00;   //設(shè)置P1.4、P1.5為漏極開路
    P2M1 = 0x00;   P2M0 = 0xff;   //設(shè)置P2.2~P2.5為漏極開路
    P3M1 = 0x00;   P3M0 = 0x80;   //設(shè)置P3.3、P3.5、P3.6為漏極開路 01101000  10000000     
    P4M1 = 0x00;   P4M0 = 0x0f;   //設(shè)置P4.2~P4.5為漏極開路
    P5M1 = 0x00;   P5M0 = 0x01;   //設(shè)置P5.2、P5.3為漏極開路00001010  00000011
    P6M1 = 0xff;   P6M0 = 0xff;   //設(shè)置為漏極開路(實(shí)驗(yàn)箱加了上拉電阻到3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //設(shè)置為準(zhǔn)雙向口
   
    P3PU=0x68;
    P5PU=0x02;
    P0=0X00;
    P1=0X00;
    P2=0XFF;
    //P3=0X68;      // 35 36
    P4=0X0F;
   
    Led_Red  =1;
    Led_Green=1;
    Led_Blue =1;   

}

void Key_Check(void)
  {
       if((Key1==0)&&(Key_flag))           
               {delay_ms(80);
                     if(Key1==0)
                        {                                                     
                            Key_Modle=1;                                                                                                                                                
                          
                          Led_Red =1;
                          Led_Blue =1;                                 
                            Led_Green =~Led_Green;
                            Key_flag = 0;   
                           
                          Counter = 0;     
                            }
                    }   
       if((Key2==0)&&(Key_flag))           
                {delay_ms(80);                 
          if(Key2==0)
                        {   
                         Key_Modle=2;                                                   
                       
                         Led_Green =1;
                         Led_Red =1;         
                         Led_Blue =~Led_Blue;
                         Key_flag = 0;   
                       
                            }
                        }   
                if(Key3==0)&&(Key_flag)           
               {delay_ms(80);            
                       if(Key3==0)
                        {   
                         Key_Modle=3;                                                                                            
                            DIR = 1;
                            EN  = 0;   
                            Led_Green =1;
                          Led_Blue =1;     
                        Led_Red=~Led_Red;            
                            Counter = 0;
                            Key_flag = 0;
                        
                          }
                    }   
                if((Key==0)&&(Key_flag))           
               {delay_ms(40);        
                        if(Key==0)
                        {   
                            Key_Modle=4;                                                               
                        
                            Counter = 0;
                            Key_flag = 0;   
                          
                        
                            }                                 
                 }
        if((Key1)&&(Key2)&&(Key3)&&(Key))  
                 {
                Key_flag=1;
                 }                    
    }


void main(void)
{   
      IO_Int();
while(1)
    {

     delay_ms(100);
    Key_Check();        


      }



}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:773929 發(fā)表于 2024-1-23 13:32 | 只看該作者
設(shè)置成雙向
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2024-1-23 17:10 | 只看該作者
初學(xué)盡量簡單些,整明白了就可循序漸進(jìn)。這樣可以提振信心。給你改了,你試試。
#include "stc8h.h"

typedef unsigned char u8;
typedef unsigned int u16;

sbit Led_R = P1^7;
sbit Led_G = P3^4;
sbit Led_B = P5^5;

sbit Key1 = P3^6;       // 00模式
sbit Key2 = P3^5;       // 00模式
sbit Key3 = P5^1;       // 00模式

bit  Key_flag=0;        //按鍵松開按下標(biāo)識
u8   Count;

void delay_ms(u16 ms)        //@11.0592MHz
{
        unsigned char data i, j;
        while (ms--)
        {
                i = 15;
                j = 90;
                do
                {
                        while (--j);
                } while (--i);
        }
}

void IO_Int(void)
{
        P0M1 = 0x00;   P0M0 = 0x00;
        P1M1 = 0x00;   P1M0 = 0x00;
        P2M1 = 0x00;   P2M0 = 0x00;
        P3M1 = 0x00;   P3M0 = 0x00;
        P4M1 = 0x00;   P4M0 = 0x00;
        P5M1 = 0x00;   P5M0 = 0x00;
        P6M1 = 0xff;   P6M0 = 0x00;
        P7M1 = 0x00;   P7M0 = 0x00;
}

void Key_Check(void)
{
        if(!Key1||!Key2||!Key3)
        {
                if(++Count>=20 && Key_flag==0)
                {         
                        Key_flag=1;
                        if(!Key1)Led_R=~Led_R;
                        if(!Key2)Led_B=~Led_B;
                        if(!Key3)Led_G=~Led_G;
                }
        }   
        else
        {
                Count=0;
                Key_flag=0;
        }
}

void main(void)
{   
        IO_Int();
        while(1)
        {
                Key_Check();
                delay_ms(1);
        }
}
回復(fù)

使用道具 舉報(bào)

地板
ID:226055 發(fā)表于 2024-1-23 20:22 | 只看該作者
    1、STC8H3K64S4的IO口帶內(nèi)部上拉電阻,如果硬件外部沒有上拉,那么程序配置將按鍵用IO口上拉打開。
    2、按鍵檢測有連按與非連按的算法,你的程序按著有反應(yīng),說明硬件上面應(yīng)該是好的?梢灾貜能浖胧帧


    3、手頭有一塊艾克姆的STC8H3K64S4的板子,和你的單片機(jī)型號完全一樣,附件把按鍵動(dòng)作翻轉(zhuǎn)指示燈的程序附上,尤其指示燈翻轉(zhuǎn)的函數(shù)你也可以參考。主要換一下IO口和你的一致即可。


key.rar

37.03 KB, 下載次數(shù): 0

回復(fù)

使用道具 舉報(bào)

5#
ID:198296 發(fā)表于 2024-1-24 07:19 | 只看該作者
按鍵 輸入, 影響 LED 掃描延遲, 所以閃爍.

解決方法:
利用 2次或多次的  LED 掃描 時(shí)間差, 作為鍵輸入的延遲消抖
回復(fù)

使用道具 舉報(bào)

6#
ID:337139 發(fā)表于 2024-1-24 09:51 | 只看該作者
wulin 發(fā)表于 2024-1-23 17:10
初學(xué)盡量簡單些,整明白了就可循序漸進(jìn)。這樣可以提振信心。給你改了,你試試。
#include "stc8h.h"

謝謝,這樣是條理清楚,結(jié)構(gòu)明了。
回復(fù)

使用道具 舉報(bào)

7#
ID:337139 發(fā)表于 2024-1-24 09:55 | 只看該作者
cocolala 發(fā)表于 2024-1-23 20:22
1、STC8H3K64S4的IO口帶內(nèi)部上拉電阻,如果硬件外部沒有上拉,那么程序配置將按鍵用IO口上拉打開。
   ...

很有參考價(jià)值,謝謝!
回復(fù)

使用道具 舉報(bào)

8#
ID:337139 發(fā)表于 2024-12-6 09:54 | 只看該作者
cocolala 發(fā)表于 2024-1-23 20:22
1、STC8H3K64S4的IO口帶內(nèi)部上拉電阻,如果硬件外部沒有上拉,那么程序配置將按鍵用IO口上拉打開。
   ...

非常感謝你的幫助!前段時(shí)間因?yàn)閮蓚(gè)緊急的項(xiàng)目在做,一直沒有時(shí)間來調(diào)試。現(xiàn)在回來解決這個(gè)遺留問題。
回復(fù)

使用道具 舉報(bào)

9#
ID:161164 發(fā)表于 2024-12-6 17:56 | 只看該作者
長風(fēng)007 發(fā)表于 2024-12-6 09:54
非常感謝你的幫助!前段時(shí)間因?yàn)閮蓚(gè)緊急的項(xiàng)目在做,一直沒有時(shí)間來調(diào)試。現(xiàn)在回來解決這個(gè)遺留問題。

你貼的代碼不完整啊
u8沒定義
Key從哪里冒出來的?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表