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

📄 keyscan.c

📁 实现4*5键盘功能控制显示屏显示
💻 C
字号:
//#include<includes.h>
#include<stdio.h>
#include<reg52.h>
#include<intrins.h>
//#include"ziku.h"
#include"LCD19264.c"
#define nop() _nop_() /*定义空指令*/
#define ZERO            0x00					   //数字0  
#define ONE            0x01					   //数字1 
#define TWO            0x02					   //数字2 
#define THREE            0x03					   //数字3 
#define FOUR            0x04					   //数字4 
#define FIVE            0x05					   //数字5 
#define SIX            0x06					   //数字6 
#define SEVEN            0x07					   //数字7 
#define EIGHT            0x08					   //数字8 
#define NINE            0x09					   //数字10 
#define MAINBOARD    0x0A			           //主菜单 
#define SET          0x0B				       //设定 
#define REPORT       0x0C			           //报表 
#define PARAMETERS   0x0D		               //参数 
#define DOWN         0x0E				       //下移键 
#define INPUT        0x0F				       //输入键 
#define UP           0x11				       //上移键 
#define CANCEL       0x12			           //清零键 
#define DAN          0x13				       //段位 
#define CORRECTE     0x14			           //校对 
unsigned  char  keyscan(void);				//盘扫描程序 
void  delay_ms();								//延时程序 
sbit  P27=P2^7;		  //第一列  
sbit  P26=P2^6;		  //第二列 
sbit  P37=P3^7;		  //第三列 
sbit  P36=P3^6; 	  //第四列 
#define IOPORTINIT()  {P27=1;P26=1;P37=1;P36=1;P2=P2|0xFF;}

void  delay_ms()
{
  unsigned int i;
  for(i=300;i>0;i--);
}

unsigned  char keyscan()
{
/*************************扫描第一行*********************************/
	  IOPORTINIT();
	  P2=P2&0xFE;				//扫描第一行  
	  if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下  
	  {
	  	delay_ms();		 //延时去抖动  
		if((P27==0)&(P26==1)&(P37==1)&(P36==1))
			{
				return 0x0A;						//返回”主画面"对应的值 
			}
		if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
			 {
			   return 0x0B;							//返回  "设定 "	 对应的值 
			 }
		if((P27==1)&(P26==1)&(P37==0)&(P36==1))
		 	{
		 		return 0x00;						//返回 "数字0 "   对应的值 
			 }
		if((P27==1)&(P26==1)&(P37==1)&(P36==0))
		 	{
		 		return 0x07;						//返回 "数字7 "   对应的值    
			 }
	   }
 /***********************扫描第二行************************************/
		 IOPORTINIT();
	     P2=P2&0xFD;				//扫描第二行   
	  if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下  
	  {
	  	delay_ms();		 //延时去抖动  
		if((P27==0)&(P26==1)&(P37==1)&(P36==1))
			{
				return 0x0C;						//返回”报表"对应的值 
			}
		if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
		 	{
			   return 0x0D;							//返回  "参数"	 对应的值 
			 }
		 if((P27==1)&(P26==1)&(P37==0)&(P36==1))
		 	{
		 		return 0x03;						//返回 "数字3"   对应的值 
			 }
		 if((P27==1)&(P26==1)&(P37==1)&(P36==0))
		 	{
		 		return 0x08;						//返回 "数字8"   对应的值    
			 }
	  }
/****************************扫描第三行*******************************/
 		 
		 IOPORTINIT();
	     P2=P2&0xFB;				//扫描第三行   
	  if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下  
	  {
	  	delay_ms();		 //延时去抖动  
		if((P27==0)&(P26==1)&(P37==1)&(P36==1))
			{
				return 0x0E;						//返回”下移键"对应的值 
			}
		if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
		 	{
			   return 0x0F;							//返回  "输入"	 对应的值 
			 }
		if((P27==1)&(P26==1)&(P37==0)&(P36==1))
			 {
		 		return 0x02;						//返回 "数字2"   对应的值 
		 	}
		if((P27==1)&(P26==1)&(P37==1)&(P36==0))
		 	{
		 		return 0x09;						//返回 "数字9"   对应的值    
		 	}
		}

/***************************扫描第四行********************************/
		 
		 IOPORTINIT();
	     P2=P2&0xF7;				//扫描第四行   
	  if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下  
	  {
	  	delay_ms();		 //延时去抖动  
		if((P27==0)&(P26==1)&(P37==1)&(P36==1))
			{
				return 0x11;						//返回”上移键"对应的值 
			}
		if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
		 	{
			   return 0x12;							//返回  "清零"	 对应的值 
		 	}
		if((P27==1)&(P26==1)&(P37==0)&(P36==1))
		 	{
		 		return 0x01;						//返回 "数字1"   对应的值 
		 	}
		if((P27==1)&(P26==1)&(P37==1)&(P36==0))
		 	{
		 		return 0x04;						//返回 "数字4” 对应的值    
		 	}
	 }

/*****************************扫描第五行*************************************/		 
		 IOPORTINIT();
	     P2=P2&0xEF;				//扫描第五行   
	  if((P27==0)|(P26==0)|(P37==0)|(P36==0)) //有键按下  
	  {
	  	delay_ms();		 //延时去抖动  
		if((P27==0)&(P26==1)&(P37==1)&(P36==1))
			{
				return 0x13;						//返回”段位"对应的值 
			}
		if ((P27==1)&(P26==0)&(P37==1)&(P36==1))
		 	{
			   return 0x14;							//返回  "校对"	 对应的值 
		 	}
		if((P27==1)&(P26==1)&(P37==0)&(P36==1))
		 	{
		 		return 0x06;						//返回 "数字6"   对应的值 
		 	}
		if((P27==1)&(P26==1)&(P37==1)&(P36==0))
		 	{
		 		return 0x05;						//返回 "数字5"   对应的值    
		 	}
		 
		}

		return 0xff;

}
 /*
void xianshi(unsigned char m)
{
	switch(m)
	{
		case 0 : displayalb_at_xyaddr(1,2,&ziku);break;
		case 1 : displayalb_at_xyaddr(1,3,&ziku[16]);break;
		case 2 : displayalb_at_xyaddr(1,4,&ziku[32]);break;
		case 3 : displayalb_at_xyaddr(1,5,&ziku[48]);break;
		case 4 : displayalb_at_xyaddr(1,6,&ziku[64]);break;
		case 5 : displayalb_at_xyaddr(1,7,&ziku[80]);break;
		case 6 : displayalb_at_xyaddr(1,8,&ziku[96]);break;
		case 7 : displayalb_at_xyaddr(1,9,&ziku[112]);break;
		case 8 : displayalb_at_xyaddr(2,1,&ziku[128]);break;
		case 9 : displayalb_at_xyaddr(2,2,&ziku[144]);break;
		case 10: displayalb_at_xyaddr(2,3,&ziku[160]);break;
		case 11: displayalb_at_xyaddr(2,4,&ziku[176]);break;
		
		case 13: displayalb_at_xyaddr(2,5,&ziku[192]);break;
		default:
			break;
	}
}
  */
void  main()
{
		unsigned char s;
		s=0xff;
		LcmInit();
		map1_guding();
while(1)
{
		s=keyscan();
//		xianshi(s);
		switch(s)
		{
			case 11:
			    displayHZ_at_xyaddr(2,10,&tszf[256]);//显示手指指标 


				break;
			case 20:
				all_operate(0x00);					// 清除 
				map2_guding();						//显示画面2 
				break;
			case 12:
				all_operate(0x00);					// 清除 
				map3_guding();						//显示画面3  
				break;
			case 13:
				all_operate(0x00);					// 清除 
				map18_guding();						//显示画面18  
			case 19:
			    all_operate(0x00);					// 清除 
				map19_guding();						//显示画面21  
				break;
		
		}
}
}

⌨️ 快捷键说明

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