key.c

来自「自己的平时一些制作 现在整理一下 与大家一起分享」· C语言 代码 · 共 89 行

C
89
字号
#include <reg51.h>

//一个7段显示表 用于显示 0--9
unsigned char code tab[16]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71}; 

/************矩阵键盘读键程序*******************/
//输入参数: void
//输出参数: unsigned char  键值
//程序设计思路:扫描法读取键值(具体见书)
//
/**********4*4矩阵键盘****************/
/************
 矩阵键盘按键值的分布,键值= 行号x4 + 列号
 
           列入     3        2        1        0          
                   P0.0-----P0.1-----P0.2-----P0.3

行出3 ----P0.4     C(F)     1(E)     4(d)     7(c)   功能(键值)
    
    2 ----P0.5     0(b)     2(A)     5(9)     8(8)
    
    1 ----P0.6     =(7)     3(6)     6(5)     9(4)
    
    0 ----P0.7     +(3)     _(2)     *(1)     /(0)


利用已有的按键程序  
*************/
unsigned char getkey()
{
    unsigned char keycode=0xff,temp,i;
    P0=0x0f;
    temp=P0&0x0f;
    if(temp!=0x0f)        //判是否有键按下
    {
       // beep=0;
        P0=0x7f;          //自第0行开始扫描输出,自列读入键值
        for(i=0;i<4;i++)
    	{
            temp=P0&0x0f;
            if(temp==0x07)     //判断第0列是否有键按下
            {    
                keycode=i*4;
            	break;
    		}
            else if(temp==0x0b)//判断第1列是否有键按下
    		{
                keycode=i*4+1;
                break;      													  
    		}
            else if(temp==0x0d)//判断第2列是否有键按下
    		{
                keycode=i*4+2;
            	break;
    		}
            else if(temp==0x0e)//判断第3列是否有键按下
    		{
                keycode=i*4+3;
            	break;
    		}
            P0=(P0>>1)|0x80;
    	}

         while((P0&0x0f)!=0x0f)   //等待释放
    	 {
             P0=0x0f;
    	 }
    //   beep=1;                    			             
        
     }
     return keycode;
}

/********程序执行结果***************/
// 按键程序测试代码,数码管一开始没有显示,
//当有按键按下时,则数码管显示按键值
//
main()
{
 unsigned char key;    //定义按键返回参数的变量
               // P2 输出段码,初始没有显示
 while(1)
    {
     key=getkey();
     if(key>=0 & key<=15) 
     P2=0;
    } 

}

⌨️ 快捷键说明

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