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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1585|回復: 0
收起左側

求解讀這段單片機按鍵程序的Nopresstime的作用

[復制鏈接]
ID:418451 發表于 2019-4-17 17:54 | 顯示全部樓層 |閱讀模式
#define IO_KEY1                                                P00                                                        //復用LED_SegA        //按鍵復用
#define IO_KEY2                                                P01                                                        //復用LED_SegB
#define IO_KEY3                                                P02                                                        //復用LED_SegC        
#define IO_KEY4                                                P03                                                 //復用LED_SegD
#define IO_KEY5                                                P04                                                        //復用LED_SegE
//*********************** 按鍵值 *************************************
#define KEYVALUE_Key1                        0x01                                                //IO_KEY1按鍵有效的對應值        
#define KEYVALUE_Key2                        0x02                                                //IO_KEY2按鍵有效的對應值        
#define KEYVALUE_Key3                        0x04                                                //IO_KEY3按鍵有效的對應值        
#define KEYVALUE_Key4                        0x08                                                //IO_KEY4按鍵有效的對應值        
#define KEYVALUE_Key5                        0x10                                                //IO_KEY5按鍵有效的對應值


unsigned  char bdata KEYFlag =0;          //按鍵狀態寄存器
sbit        KEYFlag1                =        KEYFlag^0;                                                //IO_KEY1的按鍵狀態
sbit        KEYFlag2                =        KEYFlag^1;                                                //IO_KEY2的按鍵狀態
sbit        KEYFlag3                =        KEYFlag^2;                                                //IO_KEY3的按鍵狀態
sbit        KEYFlag4                =        KEYFlag^3;                                                //IO_KEY4的按鍵狀態
sbit        KEYFlag5                =        KEYFlag^4;                                                //IO_KEY5的按鍵狀態
unsigned char keydata_temp;                                                                //按鍵掃描值
unsigned char keydata_old;                                                                //上次的按鍵值
unsigned int  keypresscount;                                                        //按鍵按下計時寄存器
unsigned int  NOPressTime;                                                                //按鍵沒有按的計時寄存器???????

void keyscan(void)
{
        unsigned char i;
        
        wei1=0;wei2=0; wei3=0; wei4=0;wei5=0;wei6=0;
        
        P0M = 0xE0;          //0b11100000                //0為輸入,1為輸出 輸入輸出控制寄存器,將各個段碼改為輸入                                                
        P0UR = 0x1F;        //0b00011111                //內置上拉寄存器 1上拉  0無上拉

        for(i=0;i<10;i++)//20us
        {
                _nop_ ();
                _nop_ ();        
        }

        keydata_temp = 0;
        if(IO_KEY1 == 0)
        {
                keydata_temp |= KEYVALUE_Key1;
        }
        if(IO_KEY2== 0)
        {
                keydata_temp |= KEYVALUE_Key2;
        }
        if(IO_KEY3 == 0)
        {
                keydata_temp |= KEYVALUE_Key3;
        }
        if(IO_KEY4 == 0)
        {
                keydata_temp |= KEYVALUE_Key4;
        }
        if(IO_KEY5 == 0)
        {
                keydata_temp |= KEYVALUE_Key5;
  }
        P0M = 0xFF;          //0b11111111                //0為輸入,1為輸出 輸入輸出控制寄存器,將各個段碼改為輸入                                                
        P0UR = 0x00;        //0b00000000
        
}

void KeyService(void)
{        uchar t;
        if(keydata_temp == 0)
        {//按鍵未按下
                keypresscount = 0;
                keydata_old   = 0;
                NOPressTime++;
                if(NOPressTime>=2500) NOPressTime=2501;                                
        }
        else
        {
               
                if(keydata_temp == keydata_old)
                {
                        NOPressTime = 0;
                        
                        keypresscount++;
                        if(keypresscount>60000) keypresscount =60000;
                        if(keypresscount == 25)
                        {                        
                                if(keydata_temp == KEYVALUE_Key1)
                                {
                                        KEYFlag1 =1;
                                }
                                
                                if(keydata_temp == KEYVALUE_Key2)
                                {
                                        KEYFlag2 =1;                                
                                }                                
                                                        
                                if(keydata_temp == KEYVALUE_Key3)
                                {
                                        KEYFlag3 =1;                                       
                                }
                                
                                if(keydata_temp == KEYVALUE_Key4)
                                {
                                        KEYFlag4 =1;                                
                                }               
                                if(keydata_temp == KEYVALUE_Key5)
                                {
                                        KEYFlag5 =1;                                
                                }
                        }               
                }
                else
                {
                        if(keypresscount < 5)
                        {
                                keypresscount = 0;
                                keydata_old = keydata_temp;                                
                        }
                }
        }

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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