#include <reg52.h>
//sbit beep=P2^3; //位定义蜂鸣器控制I/O
sbit dula=P2^6; //位定义数码管段选控制I/O
sbit wela=P2^7; //位定义数码管位选控制I/O
unsigned char x,temp,key;
unsigned char code table[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };
void delay(unsigned char x)
{
unsigned char i,j;
for(i=x;j>0;j--)
for(j=110;j>0;j--);
}
void LED_display(unsigned int num)
{
dula=1;
P0=table[num]; //发送显示的数值
dula=0;
P0=0xFF; //消影
wela=1;
P0=0xC0;
wela=0;
}
void Key_1H()
{
P3=0xfe; //给P3.0送低电平,其余为高电平(第一行)
temp=P3; //将P3口的数据读回来
temp=temp&0xf0; //把P3口的数据与11111110相与
if(temp!=0xf0) //如果有按键按下则一定不相等,进入下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有按键按下
{
temp=P3; //判断有按键按下,读取P3口的数据
switch(temp) //根据p3口的数据,判断是第几列的按键按下
{
case 0xee: //如果P3数据等于0xee则说明是第一行第1列按键被按下1110 1110
key=0;
break;
case 0xde: //如果P3数据等于0xde则说明是第一行第2列按键被按下1101 1110
key=1;
break;
case 0xbe:
key=2; //1011 1110
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0) //检测按键是否被释放
{
temp=P3;
temp=temp&0xf0;
//beep=0; //蜂鸣器一直响
}
//beep=1; //关闭蜂鸣器
LED_display(key); //显示按键数值
P1=0xfe; //第2行亮2个灯
}
}
}
void Key_2H()
{
P3=0xfd; //给P3.0送低电平,其余为高电平(第一行)
temp=P3; //将P3口的数据读回来
temp=temp&0xf0; //把P3口的数据与11111110相与
if(temp!=0xf0) //如果有按键按下则一定不相等,进入下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有按键按下
{
temp=P3; //判断有按键按下,读取P3口的数据
switch(temp) //根据p3口的数据,判断是第几列的按键按下
{
case 0xed: //如果P3数据等于0xee则说明是第一行第1列按键被按下
key=4;
break;
case 0xdd: //如果P3数据等于0xde则说明是第一行第2列按键被按下
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0) //检测按键是否被释放
{
temp=P3;
temp=temp&0xf0;
//beep=0; //蜂鸣器一直响
}
//beep=1; //关闭蜂鸣器
LED_display(key); //显示按键数值
P1=0xfc; //第2行亮2个灯
}
}
}
void Key_3H()
{
P3=0xfb; //给P3.0送低电平,其余为高电平(第一行)
temp=P3; //将P3口的数据读回来
temp=temp&0xf0; //把P3口的数据与11111110相与
if(temp!=0xf0) //如果有按键按下则一定不相等,进入下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有按键按下
{
temp=P3; //判断有按键按下,读取P3口的数据
switch(temp) //根据p3口的数据,判断是第几列的按键按下
{
case 0xeb: //如果P3数据等于0xee则说明是第一行第1列按键被按下
key=8;
break;
case 0xdb: //如果P3数据等于0xde则说明是第一行第2列按键被按下
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0) //检测按键是否被释放
{
temp=P3;
temp=temp&0xf0;
//beep=0; //蜂鸣器一直响
}
//beep=1; //关闭蜂鸣器
LED_display(key); //显示按键数值
P1=0xf8; //第3行亮3个灯
}
}
}
void Key_4H()
{
P3=0xf7; //给P3.0送低电平,其余为高电平(第一行)
temp=P3; //将P3口的数据读回来
temp=temp&0xf0; //把P3口的数据与11111110相与
if(temp!=0xf0) //如果有按键按下则一定不相等,进入下一步检测
{
delay(10); //延时去抖动
if(temp!=0xf0) //再次判断是否有按键按下
{
temp=P3; //判断有按键按下,读取P3口的数据
switch(temp) //根据p3口的数据,判断是第几列的按键按下
{
case 0xe7: //如果P3数据等于0xee则说明是第一行第1列按键被按下
key=12;
break;
case 0xd7: //如果P3数据等于0xde则说明是第一行第2列按键被按下
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0) //检测按键是否被释放
{
temp=P3;
temp=temp&0xf0;
//beep=0; //蜂鸣器一直响
}
//beep=1; //关闭蜂鸣器
LED_display(key); //显示按键数值
P1=0xf0; //第2行亮2个灯
}
}
}
void main()
{
dula=0;
wela=0; //先关闭两个锁存器
while(1)
{
Key_1H();
Key_2H();
Key_3H();
Key_4H();
}
}
![avatar](https://profile-avatar.csdnimg.cn/63f41fd5088547bd83f273c45b5dc7a8_weixin_42411288.jpg!1)
培林将军
- 粉丝: 351
- 资源: 33
最新资源
- Linux环境中Redis的安装、配置与系统集成方法解析
- Linux环境下Git工具的安装与配置流程指引
- Linux环境下Node.js的安装与简易Web服务部署教程
- 卡尔曼信号滤波与滑动平均及高斯滤波算法的MATLAB仿真演示及详细注释文档,卡尔曼信号滤波MATLAB仿真演示与滑动平均、高斯滤波算法对比手册,卡尔曼信号滤波demo,MATLAB仿真,对比算法还有滑
- PHP最新匿名在线聊天系统源码
- 上位机与FPGA间的数据交互:通过PCIe传输与光纤通信实现DDR3数据存储与取回,PCle与FPGA通信:数据收发、DDR3存储与光纤传输一体化处理,上位机通过PCle把数据发送给FPGA,FPGA
- Linux环境中Nginx服务器的部署与配置教程
- COMSOL相场法模拟毛细管渗吸过程:油水两相流相界面移动的基准验证与准确描述,COMSOL相场法模拟毛细管渗吸过程:油水两相流相界面移动的验证与比较,COMSOL相场法模拟毛细管渗吸过程! 经典毛
- 一个用 c 语言编写的文件加密与解密源码
- 基于用户协同过滤与爬虫技术的Python景区智能推荐系统:通过评分与余弦相似度算法,精准预测用户喜好并推荐景点,基于用户协同过滤的Python景点推荐系统:利用爬虫技术实现个性化评分预测与推荐,基于用
- 2025清华:DeepSeek+DeepResearch应用报告.pdf
- 高效永磁同步电机无位置传感器控制:基于龙伯格观测器的离散化仿真与STM32代码生成解决方案,高效永磁同步电机无位置传感器控制:基于龙伯格观测器的离散化仿真与STM32代码生成解决方案,IF开环切龙伯格
- PHP盲盒商城系统源码 晒图+免签+短信验证+在线回收 ThinkPHP框架
- Simulink卡尔曼滤波算法Demo:高效处理输入信号数据,与高斯滤波及滑动平均滤波算法的对比分析,轻松修改以适应不同应用场景,Simulink卡尔曼滤波算法DEMO:输入信号数据处理及与高斯滤波和
- 一个用 c 语言编写的简单的计算器(支持表达式求值)源码
- IPTV电视直播源管理系统源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)