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

📄 jian+xianshi2.c

📁 键盘11112234567788833345678
💻 C
字号:
#include <reg51.h>
#include <intrins.h>

typedef bit  BOOL ; 

sbit rs = P2^0; 
sbit rw = P2^1;
sbit ep = P2^2;
#define key P0
unsigned char code Q[]={'0','1','2','3','4','5','6','7','8','9','.','m','V','A','W'};
//unsigned char code Q[]={0,1,2,3,4,5,6,7,8,9};
unsigned char c=0,k=0,a=0,temp1=0;
unsigned long temp=0;
unsigned char  dis1[16]={"Frequnevy:      "};

void delay(unsigned char ms)
{       // 延时子程序
 unsigned char i;
 while(ms--)
 {
  for(i = 0; i< 250; i++);
 }
}

/*void longdelay(unsigned char s)  //长延时
{
 while(s--)
 {
  delay(60);
 }
}*/


BOOL lcd_bz()
{       // 测试LCD忙碌状态
 BOOL result;
 rs = 0;
 rw = 1;
 ep = 1;
 result = (BOOL)(P1 & 0x80);
 ep = 0;
 return result; 
}

void lcd_wcmd(unsigned char cmd)
{       // 写入指令数据到LCD
 while(lcd_bz());
  rs = 0;
  rw = 0;
  ep = 0;
  P1 = cmd;
  ep = 1;
  ep = 0;  
}

void lcd_pos(unsigned char pos)
{       //设定显示位置
 lcd_wcmd(pos | 0x80);
}

void lcd_wdat(unsigned char dat) 
{       //写入字符显示数据到LCD
 while(lcd_bz());
  rs = 1;
  rw = 0;
  ep = 0;
  P1 = dat;
  ep = 1;
  ep = 0; 
}

void lcd_init()
{       //LCD初始化设定
 lcd_wcmd(0x38);   //function set
 delay(1);
 lcd_wcmd(0x38);   //function set
 delay(1);
 lcd_wcmd(0x08);   //display on/off
 delay(1);
 lcd_wcmd(0x01);   //清除LCD的显示内容
 delay(1);
 lcd_wcmd(0x06);   //entry mode set
 delay(1);
 lcd_wcmd(0x0c);   //entry mode set
 delay(1);
}

/*---------------
函数名称:display()
功能 :在LCD上显示数组的数据
说明 :先写显示地址,后写显示数据
调用 :lcd_wcmd(), lcd_pos()
入口参数:pos 写入的位置,q指向要写入的数据所在的数组
返回值 :无
----------------*/
void display(unsigned char pos, unsigned char *q)
{ 
 unsigned char i;
 //lcd_wcmd(0x01); //clear 
 //delay(10);
 lcd_pos(pos);
for(i=0;i<16;i++)
{
  lcd_wdat(*q);
  q++;
 //longdelay(2);
 //delay(1);
 } 
 
 //delay(20);

}



//...........................
//判断有无按键按下 
bit judge_hitkey()
{
  unsigned char scancode,keycode;
  scancode=0xf0;
  key=scancode;     //P1.4~P1.7全为1;
  keycode=key;
  if(keycode==0xf0)
    return(0);
	else
	  return(1);
}
//............................
unsigned char scan_key()  //判断是哪一行哪一列
{
  unsigned char scancode,keycode;
    scancode=0xef;
    
   while(scancode!=0xff)
   {
     key=scancode;
	 keycode=key;
	 if((keycode&0x0f)!=0x0f)
	 break;   //找到按键的地方,跳出
	 scancode=(keycode<<1)|0x0f;  //没找到扫描新的一行
     //display(0x00,dis1);
   }
   
   keycode=~keycode;//++k;
   return(keycode);
}
//............................
//各按键的功能
void key_Function(unsigned char keycode)
{          
 switch(keycode)
 { 
   default:
   case 0x11:
           c=Q[7];a=7;
           break;
   case 0x12:
           c=Q[8];a=8;
           break;
   case 0x14:
         c= Q[9];a=9;
           break;
   case 0x18:
           c=Q[12];
           break;
   case 0x21:
           c=Q[4];a=4;
           break;
   case 0x22:
           c=Q[5];a=5;
           break;
   case 0x24:
           c=Q[6];a=6;
           break;
   case 0x28:
           c=Q[12];
           break;
   case 0x41:
           c=Q[1];a=1;
           break;
   case 0x42:
           c=Q[2];a=2;
           break;
   case 0x44:
           c=Q[3];a=3;
           break;
   case 0x48:
           c=Q[11];
           break;
   case 0x81:
          c=Q[0];a=0;
           break;
   case 0x82:
           c=Q[10];
           break;
   case 0x84:
           c=Q[10];
           break;
   case 0x88:
           c=Q[10];
           break;
 }
}
//...............................
//按键扫描功能的实现
Key_Program()
{
  unsigned char key_code;
  if(judge_hitkey())
  {
    delay(1);
    if(judge_hitkey())
    {
      key_code=scan_key();
      while(judge_hitkey());
       k++;//temp=temp*10+a;
     key_Function(key_code);
	// return(temp);
	 }
  }
}
/////.................



main()
{
/*P0=0xff;
 P1=0xff;
 P2=0xff;*/
 lcd_init();                 // 初始化LCD   
 delay(10);
  

 while(1)
 { 
   
   if(k>6||k==0)
     {k=0;
	 dis1[10]='0';
	 dis1[11]='0';
	 dis1[12]='0';
	 dis1[13]='0';
	 dis1[14]='0';
	 dis1[15]='0';
     temp=0;
	 
	 }
   /*if(k!=temp)
   {
   switch(k)
   { default:
     case 0:break;
     case 1:dis1[15]=c;break;
	 case 2:dis1[14]=c;break;
	 case 3:dis1[13]=c;break;
	 case 4:dis1[12]=c;break;
	 case 5:dis1[11]=c;break;
	 case 6:dis1[10]=c;break;
   }
   }*/
  /* switch(k)
   {
     default:
	 case 0:break;
	 case 1:temp1=c;break;
	 case 2:temp2=c;break;
	 case 3:temp3=c;break;
	 case 4:temp4=c;break;
	 case 5:temp5=c;break;
	 case 6:temp6=c;break;
   }*/
   if(temp1!=k)
   {
   temp=temp*10+a;
   
   dis1[15]=Q[temp%10];
   dis1[14]=Q[temp/10%10];
   dis1[13]=Q[temp/100%10];
   dis1[12]=Q[temp/1000%10];
   dis1[11]=Q[temp/10000%10];
   dis1[10]=Q[temp/100000%10];
   }
    display(0x00,dis1);
	temp1=k;
	Key_Program();
 }
 }

⌨️ 快捷键说明

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