⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 new0001.c

📁 p89lpc915程序
💻 C
字号:
/*其他:我的按键扫描程序 [雨玄] 2005-8-21 14:54:06
 * 晶体:            7.3728MHZ
 * 看门狗:         安全极别2-常开    2.1秒溢出 
 * 日期:            04年7月
 */

#define key_bound 0x07              //占用3个口p0-p2
#define key_init 0x05               //按键的初始状态PB0,PB2-上拉,PB1高有效
#define key_port (PINB&key_bound)     //读PB口

unsigned char Task_bz=key_bound;                //按键任务标志,按下相应位置,开时为1
unsigned char KeyState=key_init;                //按键的状态
static unsigned char KeyTask,KeyVal;
static unsigned char KeyTime;                    //按键去接抖动计数器
static unsigned char DealKey;                    //按键处理标志
/********************************************
*函数说明:扫描按键
*程序说明:每100US定时到扫描一次按键端口?
*参数:无
*返回:无
********************************************/    
void scan_key(void)
{
unsigned char keybitstate;
switch(KeyTask)
        {
        case 0:     if(key_port!=KeyState) //检测到按键有变化           
                                  {               
                                        KeyVal=key_port;//把键值读进
                                        KeyTime=50;     //去抖动计数器
                                        KeyTask++;
                                    }
                    break;
        case 1:    //去抖动
                     if(key_port==KeyVal)   //比较每次读到键值,相等?
                                  { 
                                   KeyTime--;//计数器减1
                                   if(!KeyTime) KeyTask++;
                                   }
                     else           //如果不相等返到0重新开始读
                                    KeyTask=0;
                     break;
        case 2:     
                     //当按键输入口有触发时,与keybitstate对应的位为1,放开为0
                      keybitstate=KeyVal^key_init;
                      if(keybitstate&Task_bz)          //判断是否新触发
                                     {                
                                      DealKey=TRUE;    //按键处理标志置位
                                      }
                     KeyState=KeyVal;                 //把读到的键的状态存在器
                    //Task_bz有按键按下未放开时相应位置0,放开时为1.
                    Task_bz =(key_bound^keybitstate); 
                    KeyTask=0;        
                     //返回第一步,等待按键状态改变
                    break;
                }
        }
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -