找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2714|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

麻煩各位大神幫忙看看 矩陣鍵盤(pán)在1602上不顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
#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)                                                                     //寫(xiě)命令
{
rs=0;                                          
rw=0;
lcden=0;
P0=com;
Delay100ms();
lcden=1;
Delay100ms();
lcden=0;
}
void write_date(uchar date)                                                                 //寫(xiě)數(shù)據(jù)
{
rs=1;
rw=0;
lcden=0;
P0=date;
Delay100ms();
lcden=1;
Delay100ms();
lcden=0;
}
void init()                                                                                         //初始化函數(shù)
{         
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()                                                                                                                                                                                          //主函數(shù)
  {
  init();
  while(1)
  {
   keyscan();
  }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:149451 發(fā)表于 2017-5-11 08:43 | 只看該作者
初步看,鍵盤(pán)掃描里最終執(zhí)行的僅有向LCD寫(xiě)命令的函數(shù),沒(méi)有寫(xiě)數(shù)據(jù)的函數(shù);另P3口與LCD控制端共用也存疑問(wèn),需考慮合適否。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:198338 發(fā)表于 2017-5-11 15:47 | 只看該作者
w1179benp 發(fā)表于 2017-5-11 08:43
初步看,鍵盤(pán)掃描里最終執(zhí)行的僅有向LCD寫(xiě)命令的函數(shù),沒(méi)有寫(xiě)數(shù)據(jù)的函數(shù);另P3口與LCD控制端共用也存疑問(wèn), ...

能幫忙改下嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:111634 發(fā)表于 2017-5-11 18:35 | 只看該作者
本帖最后由 zl2168 于 2017-5-11 19:13 編輯

需先解決2個(gè)問(wèn)題:鍵掃描和1602顯示
實(shí)例62 4×4矩陣式鍵盤(pán)
實(shí)例67  LCD1602顯示屏顯示
先Proteus仿真一下,確認(rèn)有效。
實(shí)例61 LCD1602顯示屏顯示.rar (49.26 KB, 下載次數(shù): 9)
實(shí)例62 4×4矩陣式鍵盤(pán).rar (44.79 KB, 下載次數(shù): 5)


以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil C和Proteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行。書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,程序語(yǔ)句條條有注解。
回復(fù)

使用道具 舉報(bào)

5#
ID:381421 發(fā)表于 2018-11-1 21:23 | 只看該作者
解決了嗎? 我也是矩陣鍵盤(pán)與1602拼在一起 不能顯示
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表