找回密码
 立即注册

QQ登录

只需一步,快速开始

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

麻烦各位大神帮忙看看 矩阵键盘在1602上不显示

[复制链接]
跳转到指定楼层
楼主
#include<reg52.h>                                                                                                       
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;
sbit rw=P3^6;
sbit lcden=P3^7;

void Delay100ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 180;
        j = 73;
        do
        {
                while (--j);
        } while (--i);
}

void Delay10ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 18;
        j = 235;
        do
        {
                while (--j);
        } while (--i);
}


void write_com(uchar com)                                                                     //写命令
{
rs=0;                                          
rw=0;
lcden=0;
P0=com;
Delay100ms();
lcden=1;
Delay100ms();
lcden=0;
}
void write_date(uchar date)                                                                 //写数据
{
rs=1;
rw=0;
lcden=0;
P0=date;
Delay100ms();
lcden=1;
Delay100ms();
lcden=0;
}
void init()                                                                                         //初始化函数
{         
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);  
}
void keyscan()
{
  uchar temp,key;
  P3=0xfe;
  temp=P3;
  temp=temp&0xf0;
  if(temp!=0xf0)
  {
   Delay10ms();
   temp=P3;
   temp=temp&0xf0;
   if(temp!=0xf0)
   {
    temp=P3;
        switch(temp)
        {
         case 0xee:key=0;break;
         case 0xde:key=1;break;
         case 0xbe:key=2;break;
         case 0x7e:key=3;break;
        }
        while(temp!=0xf0)
        {
         temp=P3;
         temp=temp&0xf0;
        }
        write_com(0x80+0x40+4);
   }
}
  P3=0xfd;
  temp=P3;
  temp=temp&0xf0;
  if(temp!=0xf0)
  {
   Delay10ms();
   temp=P3;
   temp=temp&0xf0;
   if(temp!=0xf0)
   {
    temp=P3;
        switch(temp)
        {
         case 0xed:key=4;break;
         case 0xdd:key=5;break;
         case 0xbd:key=6;break;
         case 0x7d:key=7;break;
        }
        while(temp!=0xf0)
        {
         temp=P3;
         temp=temp&0xf0;
        }
        write_com(0x80+0x40+4);
   }
}
P3=0xfb;
  temp=P3;
  temp=temp&0xf0;
  if(temp!=0xf0)
  {
   Delay10ms();
   temp=P3;
   temp=temp&0xf0;
   if(temp!=0xf0)
   {
    temp=P3;
        switch(temp)
        {
         case 0xeb:key=8;break;
         case 0xdb:key=9;break;
         case 0xbb:key=10;break;
         case 0x7b:key=11;break;
        }
        while(temp!=0xf0)
        {
         temp=P3;
         temp=temp&0xf0;
        }
        write_com(0x80+0x40+4);
   }
}
P3=0xf7;
  temp=P3;
  temp=temp&0xf0;
  if(temp!=0xf0)
  {
   Delay10ms();
   temp=P3;
   temp=temp&0xf0;
   if(temp!=0xf0)
   {
    temp=P3;
        switch(temp)
        {
         case 0xe7:key=12;break;
         case 0xd7:key=13;break;
         case 0xb7:key=14;break;
         case 0x77:key=15;break;
        }
        while(temp!=0xf0)
        {
         temp=P3;
         temp=temp&0xf0;
        }
        write_com(0x80+0x40+4);
   }
}                                                                                               
}

void main()                                                                                                                                                                                          //主函数
  {
  init();
  while(1)
  {
   keyscan();
  }
}


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

使用道具 举报

沙发
ID:149451 发表于 2017-5-11 08:43 | 只看该作者
初步看,键盘扫描里最终执行的仅有向LCD写命令的函数,没有写数据的函数;另P3口与LCD控制端共用也存疑问,需考虑合适否。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:198338 发表于 2017-5-11 15:47 | 只看该作者
w1179benp 发表于 2017-5-11 08:43
初步看,键盘扫描里最终执行的仅有向LCD写命令的函数,没有写数据的函数;另P3口与LCD控制端共用也存疑问, ...

能帮忙改下吗
回复

使用道具 举报

地板
ID:111634 发表于 2017-5-11 18:35 | 只看该作者
本帖最后由 zl2168 于 2017-5-11 19:13 编辑

需先解决2个问题:键扫描和1602显示
实例62 4×4矩阵式键盘
实例67  LCD1602显示屏显示
先Proteus仿真一下,确认有效。
实例61 LCD1602显示屏显示.rar (49.26 KB, 下载次数: 9)
实例62 4×4矩阵式键盘.rar (44.79 KB, 下载次数: 5)


以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。
回复

使用道具 举报

5#
ID:381421 发表于 2018-11-1 21:23 | 只看该作者
解决了吗? 我也是矩阵键盘与1602拼在一起 不能显示
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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