找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4443|回复: 2
打印 上一主题 下一主题
收起左侧

lcd1602显示矩阵键盘键值

[复制链接]
跳转到指定楼层
楼主
ID:304381 发表于 2018-4-19 14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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]);    //显示按键按下后数组中对应的值
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:301473 发表于 2018-5-15 13:24 | 只看该作者
可以 很强
回复

使用道具 举报

板凳
ID:654664 发表于 2019-12-24 08:37 | 只看该作者
没仿真图吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表