📄 key1.c
字号:
//****************************************************
//实现功能:本程序实现把键盘的输入码型按二进制的方式在
// p0口显示,若果没有按键按下P0的灯全部亮
//目标板:至强51开发板
//开发商 :电子开发网www.dzkf.com (专业提供开发方案,
// 电子元器件网上订购,单片机培训服务)
//对开发板有什么疑问,请上我们的论坛bbs.dzkf.com探讨
//****************************************************
#include <reg51.h>
//********************宏定义**************************
#define p_key P1//宏定义键盘接口是P1
//****************************************************
//******************时间延迟函数**********************
//描 述:用指令实现延时一段时间
//入口参数:int i,为时间延迟参数
//出口参数:无
//设计人:ycj
//最后修改:时间(2006.4.24) 修改人(ycj)
//****************************************************
void delay_time(int i)
{
while(i)
i--;
}
//******************按键扫描函数**********************
//描 述:对4*4键盘进行扫描,程序只适合4*4键盘使用,
// 键盘占用一组完整的i/o口,在使用这个程序前
// 要宏定义p_key为用户实际连接键盘的i/o口
// #define p_key Pn;//(n=0、1、2、3)
//入口参数:无
//返回参数:若有检测到按键就返回按键的编号,否则返回0xff
//设计人:ycj
//最后修改:时间(2006.4.24)修改人(ycj)
//****************************************************
unsigned char read_key(void)
{
unsigned char j,key,key_buf=0;
p_key=0xff;
//检测是否有建按下//
p_key=0xf0;
key=p_key;
if(key==0xf0)
{
return(0xff);//没按键按下,返回0xff
}
//有按下,延时去抖//
delay_time(5000);
//确认是否有建按下//
p_key=0xf0;
key=p_key;
if(key==0xf0)
{
return(0xff);//没按键按下,返回0xff
}
//真的有按键按下,扫描是哪一行有按键按下//
for(j=0;j<4;j++)
{key=p_key&(0x10<<j);
if (key)
{
key=p_key;
}
else
{
key_buf=j*4;
p_key=~(0x10<<j);//第j行的按键按下了,第j行输出0,其他的i/o口输出1
//扫描是第j行的哪个按键按下//
for(j=0;j<4;j++)
{
key=p_key&(1<<j);
if (key)
{
key=p_key;
}
else
{
key_buf+=j;
return(key_buf);//扫描到按键的确定位置,返回按键的编号
}
}
}
}
//没扫描到按键,//
return(0xff);
}
//*****************主程序**********************
//描 述:把键盘的输入码型按二进制的方式在p0
// 口显示,若没有按键按下P0的灯全部亮
//入口参数:无
//返回参数:无
//设计人:ycj
//最后修改:时间(2006.4.24) 修改人(ycj)
//*****************************************
int main(void)
{
unsigned char i;
while(1)
{
i=read_key(); //调用键盘子程序
P0=~i; //在P0口显示键盘的值
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -