📄 3_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 + -