独立按键模块

1-2短接实现矩阵按键;2-3短接实现独立按键。

案例:

独立按键,S6,打开所有LED ,S7,关闭所有LED。S4 ,打开蜂鸣器,S5,关闭蜂鸣器

#include "reg52.h"  /** 独立按键接口 */
sbit S7  = P3^0;
sbit S6  = P3^1;
sbit S5  = P3^2;
sbit S4  = P3^3;//主函数
void main(void)
{while(1){if(S7 == 0){P2 = ((P2&0x1f)|0x80);P0 = 0xff;  //关闭所有LEDP2 &= 0x1f;}if(S6 == 0){P2 = ((P2&0x1f)|0x80);P0 = 0x00;  //打开所有LEDP2 &= 0x1f;}if(S5 == 0){P2 = ((P2&0x1f)|0xa0);P0 &= ~(0x01<<6);  //CloseP2 &= 0x1f;}if(S4 == 0){P2 = ((P2&0x1f)|0xa0);P0 |= (0x01<<6); //OpenP2 &= 0x1f;}}
}
/*******************************************************************************
* 文件名称:矩阵键盘实验
* 实验目的:1.掌握矩阵键盘扫描的基本原理
*           2.掌握按键扫描及消除抖动的基本原理
* 程序说明:1.使用程序前,将跳线J2调整为KBD模式
*           2.转接板上使用P4.4和P4.2代替P3.6 P3.7
* 硬件环境:IAP15F2K61S2@11.0592MHz
*******************************************************************************/#include "reg52.h"  //定义51单片机特殊功能寄存器
#include "absacc.h"sfr AUXR = 0x8E;
sfr P4   = 0xC0;   //P4
sbit P42 = P4^2;
sbit P44 = P4^4;
//  0    1    2    3    4    5    6    7    8    9   熄灭
code unsigned char tab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xFF};
unsigned char dspbuf[8] = {10,10,10,10,10,10,10,10};  //显示缓冲区
unsigned char dspcom = 0;bit key_re;
unsigned char key_press;
unsigned char key_value;bit key_flag = 0;
unsigned char intr = 0;unsigned char read_keyboard(void);
void display();//主函数
void main(void)
{unsigned char key_temp = 0xff;AUXR |= 0x80;  //1T模式,IAP15F2K61S2单片机特殊功能寄存器TMOD &= 0xF0;TL0 = 0xCD;TH0 = 0xD4;TF0 = 0;TR0 = 1;ET0 = 1;EA = 1;while(1){if(key_flag){key_flag = 0;key_temp = read_keyboard();if(key_temp != 0xFF) {dspbuf[7] = key_temp%10;dspbuf[6] = key_temp/10;}}}
}//定时器中断服务函数
void isr_timer_0(void)  interrupt 1  //默认中断优先级 1
{display();if(++intr == 10)  //1ms执行一次{intr = 0;key_flag = 1;  //10ms按键扫描标志位置1}
}//读取矩阵键盘键值:转接板中使用P42和P44代替8051引脚
//顺序中的P36和P37引脚
unsigned char read_keyboard(void)
{static unsigned char col;P3 = 0xf0;P42 = 1;P44 = 1;if((P3 != 0xf0)||(P42 != 0)||(P44 != 0)) //有按键按下key_press++;elsekey_press = 0;  //抖动if(key_press == 3){key_press = 0;key_re = 1;if(P44 == 0)         col = 1;if(P42 == 0)         col = 2;if((P3 & 0x20) == 0) col = 3;if((P3 & 0x10) == 0) col = 4;P3 = 0x0F;P42 = 0;P44 = 0;if((P3&0x01) == 0)  key_value = (col-1);if((P3&0x02) == 0)   key_value = (col+3);if((P3&0x04) == 0)  key_value = (col+7);if((P3&0x08) == 0)  key_value = (col+11);}//连续三次检测到按键被按下,并且该按键已经释放P3 = 0x0f;P42 = 0;P44 = 0;if(((key_re == 1) && (P3 == 0x0f))&&(P42 == 0)&&(P44 == 0)){key_re = 0;return key_value;}return 0xff;  //无按键按下或被按下的按键未被释放
}//显示函数
void display(void)
{P0 = 0xff;P2 = ((P2&0x1f)|0xE0);P2 &= 0x1f;P0 = 1<<dspcom;P2 = ((P2&0x1f)|0xC0);P2 &= 0x1f;P0 = tab[dspbuf[dspcom]];P2 = ((P2&0x1f)|0xE0);P2 &= 0x1f;if(++dspcom == 8) {dspcom = 0;}
}

蓝桥杯国信长天单片机--独立按键和矩阵键盘模块(七)相关推荐

  1. 蓝桥杯国信长天单片机--LED灯模块(五)

    LED等内部连接示意图 整体思路 通过74HC138芯片及74HC02芯片输入高低电平,来控制Y4C为1或0.当Y4C为1时,方可通过P0端口来控制LED灯的亮灭.当Y4C为0时,无法控制LED灯的亮 ...

  2. 蓝桥杯国信长天单片机--硬件环境(一)

    CT107D 单片机由以下功能模块组成 1.功能模块 (1)单片机芯片 配置IAP15F2K61S2单片机 (2)显示模块 配置8路LED输出L1-L8 配置8位8段共阳极数码管DS1-DS2 配置L ...

  3. 蓝桥杯国信长天单片机--串口程序设计(十)

    实验目的: 1.掌握51单片机串口工作模式及相关寄存器配置方法 2.了解51单片机波特率的计算方法 3.掌握单片机串口接收中断服务函数的设计方法 程序说明: 1.通过USB连接线连接PC机,在计算机硬 ...

  4. 蓝桥杯国信长天单片机实战--复习

    1.LED 例1:LED1和LED3点亮 #include<stc15f2k60s2.h>void main(){P2=0xA0;P0=0X00;P2=0X80;P0=0XFF;while ...

  5. 蓝桥杯国信长天单片机--程序下载(三)

    STC-ISP 程序下载 (1)打开下载界面:双击 stc-isp-15xx-v6.86.exe 运行程序,出现如图. (2)选择单片机型号:在左上方的"单片机型号"下拉列表中选择 ...

  6. 蓝桥杯国信长天单片机--软件环境(二)

    Keil Vision5 集成开发环境建立工程 第一步: 单击"Project"菜单下的"New Vision Project-"菜单项启动新工程的建立,出现新 ...

  7. 蓝桥杯国信长天单片机--数码管模块(六)

    数码管内部连接示意图 设备连接关系图 什么是位选,什么是段选? 假设我们有4个数码管,我想让某1个数码管显示对应的数字,我就需要先选中它,选中这个数码管的过程就叫位选:一般单个数码管都是8段(带小数点 ...

  8. 蓝桥杯国信长天单片机实战--数码管的动态显示

    一.原理分析 数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管 ...

  9. 蓝桥杯国信长天单片机--超声波测距设计(十一)

    理论基础 超声波模块的工作原理:单片机供给超声波信号端Trig一个最少10us长的高电平触发信号,模块自动发射8个40khz的方波,同时自动检测到信号是否返回,一旦有信号返回,Echo端输出一个高电平 ...

最新文章

  1. 面试题整理18 根据上排给出十个数,在其下排填出对应的十个数
  2. 【学习笔记】8、 字符串的格式化
  3. java jdbc url编码_java中jdbc/sql出现编码问题
  4. 【Java/JFrame/多线程】小球碰到边缘的回弹效果
  5. C# 操作office知识点汇总
  6. 如何写 go 代码 (How to Write Go Code 翻译)
  7. 托管 非托管_如何在托管的Kubernetes上备份Neo4J
  8. 轨道运营管理专业自荐书_轨道运营管理专业自荐信x
  9. android studio 安装apk失败,AndroidStudio安装apk时失败时提示INSTALL_PARSE_FAILED_NO_CERTIFICATES...
  10. ios微信下vue项目组件切换并自动播放音频的解决方案
  11. Vmware Tools安装详细步骤
  12. 怎么用Hypermesh划分球体网格
  13. 浏览器服务器响应报文查看,通过 Chrome浏览器 查看http请求报文
  14. WiFi精灵:开启手机免费上网时代
  15. 动态更换 Shape 的颜色
  16. 人工智能设计概述(二)
  17. ML - 贷款用户逾期情况分析1 - Baseline
  18. 比尔·盖茨一生总结:从恶魔到天使
  19. 一份优秀的简历该长成什么样
  20. 6.6.2 婚姻信息

热门文章

  1. 【ARM】使用Busybox构建根文件系统
  2. 论文阅读:Semantic Mapping for Mobile Robots in Indoor Scenes: A Survey
  3. 成功解决windows server 2012 r2不显示桌面计算机图标
  4. 逆光拍摄有心得!华硕鹰眼3让你照片火遍朋友圈
  5. 常用app分析个人思考
  6. Windows远程控制Android可行方案
  7. Apache Hadoop 基础设施容器化在 Uber 的实践
  8. PowerBI字段参数
  9. 什么是fortran语言之fortran语言入门
  10. 文本预处理:词的标准化