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

📄 key_in.c

📁 机械产品控制器
💻 C
字号:
#include	<reg52.h>
#include	<stdlib.h>
#include	<stdio.h>
#include	<math.h>
#include        <intrins.h>

#define         KEY_MAX		       17
#define         KEY_CONST              0xf0

extern unsigned char key_dms10;
extern bit  key_bit_press,prog_bit;

//                                0    1    2    3    4    5    6    7   8    9    10  11   12   13   14    15   16
//                                0    0    1    2    3    4    5    6   7    8    9   en   esc  sel  pog   up  down
unsigned char code key_table[]={0x00,0x21,0x18,0x14,0x12,0x28,0x24,0x22,0x48,0x44,0x42,0x82,0x81,0x41,0x11,0x88,0x84};
unsigned char code key_scan_table[]={0xfe,0xfd,0xfb,0xf7};
unsigned char key_step,key_add_step;

unsigned char  key_scan(void)
{
    unsigned char i,j,k;
    j=0;
    i=4;
    k=0;
    while(i){
        i--;
        P1=key_scan_table[i];
        _nop_();
        j=~P1;
        if(j&KEY_CONST)  k=k|j;       //    有键按下
        }
	if((k&KEY_CONST)!=0){
	     for(j=0;j<KEY_MAX;j++) {
        	if(k==key_table[j])	return (j);
		    }
	    }
        //   如果没有键按下则清除
	key_dms10=0;
        key_step=0;
	key_bit_press=0;
        key_add_step=0;
	return 0;
}


//-----------------------------------------
//-----------------------------------------
unsigned char key_in(void)
{
	unsigned char j;
	j=key_scan();
	if(!j) 	return 0;              // have key_press
	if(!key_bit_press) {
		if((j<14)&&(key_dms10>10))    key_bit_press=1;
	        if(j==14){
                   if(prog_bit) {
                        if(key_dms10>10)  key_bit_press=1;
                        }
                   else {
                        if(key_dms10>250) key_bit_press=1;
                        }
                   }     
		if(j>14){
			switch(key_step){
				case 0 :
					if(key_dms10>10) {
                                             key_bit_press=1;
                                             key_add_step++;
                                             key_step=1;
                                             }
					break;
				case 1 :
					if(key_dms10>120)	{
						key_bit_press=1;
                                                key_add_step++;
						key_step=2;
						}
					break;
				case 2:
					if(key_dms10>20)	{
						key_bit_press=1;
                                                if(key_add_step<23)  key_add_step++;
				 		}
					break;
				default:	break;
				}
			}

         return(j);
		 }
    else return(0);
}




⌨️ 快捷键说明

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