ch8-2.c

来自「单片机接口技术(C51版)例程源代码」· C语言 代码 · 共 50 行

C
50
字号
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int 
void dlms(void);
uchar kbscan(void);

void main(void)
  {
 	 uchar key;
 	 while(1)
 	    {
 	    	key=kbscan();/*主程序中可以根据键值通过switch-case语句执行对应的功能*/
 	    	dlms();
 	    }
  }
 
 void dlms(void)
   {
   	uchar i;
   	for(i=0;i<2000;i++); /*延时时间根据不同键的机械特性取值不同*/
   }
   
uchar kbscan(void) /*键扫描函数*/
  {
  	uchar sccode,recode;
  	P1=0xf0;/*发全0行扫描码,列线输入*/
  	if((P1&0xf0)!=0xf0) /*若有键按下*/
  	  {
  	  	dlms();         /*延时去抖动*/
  	  	if((P1&0xf0)!=0xf0) /*若键仍按下*/
  	  	  {
  	  	  	sccode=0xfe;    /*逐行扫描初值*/
  	  	  	while(sccode&0x10!=0)/*判别是否最后一行*/
  	  	  	  {
  	  	  	  	P1=sccode;/*输出行扫描码*/
  	  	  	  	if((P1&0xf0)!=0xf0)/*本行有键按下*/
  	  	  	  	    {
                        recode=(P1&0xf0)|0x0f;
  	  	  	  	    	return((~sccode)+(~recode)); /*返回键值*/
  	  	  	  	    	
  	  	  	  	   	}
  	  	  	  }
  	  	  }
  	  	 else
  	  	  {
  	  	  	sccode=(sccode<<1)|0x01;/*行扫描码左移一位,最低位补1*/
  	  	  }
  	  }
  	  return(0);
  }

⌨️ 快捷键说明

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