overdoes_218 2024-03-02 19:00 采纳率: 0%
浏览 7
已结题

关于#51单片机#的问题:51单片机LM1602的数据只能显示一个字符,在使用矩形键盘送数据的时候不能显示出来而是在显示初始位置上,达不到密码锁的效果

51单片机LM1602的数据只能显示一个字符,在使用矩形键盘送数据的时候不能显示出来而是在显示初始位置上,达不到密码锁的效果,求解答。

#include<reg51.h>
sbit lcd_RS=P2^0;
sbit lcd_RW=P2^1;
sbit lcd_E=P2^2;
char key[]={0,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30};  //键值
char key2[]={0,0xc6,0xc7,0xc8,0xc9};
char table[]="password";
char table1[]="input:";

delay(unsigned int x)          //延时
{       unsigned int i;
    for(x=0;x<100;x++)
     for(i=0;i<x;i++);
}
write_com(unsigned char com )     //写指令
{while(lcd_busy());
 
 lcd_RS=0;
 lcd_RW=0;
 delay(200);
  P0=com;
 delay(200);
 lcd_E=1;
 delay(200);
 lcd_E=0;
}
write_dat(unsigned char dat ) //写数据
{while(lcd_busy());
 lcd_RS=1;
 lcd_RW=0;
 P0=dat;
 delay(200); 
 lcd_E=1;
 delay(200);
 lcd_E=0;
}
lcd_busy()
{ unsigned char temp;
  lcd_RS=0;
  lcd_RW=1;
  delay(20);
  P0=0xff;
  delay(20);
  lcd_E=1;
  delay(20);
  temp=P0;
  delay(20);
  lcd_E=0;
  return(temp&0x80);
}
init()                       //lcd 初始化
{ write_com(0x01);
  write_com(0x38);
  write_com(0x0c);
  write_com(0x06);
}
juxingjianpan()                      //矩形键盘
{ unsigned char KeyNumber,x,y;
  P1=0x0f;              
  x=P1;
  P1=0xf0;
  y=P1;
  switch(x+y)
  { case 0xee:      KeyNumber=1;break;
      case 0xde:      KeyNumber=2;break;
    case 0xbe:      KeyNumber=3;break;
    case 0x7e:      KeyNumber=4;break;
    case 0xed:      KeyNumber=5;break;
    case 0xdd:      KeyNumber=6;break;
    case 0xbd:      KeyNumber=7;break;
    case 0x7d:      KeyNumber=8;break;
    case 0xeb:      KeyNumber=9;break;         
    case 0xdb:      KeyNumber=10;break;
  }
   if(P1==0Xee)
      { if(P1==0Xee)
    {    delay(5);
       }
    }
    if(P1==0Xed)
      { if(P1==0Xed)
      {    delay(5);
       }
    }
    if(P1==0Xeb)
      { if(P1==0Xeb)
      {    delay(5);
       }
    }
    if(P1==0Xe7)
      { if(P1==0Xe7)
      {    delay(5);
       }
    }
    if(P1==0Xde)
      { if(P1==0Xde)
      {    delay(5);
       }
    }
    if(P1==0Xdd)
      { if(P1==0Xdd)
      {    delay(5);
       }
    }
    if(P1==0Xdb)
      { if(P1==0Xdb)
      {    delay(5);
       }
    }
    if(P1==0Xd7)
      { if(P1==0Xd7)
      {    delay(5);
       }
    }
    if(P1==0Xbe)
      { if(P1==0Xbe)
      {    delay(5);
       }
    }
    if(P1==0Xbd)
      { if(P1==0Xbd)
      {    delay(5);
       }
    }
  return KeyNumber;
}

main()                         //主函数;
{ unsigned int i,KeyNum,password;
  init();  
  write_com(0x80);
  for(i=0;i<8;i++)
  {     write_dat(table[i]);  
  }
  write_com(0xc0);
  for(i=0;i<6;i++)
  {     write_dat(table1[i]);  
  }
       while(1)
    { 
      write_com(0xc6);
      KeyNum=juxingjianpan();    
       if(KeyNum)
      {      if(KeyNum<=10)
          {      
              write_dat(key[KeyNum]);
            delay(5);            
          }      
      }
            
   }
}

  • 写回答

9条回答 默认 最新

  • overdoes_218 2024-03-02 20:49
    关注

    img

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月3日
  • 赞助了问题酬金15元 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥30 基于信创PC发布的QT应用如何跨用户启动后输入中文
  • ¥20 非root手机,如何精准控制手机流量消耗的大小,如20M
  • ¥15 远程安装一下vasp
  • ¥15 自己做的代码上传图片时,报错
  • ¥15 Lingo线性规划模型怎么搭建
  • ¥15 关于#python#的问题,请各位专家解答!区间型正向化
  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆