📄 74ls165.c
字号:
/****************************
74LS165联级驱动构成16键键盘
***************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit out165=P1^1;
sbit SL=P1^2; //0:读端口的信息,1:保存端口
sbit CS=P1^0; //片选,0有效
sbit SCLK=P1^3;
uint readkey(void)
{
uint key=0;
uchar i=16;
CS=1;
SL=0;//读键盘数据
delay(100);
CS=0;
SL=1;//保持键盘状态
while(i--)
{
key=key<<1;
if(out165)
{key=key+1;}
SCLK=0;
delay(50);
SCLK=1;
}
return (key);
}
/***************************/
//读取扫描键盘,没有按键按下的时候,返回0,有键按下的时候,能消抖动
//等待按键释放,然后再返回按键号1-16
uchar scankey(void)
{
uint key;
key=readkey(); //读期键盘的信息,
if(key!=0xffff)
{
//delay(100); //延时消抖
key=readkey();
while(readkey()!=0xffff); //等待按键释放
if(key!=0xffff)
{
switch(key) //只处理单个键按下的情况,多个键按下不识别,当作没有键按下
{
case 0xfffe:return 0;
case 0xfffd:return 1;
case 0xfffb:return 2;
case 0xfff7:return 3;
case 0xffef:return 4;
case 0xffdf:return 5;
case 0xffbf:return 6;
case 0xff7f:return 7;
case 0xfeff:return 8;
case 0xfdff:return 9;
case 0xfbff:return 10;
case 0xf7ff:return 11;
case 0xefff:return 12;
case 0xdfff:return 13;
case 0xbfff:return 14;
case 0x7fff:return 15;
default: return 0;
}
}else return 0;
}else return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -