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

📄 编辑1.c

📁 38键小键盘程序,可以实现大小键盘的切换工作,并且接收命令和液晶显示
💻 C
📖 第 1 页 / 共 2 页
字号:
     else {return 0x20;}
     }
     j=keyvartab[x1][i];
     P1=0xff;
     P2=0x1f;
     Delay5Ms();
	   Delay5Ms();
     do{
		     key_date = P1;
		     x = P2;
         key_date &= 0x0f;
         x &= 0x1f;
         Delay5Ms();
	       Delay5Ms();
        }while(key_date!=0xff && x!=0x1f);
       return j;
     }
    return (0x20);
}*/
///////////////////////////////////
//初始化端口函数
/*void initkeyvariable()
{
   P1=0x00;
   P2=0x1f;
}
///////////////////////////////////
//获取键值函数
unsigned char readkeyvar(void)
{
   unsigned char i,j;
   unsigned char x;
   unsigned char x1;
   unsigned char key_date;
   key_date = P1;         //把行置0列置1
   x = P2;
   key_date &= 0xff;     
   if(key_date!=0x00)     //判断行是否有高
   {  
    delay(50);
    if(key_date!=0x00)    //判断行是否有高
    {   
     delay(50);
     if(key_date!=0x00)   //判断行是否有高
     {
     if(key_date==0x01)x1=0; //返回行号
     else if(key_date==0x02)x1=1;
     else if(key_date==0x04)x1=2;
     else if(key_date==0x08)x1=3;
     else if(key_date==0x10)x1=4;
     else if(key_date==0x20)x1=5;
     else if(key_date==0x40)x1=6;
     else if(key_date==0x80)x1=7;				
     else {return 0x20;}
       }
      }
     }
     P1 = 0xff;           //重新附值判断列号
     P2 = 0x00;
     x = P2; 
     x &= 0x1f;
     if(x!=0x00)          //判断列是否有高
     {
      delay(50);
      if(x!=0x00)         //判断列是否有高
      {
       delay(50);
       if(x!=0x00)        //判断列是否有高
       {
       if(x==0x01)i=0;    //返回列号
       else if(x==0x02)i=1;
       else if(x==0x04)i=2;
       else if(x==0x08)i=3;
       else if(x==0x10)i=4;				
       else {return 0x20;}
       }
      }
     }
     j=keyvartab[x1][i];   //读取键值
     buzzer = 1;           //打开蜂鸣器
     delay(20);
     buzzer = 0;
     P1=0x00;
     P2=0x1f;
     Delay5Ms();
     biaozhuiflag = 1;     //置位小键盘有键按下标志位
     return (j);
}*/
///////////////////////////////////
unsigned char readkeyvar(void)
{
	line1 = 1;
	if(hang1 == 1)
	{ delay(60);
		if(hang1 == 1)
			delay(60);
			if(hang1 == 1)
				return (A);
	}
	if(hang2 == 1)
	{ delay(60);
		if(hang2 == 1)
			delay(60);
			if(hang2 == 1)
				return (F);
	}
	if(hang3 == 1)
	{ delay(60);
		if(hang3 == 1)
			delay(60);
			if(hang3 == 1)
				return (K);
	}	
	if(hang4 == 1)
	{ delay(60);
		if(hang4 == 1)
			delay(60);
			if(hang4 == 1)
				return (P);
	}	
	if(hang5 == 1)
	{ delay(60);
		if(hang5 == 1)
			delay(60);
			if(hang5 == 1)
				return (1);
	}	
	if(hang6 == 1)
	{ delay(60);
		if(hang6 == 1)
			delay(60);
			if(hang6 == 1)
				return (4);
	}	
	if(hang7 == 1)
	{ delay(60);
		if(hang7 == 1)
			delay(60);
			if(hang7 == 1)
				return (7);
	}		
	if(hang8 == 1)
	{ delay(60);
		if(hang8 == 1)
			delay(60);
			if(hang8 == 1)
				return (~);
	}	
	line1 = 0;
	line2 = 1;
	if(hang1 == 1)
	{ delay(60);
		if(hang1 == 1)
			delay(60);
			if(hang1 == 1)
				return (B);
	}
	if(hang2 == 1)
	{ delay(60);
		if(hang2 == 1)
			delay(60);
			if(hang2 == 1)
				return (G);
	}
	if(hang3 == 1)
	{ delay(60);
		if(hang3 == 1)
			delay(60);
			if(hang3 == 1)
				return (L);
	}	
	if(hang4 == 1)
	{ delay(60);
		if(hang4 == 1)
			delay(60);
			if(hang4 == 1)
				return (Q);
	}	
	if(hang5 == 1)
	{ delay(60);
		if(hang5 == 1)
			delay(60);
			if(hang5 == 1)
				return (2);
	}	
	if(hang6 == 1)
	{ delay(60);
		if(hang6 == 1)
			delay(60);
			if(hang6 == 1)
				return (5);
	}	
	if(hang7 == 1)
	{ delay(60);
		if(hang7 == 1)
			delay(60);
			if(hang7 == 1)
				return (8);
	}		
	if(hang8 == 1)
	{ delay(60);
		if(hang8 == 1)
			delay(60);
			if(hang8 == 1)
				return (0);
	}	
	line2 = 0;
	line3 = 1;
	if(hang1 == 1)
	{ delay(60);
		if(hang1 == 1)
			delay(60);
			if(hang1 == 1)
				return (C);
	}
	if(hang2 == 1)
	{ delay(60);
		if(hang2 == 1)
			delay(60);
			if(hang2 == 1)
				return (H);
	}
	if(hang3 == 1)
	{ delay(60);
		if(hang3 == 1)
			delay(60);
			if(hang3 == 1)
				return (M);
	}	
	if(hang4 == 1)
	{ delay(60);
		if(hang4 == 1)
			delay(60);
			if(hang4 == 1)
				return (R);
	}	
	if(hang5 == 1)
	{ delay(60);
		if(hang5 == 1)
			delay(60);
			if(hang5 == 1)
				return (3);
	}	
	if(hang6 == 1)
	{ delay(60);
		if(hang6 == 1)
			delay(60);
			if(hang6 == 1)
				return (6);
	}	
	if(hang7 == 1)
	{ delay(60);
		if(hang7 == 1)
			delay(60);
			if(hang7 == 1)
				return (9);
	}		
	if(hang8 == 1)
	{ delay(60);
		if(hang8 == 1)
			delay(60);
			if(hang8 == 1)
				return (!);
	}	
	line3 = 0;
	line4 = 1;
	if(hang1 == 1)
	{ delay(60);
		if(hang1 == 1)
			delay(60);
			if(hang1 == 1)
				return (D);
	}
	if(hang2 == 1)
	{ delay(60);
		if(hang2 == 1)
			delay(60);
			if(hang2 == 1)
				return (I);
	}
	if(hang3 == 1)
	{ delay(60);
		if(hang3 == 1)
			delay(60);
			if(hang3 == 1)
				return (N);
	}	
	if(hang4 == 1)
	{ delay(60);
		if(hang4 == 1)
			delay(60);
			if(hang4 == 1)
				return (S);
	}	
	if(hang5 == 1)
	{ delay(60);
		if(hang5 == 1)
			delay(60);
			if(hang5 == 1)
				return (U);
	}	
	if(hang6 == 1)
	{ delay(60);
		if(hang6 == 1)
			delay(60);
			if(hang6 == 1)
				return (W);
	}	
	if(hang7 == 1)
	{ delay(60);
		if(hang7 == 1)
			delay(60);
			if(hang7 == 1)
				return (Y);
	}		
	if(hang8 == 1)
	{ delay(60);
		if(hang8 == 1)
			delay(60);
			if(hang8 == 1)
				return ;
	}	
	line4 = 0;
	line5 = 1;
	if(hang1 == 1)
	{ delay(60);
		if(hang1 == 1)
			delay(60);
			if(hang1 == 1)
				return (E);
	}
	if(hang2 == 1)
	{ delay(60);
		if(hang2 == 1)
			delay(60);
			if(hang2 == 1)
				return (J);
	}
	if(hang3 == 1)
	{ delay(60);
		if(hang3 == 1)
			delay(60);
			if(hang3 == 1)
				return (O);
	}	
	if(hang4 == 1)
	{ delay(60);
		if(hang4 == 1)
			delay(60);
			if(hang4 == 1)
				return (T);
	}	
	if(hang5 == 1)
	{ delay(60);
		if(hang5 == 1)
			delay(60);
			if(hang5 == 1)
				return (V);
	}	
	if(hang6 == 1)
	{ delay(60);
		if(hang6 == 1)
			delay(60);
			if(hang6 == 1)
				return (X);
	}	
	if(hang7 == 1)
	{ delay(60);
		if(hang7 == 1)
			delay(60);
			if(hang7 == 1)
				return (Z);
	}		
	if(hang8 == 1)
	{ delay(60);
		if(hang8 == 1)
			delay(60);
			if(hang8 == 1)
				return ;
	}	
	line5 = 0;
}
//////////////////////////////////////
//数字键到编码的转换函数
void numbertocode(void)
{ 
	unsigned char i;
	unsigned char TempCyc;
	unsigned char Keydata;
	unsigned char ASCII_code;
	biaozhiflag = 0;   //清有键标志位
  if (DisNum > 15)
	{
		DisplayListChar(0, 1, Cls);//清LCD第二行
		DisNum = 0; 
	} 
	Keydata = readkeyvar();
  if(Keydata == '!') //判断是否是ENTER键
  { 
  	if(atxtflag == 1) //判断是AX还是XT
  	 { SEND_byte(0x5A); } //发送编码到PC机
  	 else
  	 { SEND_byte(0x1C); }
  	 inhibit = 1;       //打开标准键盘
     return ;  	 	      //返回
  	}
		else if(Keydata == '~') //判断是否是back键
		{  
			 if(bit1_6flag == 1) //清1位数据 
				 {
				 	if(DisNum==0);			//判断当前显示位置是否是0位		     
				  else{ 
				  	   --DisNum;      //当前位置向左移一位
							 if(DisNum<16)  //判断是否是小于16个字母 
							 	{ DisplayOneChar(DisNum, 1, 0x20); } //清除一位数据
						   }
						   if(if(atxtflag == 1)  //判断是AX还是XT
						   	{ SEND_byte(0x66); } //发送编码到PC机
						   else
						   	{ SEND_byte(0x0E); }	 
					 }
					else   //清6为数据
					{
						for(i=0;i<6;i++)
						{
							if(DisNum==0);	//判断当前显示位置是否是0位					     
				      else           
				       { 
				  	    --DisNum;     //当前位置向左移一位
							  if(DisNum<16) //判断是否是小于16个字母 
							 	 { DisplayOneChar(DisNum, 1, 0x20); } //清除一位数据
						    }
						     if(if(atxtflag == 1) //判断是AX还是XT  
						   	 { SEND_byte(0x66); } //发送编码到PC机
						     else
						   	 { SEND_byte(0x0E); }	 
						   } //结束清6位数据	
					  } //结束清6位数据	   		                   
         } //结束BACK键
         
		else //数字键或字母键
			{
				 if(atxtflag == 1) //AT下的数字键或字母键
		     {
		     	for(TempCyc = 0;(ATunshift[TempCyc][1]!=Keydata)&&(TempCyc<50); TempCyc++); //查表显示
			    if (ATunshift[TempCyc][1] == Keydata) 
			    { 
				   if(numberflag == 1)
				   {  DisplayOneChar(DisNum, 1, ATunshift[TempCyc][1]); }
			      else
			      { DisplayOneChar(DisNum, 1, '*'); }
				    ASCII_code = 	ATunshift[TempCyc][0];
				    SEND_byte(ASCII_code);
				    DisNum++;
			     }  //结束解码 
			    }   //结束AT下的发送和显示数字键或字母键
			  else  //XT下的数字键或字母键
			 	{
			    for(TempCyc = 0;(XTunshift[TempCyc][1]!=Keydata)&&(TempCyc<50); TempCyc++); //查表显示
				  if (XTunshift[TempCyc][1] == Keydata) 
					 { 
			      if(numberflag == 1)
						{  DisplayOneChar(DisNum, 1, XTunshift[TempCyc][1]); }
						else
						{  DisplayOneChar(DisNum, 1, '*'); }	
				    ASCII_code = 	XTunshift[TempCyc][0];
				    SEND_byte(ASCII_code);
				    DisNum++;
   	        } //结束解码 
		      } //结束XT下的发送和显示数字键或字母键	
   	   } //结束发送和显示数字键或字母
 } //结束解码程序
 	/*	case 0x66:  // back 键
             {  
						  if(DisNum==0);						     
						    else {
						    	 --DisNum;
							     if(DisNum<16)  DisplayOneChar(DisNum, 0, 0x20);
 					           else{  DisNum-=16; 
								            DisplayOneChar(DisNum, 1, 0x20); 
                        		DisNum+=16;
                          }
						         }   	                   
              }
					break;*/
//////////////////////////小键盘扫描驱动程序开始///////////////////////////  
void main(void)
{
	unsigned char TempCyc;
  inhibit = 1;
  Delay5Ms(); //延时片刻(可不要)
  initkeyvariable();
	Delay400Ms(); //启动等待,等LCM讲入工作状态
	LCMInit(); //LCM初始化
	Delay5Ms(); //延时片刻(可不要)

	DisplayListChar(0, 0, cdle_net); //第一行显示    WELCOME!    
	DisplayListChar(0, 1, email);    //第二行显示we do our best!
	
	for (TempCyc=0; TempCyc<4; TempCyc++)
			Delay400Ms(); //延时
		  DisplayListChar(0, 1, Cls);	   //清显示
	
      IT1 = 0; //设外部中断1为低电平触发
	    EA = 1;
	    EX1 = 1; //开中断
	   do
		  {
			  if (BF)
				{
					Decode(KeyV);
				  inhibit = 0;
				  if(biaozhiflag)
				  {
				  		i=0;
				    do{	
				       numbertocode();
				       i++;
				       }while(i<100);
				    else
				     {
				     	inhibit = 1;}
				    }     
			    else
			    {
			 	   inhibit = 1;
				   EA = 1; //开中断
			     }
		      }
	       while(1);
}

⌨️ 快捷键说明

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