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

QQ登錄

只需一步,快速開始

搜索
查看: 4529|回復(fù): 2
收起左側(cè)

lcd1602顯示矩陣鍵盤鍵值

[復(fù)制鏈接]
ID:304381 發(fā)表于 2018-4-19 14:13 | 顯示全部樓層 |閱讀模式
#include"reg52.h"
#define led P0           //定義led數(shù)碼管連在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);          //函數(shù)聲明
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)           //延時(shí)函數(shù)
{
  while(i--)
  {;}
}
void keydownup()        //矩陣按鍵掃描程序
{
char b=0;
key=0x0f;
if(key!=0x0f)
{
  delay(1000);                 //延時(shí)消抖
  if(key!=0x0f)
  {
   key=0x0f;                           //檢測(cè)列  使高四位為低,低四位為高,判斷低四位是否有低電平出現(xiàn)(有則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;                          //檢測(cè)行  使高四位為高,低四位為低,判斷高四位是否有低電平出現(xiàn)(有則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)           //判斷按鍵按下后是否松開  超時(shí)或者按鍵松開則跳出循環(huán)
   {
    delay(1000);
        b++;
   }
  }
}
}
void LcdWriteCom(uchar com)                    //寫指令函數(shù)
{
E=0;                                 //允許使能
RS=0;                                 //指令
RW=0;                                 //寫入
LCD1602_D=com;
delay(1);
E=1;                                   //寫入時(shí)序
delay(1);
E=0;
}
void WriteDat(uchar dat)                       //寫數(shù)據(jù)函數(shù)
{
E=0;                                 //允許使能
RS=1;                                 //數(shù)據(jù)
RW=0;                                 //寫入
LCD1602_D=dat;
delay(1);
E=1;                                   //寫入時(shí)序
delay(1);
E=0;
}
void Lcdxs(uchar x,uchar y,uchar dat)          //顯示一個(gè)字符的函數(shù)
{
uchar t;
if(y==1)
   t=0x80+x;
else
   t=0xc0+x;
LcdWriteCom(t);
WriteDat(dat);
}
void main()
{
LcdWriteCom(0x38);          //開顯示
LcdWriteCom(0x0c);          //開顯示不開光標(biāo)
LcdWriteCom(0x06);          //寫一個(gè)指針加1
LcdWriteCom(0x01);          //清屏
delay(100);
while(1)
{
  keydownup();                //矩陣按鍵掃描程序
  Lcdxs(0,1,lcd[a]);    //顯示按鍵按下后數(shù)組中對(duì)應(yīng)的值
}
}

回復(fù)

使用道具 舉報(bào)

ID:301473 發(fā)表于 2018-5-15 13:24 | 顯示全部樓層
可以 很強(qiáng)
回復(fù)

使用道具 舉報(bào)

ID:654664 發(fā)表于 2019-12-24 08:37 | 顯示全部樓層
沒仿真圖嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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