⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3_2.txt

📁 使用74164连接8行2列键盘的行线
💻 TXT
字号:
/*使用74164连接8行2列键盘的行线,74165连接键盘的列线,编写扫描键盘
按键的程序
D4:JP36--------G5:JP92          (74165连接键盘的列线)
D5:JP49--------G5:JP47          (74164连接键盘的行线)
A3:JP59--------G6:JP65          (P2接发光管用来检验扫描键码值)
A3:P1.0--------D5:A,B           (作为74164的数据线)
A3:P1.1--------D5:CLK           (作为74164的时钟线)
A3:P1.4--------D4:SH/~LD        (用于74165的移位加载信号)
A3:P1.5--------D4:QH            (作为74165的数据线)
A3:P1.2--------D4:CLK           (作为74165的时钟线)
*/
#include"reg51.h"
#define uchar unsigned char
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
uchar k,c1;
void delay()                      //延时
{
  uchar m,n;
  m=250;
  while(--m)
	{;}
}
uchar keyin()          //检查是否有键闭合
{
  uchar i,m,n,l;
  for(i=8;i>0;i--)
   {
     P1_0=0;
     P1_1=1;
     P1_1=0;
   }
     P1_4=0;
     delay();
     P1_4=1;
     m=P1_5;
     P1_2=0;
     P1_2=1;
     n=P1_5;
     l=2*n+m;
     l=~l;
     l=l&0x03;
     return(l);
}
void key0()
{
 uchar kl;
  void key1();	
  kl=keyin();
  if(kl) key1();
  else  delay();
}
void key1()              //去抖动
{
  uchar kel;	
  uchar key2(); 	
  delay();
  delay();
  kel=keyin();
  if(kel)   key2();
  else    delay();
}

uchar key2()              //逐行扫描,得出行列值
{
  uchar c,e,i,m,n,kmz;
  uchar num(uchar rk,uchar rc); 
  c=0xfe;
  for(k=0;k<8;k++)
   {
    for(i=8;i>0;i--)
     {
      e=c;
      P1_0=e&0x80;
      P1_1=0;
      P1_1=1;
      e=e<<1;
     }
   P1_4=0;
   delay();
   P1_4=1;
   m=P1_5;
   P1_2=0;
   P1_2=1;
   n=P1_5;
   if(!m) 
    {
     c1=0;
    kmz=num(k,c1);
    }
   else
   {
    if(!n)
    {
     c1=8;
     kmz=num(k,c1);
    }
   else 
   c=c<<1;
   }
   return(kmz);
}
}
uchar num(uchar rk,uchar rc)                 //计算键码值
{
 uchar r0;
 r0=rk+rc;
 return(r0);
}
void main()
{
  uchar lj;
  key0();
  lj=num(k,c1);
  lj=~lj;
  P2=lj;
}
  
  

  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -