欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1664|回復: 2
打印 上一主題 下一主題
收起左側

這單片機按鍵檢測代碼的問題,現在是檢測不到IO的狀態

[復制鏈接]
跳轉到指定樓層
樓主
ID:691113 發表于 2020-10-21 16:30 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
#include "HT66F0185.h"
#include "key.h"
#define u8 unsigned char
#define u16 unsigned int

u8 KeyStatus=0;
u16 KeyCnt=0;

u8 KeyVal=0;
u8 KeyPress=0;//1按下,2長按


void keyinit()
{
  //按鍵設置為輸入上拉,PC4 PA1,PC5,PA3,PB4,PB5
  _pcc4=1;//開關機
  _pcpu4=1;

  _pac1=1;//程序
  _papu1=1;

  _pcc5=1;//加
  _pcpu5=1;

  _pac3=1;//減
  _papu3=1;

  _pbc4=1;//啟動/停止
  _pbpu4=1;
  
  _pbc5=1;//手動/反轉
  _pbpu5=1;
}

u8 getkey()
{
  u8 temp=0;
  //將掃描的結果放在 temp 里  |= 按位或后賦值運算符 &= 按位與后賦值運算符 ~ 按位取反運算符
  //a&0x01就是取a的最低位值的運算
  if(_pc4==0)temp|=0x01;else temp&=~(0x01);
  if(_pa1==0)temp|=0x02;else temp&=~(0x02);
  if(_pc5==0)temp|=0x04;else temp&=~(0x04);
  if(_pa3==0)temp|=0x08;else temp&=~(0x08);
  if(_pb4==0)temp|=0x16;else temp&=~(0x16);
  if(_pb5==0)temp|=0x32;else temp&=~(0x32);
  return temp;
}

//掃描函數,10-20ms 掃描間隔
void keyscan()
{
  static u8 i=0;
  u8 temp;
  GCC_DELAY(10);//GCC_DELAY
  temp=getkey();
  switch(KeyStatus)
  {
    case WaitStatus: //等待狀態
    if(temp!=0x00)
     {
       if(++i>=3)
        {
          i=0;
          KeyStatus=PressStatus;
        }
     }
    else
     {
       i=0;
     }
     break;
     case PressStatus: //按下狀態
     if(temp!=0x00)
      {
        KeyVal=temp;
        KeyStatus=ReleaseStatus;
      }
      else
      {
        KeyStatus=WaitStatus;
      }
      break;
      case ReleaseStatus: //等待釋放狀態
      if(temp!=0x00)
       {
         if(++KeyCnt==KeyTime) //長按檢測
          {
            KeyPress=2;
            KeyStatus=IDEStatus;
            KeyCnt=0;
          }  
       }
      else
       {
         KeyCnt=0;
         KeyStatus=WaitStatus;
         KeyPress=1;
       }
      break;
      case IDEStatus:
      if(temp==0x00)
       {
         KeyStatus=WaitStatus;
       }
      break;
  }
}



#ifndef __KEY__H__
#define __KEY__H__

#define u8 unsigned char
#define u16 unsigned int

#define WaitStatus     0     //按鍵過程的狀態
#define PressStatus    1
#define ReleaseStatus  2
#define IDEStatus      3
#define KeyTime       800  //長按超時時間        
        
#define KEY0 0x01
#define KEY1 0x02
#define KEY2 0x04
#define KEY3 0x08
#define KEY4 0x16
#define KEY5 0x32

void keyscan();
void keyinit();
#endif
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

板凳
ID:691113 發表于 2020-10-21 17:56 | 只看該作者
各位大哥,幫幫忙,別見 ,小白一個,請指教
回復

使用道具 舉報

沙發
ID:691113 發表于 2020-10-21 16:33 | 只看該作者
如果有基礎性的錯誤不要,小白一個
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表