欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2480|回復: 0
打印 上一主題 下一主題
收起左側

51單片機矩陣鍵盤輸入lcd顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:640422 發表于 2019-11-12 14:43 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
#include<reg51.h>
#include<intrins.h>
#define KEYPORT P3
#define uchar unsigned char
sbit line0=KEYPORT^0;
sbit line1=KEYPORT^1;
sbit line2=KEYPORT^2;
sbit line3=KEYPORT^3;
sbit RS=P2^2;
sbit RW=P2^1;
sbit E=P2^0;
uchar code dis[]={"0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15"};
bit iskeyinput()
{
KEYPORT=0x0f;
if((KEYPORT&0x0f)==0x0f)
   return 0;
else
   return 1;
}
uchar key_identify()
{
uchar linecode=0,rowcode=0;
uchar i;
uchar scancode=0xef;
for(i=0;i<4;i++)
  {
   KEYPORT=scancode;
   if((KEYPORT&0x0f)==0x0f)
    {
  rowcode++;
  scancode=scancode<<1|1;
}
   else
   {
    if(line0==0)linecode=0;
if(line1==0)linecode=4;
if(line2==0)linecode=8;
if(line3==0)linecode=12;
break;
   }
  }
  return linecode+rowcode;
}
void wait_key_release()
{
while(1)
{
  KEYPORT=0x0f;
  if((KEYPORT&0x0f)==0x0f)
  break;
}
}
void delay(uchar ms)
{
uchar i;
while(ms--)
{            
   for(i=0;i<250;i++)
   {
     _nop_();_nop_();_nop_();_nop_();_nop_();
   }
}
}
bit busy()
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();_nop_();_nop_();_nop_();
result=(bit)(P1&0x80);
E=0;
return result;
}
void wcmd(uchar cmd)
{
while(busy());
RW=0;
E=0;
_nop_();_nop_();
P1=cmd;
_nop_();_nop_();_nop_();_nop_();
E=1;
  _nop_();_nop_();_nop_();_nop_();
E=0;
}
void pos(uchar y,uchar x)
{
y&=0x1;
x&=0xF;
if(y==1)x|=0xc0;
if(y==0)x|=0x80;
wcmd(x);
}
void wdat(uchar dat)
{
while(busy());
RS=1;
RW=0;
E=0;
P1=dat;
_nop_();_nop_();_nop_();_nop_();
E=1;
_nop_();_nop_();_nop_();_nop_();
E=0;
}
void init()
{
wcmd(0x3c);
delay(1);
wcmd(0x0e);
delay(1);
wcmd(0x06);
delay(1);
wcmd(0x01);
delay(1);
}
void main(void)
{
uchar keycode;
unsigned int i;
uchar j;
init();
while(1)
{
  while(!iskeyinput());
  for(i=0;i<500;i++);
  if(iskeyinput())
  {
   keycode=key_identify();
   wait_key_release();
   delay(10);
   pos(0,keycode);
   j=keycode;
   while(dis[j]!=' ')
   {
    wdat(dis[j]);
    j++;
    }
   // while(1);
  }
}
}

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表