矩阵键盘

#include<reg51.h>
#include<stdio.h>
#include<stdlib.h> 
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define nop _nop_()
sbit pc=P2^0;
sbit pd=P2^1;
code uchar table[16]={0xfc,0x60,0xda,0xF2,0x66,
                      0xB6,0xBE,0xE0,0xFE,0xf6,
       0x10,0x11,0x12,0x13,0x14,0x15};
uchar keycode;
//----------------------------------------------
void sendData(char c)
{
  char i;
  bit temp;
  c=~c;
  for(i=0;i<8;i++)
      {
    if (c&0xfe==0xfe) temp=0;
    else temp=1;
    pc=0;
    pd=temp;
    pc=1;
    c>>=1;
  }
}
//---------------------------------
void delay2ms()
{
  uchar t=255;
  while(t--);
  t=52;
  while(t--);
}
//---------------------------------
void delay10ms()
{
  uchar i=5;
  while(i--) delay2ms();
}
//---------------------------------
void detectkey(void)
{
  uchar key,line,col;
  P1=0xf0;
  key=P1&0xf0;
  if(key!=0xf0)
  {
    delay10ms();
P1=0xf0;
    key=P1&0xf0;
if(key!=0xf0) //confirm
    {
   if(key==0xe0) line=0;
   if(key==0xd0) line=1;
      if(key==0xb0) line=2;
      if(key==0x70) line=3;
   P1=0xfe;
   key=P1&0xf0;          
      if(key!=0xf0) col=0;
   P1=0xfd;
    key=P1&0xf0;
   if(key!=0xf0) col=1;
      P1=0xfb;
   key=P1&0xf0;
   if(key!=0xf0) col=2;
   
      P1=0xf7;
   key=P1&0xf0;
   if(key!=0xf0) col=3;
      keycode=(line*4+col);
   sendData(table[keycode]);
      P1=0xf0;
      key=P1&0xf0;
      while(key!=0xf0)
      {
        P1=0xf0;
        key=P1&0xf0;
      };//wait until release
    }
  }
}
//==================================
void main(void)
{
  while(1) detectkey(); 
}

期待 发表于09-17 14:59 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

期待
期待(总统)
金币:32857个|学分:64868个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号