标题: lcd1602显示矩阵键盘键值 [打印本页]

作者: txzr    时间: 2018-4-19 14:13
标题: lcd1602显示矩阵键盘键值
#include"reg52.h"
#define led P0           //定义led数码管连在P0口
#define key P1                          //定义矩阵键盘连在P1口
#define LCD1602_D P0              //lcd I/O口连在P0口
#define uchar unsigned char
#define uint unsigned int
sbit E=P2^7;                              //定义lcd端口
sbit RW=P2^5;
sbit RS=P2^6;
void LcdWriteCom(uchar com);          //函数声明
void WriteDat(uchar dat);
void Lcdxs(uchar x,uchar y,uchar dat);
uchar code lcd[]={0x31,0x32,0x33,0x2b,0x34,0x35,0x36,0x2d,0x37,0x38,0x39,0x2a,0x23,0x30,0x2f,0x3d};    //   123+456-789*#0/=
uchar a;
void delay(uint i)           //延时函数
{
  while(i--)
  {;}
}
void keydownup()        //矩阵按键扫描程序
{
char b=0;
key=0x0f;
if(key!=0x0f)
{
  delay(1000);                 //延时消抖
  if(key!=0x0f)
  {
   key=0x0f;                           //检测列  使高四位为低,低四位为高,判断低四位是否有低电平出现(有则key!=0x0f)
   switch(key)
   {
    case 0x07:a=0;break;
        case 0x0b:a=1;break;
        case 0x0d:a=2;break;
        case 0x0e:a=3;break;
   }
   key=0xf0;                          //检测行  使高四位为高,低四位为低,判断高四位是否有低电平出现(有则key!=0xf0)
   switch(key)
   {
    case 0x70:a=a;   break;
        case 0xb0:a=a+4; break;
        case 0xd0:a=a+8; break;
        case 0xe0:a=a+12;break;
   }
   while((b<50)&&key!=0xf0)           //判断按键按下后是否松开  超时或者按键松开则跳出循环
   {
    delay(1000);
        b++;
   }
  }
}
}
void LcdWriteCom(uchar com)                    //写指令函数
{
E=0;                                 //允许使能
RS=0;                                 //指令
RW=0;                                 //写入
LCD1602_D=com;
delay(1);
E=1;                                   //写入时序
delay(1);
E=0;
}
void WriteDat(uchar dat)                       //写数据函数
{
E=0;                                 //允许使能
RS=1;                                 //数据
RW=0;                                 //写入
LCD1602_D=dat;
delay(1);
E=1;                                   //写入时序
delay(1);
E=0;
}
void Lcdxs(uchar x,uchar y,uchar dat)          //显示一个字符的函数
{
uchar t;
if(y==1)
   t=0x80+x;
else
   t=0xc0+x;
LcdWriteCom(t);
WriteDat(dat);
}
void main()
{
LcdWriteCom(0x38);          //开显示
LcdWriteCom(0x0c);          //开显示不开光标
LcdWriteCom(0x06);          //写一个指针加1
LcdWriteCom(0x01);          //清屏
delay(100);
while(1)
{
  keydownup();                //矩阵按键扫描程序
  Lcdxs(0,1,lcd[a]);    //显示按键按下后数组中对应的值
}
}


作者: tian300    时间: 2018-5-15 13:24
可以 很强
作者: 夏末的pangdun    时间: 2019-12-24 08:37
没仿真图吗





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1