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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:337139 發(fā)表于 2024-1-23 11:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
運行的結(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;        //按鍵松開按下標識

u8   Counter,Key_Modle;

extent  void delay_ms(u16 mS);

void IO_Int(void)
{
    P_SW2 |= 0x80;  //擴展寄存器(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è)置為漏極開路(實驗箱加了上拉電阻到3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //設(shè)置為準雙向口
   
    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ā)
ID:773929 發(fā)表于 2024-1-23 13:32 | 只看該作者
設(shè)置成雙向
回復

使用道具 舉報

板凳
ID:213173 發(fā)表于 2024-1-23 17:10 | 只看該作者
初學盡量簡單些,整明白了就可循序漸進。這樣可以提振信心。給你改了,你試試。
#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;        //按鍵松開按下標識
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);
        }
}
回復

使用道具 舉報

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


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


key.rar

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

回復

使用道具 舉報

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

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

使用道具 舉報

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

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

使用道具 舉報

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

很有參考價值,謝謝!
回復

使用道具 舉報

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

非常感謝你的幫助!前段時間因為兩個緊急的項目在做,一直沒有時間來調(diào)試。現(xiàn)在回來解決這個遺留問題。
回復

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人国产乱一区 | 美女黄视频网站 | 日韩成人中文字幕 | 国产在线精品一区二区三区 | 亚洲一区二区免费看 | 亚洲v日韩v综合v精品v | 国产精品极品美女在线观看免费 | 国产高清视频在线观看 | 热99视频 | 亚洲精久 | 国产超碰人人爽人人做人人爱 | www.国产精 | 亚洲成人三级 | 久久国产区 | 69xxx免费| 成人性生交大片免费看r链接 | 国产精品久久久久久久久久久免费看 | 欧美一区二区三区在线视频 | 亚洲小说图片 | 91文字幕巨乱亚洲香蕉 | 91精品国产综合久久久久久丝袜 | 久久国产精品免费一区二区三区 | 夜夜爽99久久国产综合精品女不卡 | 欧美大片黄| 久久免费国产 | 欧美一区二区三区在线观看 | 中文字幕av一区二区三区 | 99爱在线免费观看 | 国户精品久久久久久久久久久不卡 | av大片在线观看 | 一区二区精品 | 日本欧美国产在线 | 国产精品久久久久久福利一牛影视 | 深夜爽视频| 国产一区二区免费 | 91 在线 | 午夜一级大片 | 欧美日韩精品在线免费观看 | 国产午夜精品一区二区三区在线观看 | 欧美jizzhd精品欧美巨大免费 | 久久亚洲一区二区 |