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

📄 key.c

📁 液晶屏显示程序
💻 C
字号:
#include	<reg52.h>
#include	<stdlib.h>
#include	<stdio.h>
#include	<math.h>
#include        <intrins.h>
#include    "define.h"
#include    "function.h"


extern unsigned char key_dms10;
bit  key_bit_press;



//                                   mode    enter     mode_enter   up      next      mode_down
//                                        set     esc       mode_esc   down      back      mode_up
//                                0    1    2    3    4    5    6    7   8    9   10
//                                0    0    1    2    3    4    5    6   7    8    9
//unsigned char code key_table[]={0x00,0xa8,0xb8,0xb0,0x0a,0x12,0x22,0x21,0xb2,0x09,0x11};   // for fzq
unsigned char code key_table[]={0x00,0x09,0x11,0x21,0x22,0x29,0x2b,0x24,0x0c,0x0a,0x14,0x0d,0x2d};     // for cpu
unsigned char code key_scan_table[]={0x3e,0x3d,0x3b};
unsigned char key_step,key_add_step;

unsigned char  key_scan(void)
{
    unsigned char i,j,k;
    k=0;
    i=3;
    while(i){
        i--;
        P2=(P2&0xc0)|key_scan_table[i];
        _nop_();
        j=P2;
        j=(~j)&0x3f;
        if(j&KEY_CONST)  k=k|j;
        }
    if(k){
        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<9)&&(key_dms10>10)) {
			key_bit_press=1;
			}

		if(j>8){
			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);
}

void key_deal(void)
{
        unsigned char i;
        i=key_in();
        if(!key_bit_press) return;
        if(!i)  return;
    //    dis_last_time=0;
        if(GROUND_LED)  GROUND_LED=0;    //    开背景灯
    	switch(i){
	     case KEY_MODE:
                mode_sub();
	     break;
	     case KEY_SET:
                set_sub();//
	     break;
	     case KEY_ENTER:
                enter_sub();
	     break;
	     case KEY_ESC:
                esc_sub();
	     break;
	     case KEY_MODE_ENTER:
                mode_enter_sub();
	     break;
	     case KEY_MODE_ESC:
                  mode_esc_sub();
	     break;
             case KEY_UP:
                  up_sub();
             break;
	     case KEY_DOWN:
                  down_sub();
	     break;
	     case KEY_NEXT:
                 next_sub();
	     break;
	     case KEY_BACK:
                 back_sub();
	     break;
		 case KEY_MODE_DOWN:
                 mode_down_sub();
	     break;
		 case KEY_MODE_UP:
                 mode_up_sub();
	     break;
         
	     default:	break;
	     }

}


⌨️ 快捷键说明

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