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

📄 kbsub.c

📁 基于HC908GP32的电子琴程序
💻 C
字号:
/*-----------------------------------------------------*
*文件描述:本文件包含了H08C键盘中断子函数,分别为:       *  
*(1)KB_Init:键盘初始化函数                             *
*   void KB_Init(void)                                 *
*(2)KB_Scan:扫描读取键值函数                           *
*   unsigned char KB_Scan(void)                        *
*(3)KB_Def:键值转为定义值函数                          *
*   unsigned char KB_Def(unsigned char KB_valve)       *
*-----------------------------------------------------*/
/*[以下为子程序源代码]*/
/*[头文件]*/
#include "GP32C.H"
#include "KB.h"
/*KB_Init:键盘初始化函数--------3-----------------------*
*功  能:初始化键盘中断的引脚,但未开放键盘中断         *
*参  数:无                                             *
*返  回:无                                             *
*-----------------------------------------------------*/  
void KB_Init(void)
{
	 KB_P=0x00;             //复位KB_P
	 KB_D=0b11110000;       //定定义3-0为输入,7-4为输出
	 KB_PUE=0b00001111;     //定义输入引脚有内部上拉电阻
}
/*KB_Scan:扫描读取键值函数-----------------------------*
*功  能:扫描一次4*4键盘上的按键,读取键值->*p          *
*         若无按键,*p为0xff                           *
*参  数:无                                             *
*返  回:扫描到的键值                                   *
*-----------------------------------------------------*/  
unsigned char KB_Scan1(void) 
 {
	 unsigned char line,i,tmp;
     line=0b11101111;        //使第一根列线为0(低电平)
	 for(i=1;i<=4;i++)         //将扫描4根行线
	  {	
        tmp=KB_P;            //取KB_P->tmp
        tmp|=0b11110000;     //KB_P.3-0保留,KB_P.7-4为1
        KB_P=tmp&line;       //令KB_P.n=0,n=4、5、6、7
	    asm("NOP");            //等待,消除按键抖动
	    asm("NOP");
	    tmp=KB_P;
	    tmp&=0b00001111;       //看第n行是否有键按下
	    if(tmp!=0x0f)          //本行有键按下
	     {
	        tmp=KB_P;
		    break;
		    
	     }
	     else                  //本行无键按下,扫描下一行
		    line=(line<<1)|0x01; 
	 }	
	  if(i==5)   tmp=0xff;
	  return(tmp);
 }
 
 
unsigned char KB_Scan2(void) 
 {
	 unsigned char line,i,tmp;
     line=0b01111111;        //使最后一根列线为0(低电平)
	 for(i=1;i<=4;i++)         //将扫描4根行线
	  {	
        tmp=KB_P;            //取KB_P->tmp
        tmp|=0b11110000;     //KB_P.3-0保留,KB_P.7-4为1
        KB_P=tmp&line;       //令KB_P.n=0,n=4、5、6、7
	    asm("NOP");            //等待,消除按键抖动
	    asm("NOP");
	    tmp=KB_P;
	    tmp&=0b00001111;       //看第n行是否有键按下
	    if(tmp!=0x0f)          //本行有键按下
	     {
	        tmp=KB_P;
		    break;
	     }
	     else                  //本行无键按下,扫描下一行
		    line=(line>>1)+128; 
	 }	
	  if(i==5)   tmp=0xff;
	  return(tmp);
 }

⌨️ 快捷键说明

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