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

📄 key4x4.c

📁 矩阵键盘和LCD1602显示 按单个键数字将显示1602上
💻 C
字号:
#include "reg51.h"
#include"intrins.h"
#define  uchar unsigned char
#define  uint  unsigned int
#define nop  _nop_()                    /*定义空操作指令*/
sbit lcdrs=P3^2;
sbit lcdrw=P3^3;
sbit lcden=P3^4;
unsigned char temp,num1;
unsigned char key;
unsigned char i,j;
uint count,num;
uchar code table[]={"I LOVE ME!"};
sbit K1=P2^7;
sbit K2=P2^6;
sbit K3=P2^5;
sbit K4=P2^4;
sbit K5=P2^3;
sbit K6=P2^2;
sbit K7=P2^1;
sbit K8=P2^0;
uchar keyscan();
void delay1s(void)
{

  unsigned char i,j,k;

  for(k=100;k>0;k--)

  for(i=20;i>0;i--)

  for(j=248;j>0;j--);

}



void delay(uint z)
{uchar x,y;
 for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}

void lcdwrite_com(uchar com)
{ lcdrw=0;
 lcdrs=0;
 P0=com;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;
}
void lcdwrite_data(uchar date)
{
 lcdrs=1;
 lcdrw=0;
 P0=date;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;
}
void lcdinit()
{
lcden=0;
lcdwrite_com(0x38);

lcdwrite_com(0x01);
lcdwrite_com(0x0C);
lcdwrite_com(0x06);
lcdwrite_com(0x80);

}
void delaykey()
{
  for(i=50;i>0;i--)
     for(j=200;j>0;j--);
}

void main(void)
{   lcdinit();
   while(1)
    { 
    keyscan();
    
     
    }  //while
}
uchar keyscan()
{
     P2=0x7f;
      //K1=0;
      temp=P2;
      temp=temp & 0x0f;
      if (temp!=0x0f)
        {
           delaykey();
          temp=P2;
          temp=temp & 0x0f;
          if (temp!=0x0f)
            {
              temp=P2;
              temp=temp & 0x0f;
              switch(temp)
                {
                  case 0x0e:
                    key='F';
                  lcdwrite_com(0x01);

                    break;
                  case 0x0d:
                    key='B';
                    lcdwrite_com(0x01);
                    break;
                  case 0x0b:
                    key=0X38;
                    lcdwrite_com(0x01);
                    break;
                  case 0x07:
                    key=0x34;
                    lcdwrite_com(0x01);
                    break;
                }
          //    temp=P2;

            lcdwrite_data(key);


            //  temp=temp & 0x0f;
              while(temp!=0x0f)       //释放键消抖
                {
                  temp=P2;
                  temp=temp & 0x0f;
                }
            }
        }

      P2=0xbf;
     // K2=0;
      temp=P2;
      temp=temp & 0x0f;
      if (temp!=0x0f)
        {
        delaykey();
          temp=P2;
          temp=temp & 0x0f;
          if (temp!=0x0f)
            {
              temp=P2;
              temp=temp & 0x0f;
              switch(temp)
                {
                  case 0x0e:
                    key='E';
                    lcdwrite_com(0x01);
                    break;
                  case 0x0d:
                    key='A';
                    lcdwrite_com(0x01);
                    break;
                  case 0x0b:
                    key=0X37;
                    lcdwrite_com(0x01);
                    break;
                  case 0x07:
                    key=0X33;
                   lcdwrite_com(0x01);
                    break;
                }
             // temp=P2;
              //P1^0=~P1^0;
          lcdwrite_data(key);
              //temp=temp & 0x0f;
              while(temp!=0x0f)
                {
                  temp=P2;
                  temp=temp & 0x0f;
                }
            }
        }

      P2=0xdf;
     // K3=0;
      temp=P2;
      temp=temp & 0x0f;
      if (temp!=0x0f)
        {
        delaykey();
          temp=P2;
          temp=temp & 0x0f;
          if (temp!=0x0f)
            {
              temp=P2;
              temp=temp & 0x0f;
              switch(temp)
                {
                  case 0x0e:
                    key='D';
                    lcdwrite_com(0x01);
                    break;
                  case 0x0d:
                    key=0X30;
                   lcdwrite_com(0x01);
                    break;
                  case 0x0b:
                    key=0X36;
                   lcdwrite_com(0x01);
                    break;
                  case 0x07:
                    key=0X32;
                 lcdwrite_com(0x01);
                    break;
                }
             // temp=P2;
              //P1^0=~P1^0;
            lcdwrite_data(key);
             // temp=temp & 0x0f;
              while(temp!=0x0f)
                {
                  temp=P2;
                  temp=temp & 0x0f;
                }
            }
        }

      P2=0xef;
     // K4=0;
      temp=P2;
      temp=temp & 0x0f;
      if (temp!=0x0f)
        {
         delaykey();
          temp=P2;
          temp=temp & 0x0f;
          if (temp!=0x0f)
            {
              temp=P2;
              temp=temp & 0x0f;
              switch(temp)
                {
                  case 0x0e:
                    key='C';
                    lcdwrite_com(0x01);
                    break;
                  case 0x0d:
                    key=0X39;
                  lcdwrite_com(0x01);
                    break;
                  case 0x0b:
                    key=0X35;
                lcdwrite_com(0x01);
                    break;
                  case 0x07:
                    key=0X31;
                 lcdwrite_com(0x01);
                    break;
                }
            //  temp=P2;
              //P1^0=~P1^0;
             lcdwrite_data(key);
             // temp=temp & 0x0f;
              while(temp!=0x0f)
                {
                  temp=P2;
                  temp=temp & 0x0f;
                }
              }
           }

}

⌨️ 快捷键说明

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