桥杯单片机设计与开发笔记(四)

发布者:等风来88888最新更新时间:2022-01-20 来源: eefocus关键字:蓝桥杯  单片机  独立按键 手机看文章 扫描二维码
随时随地手机看文章

按键几乎也是每次蓝桥杯单片机设计与开发组竞赛的必考部分,因为这是CT107D开发平台上仅有的输入设备之一,而且按键也是单片机基础开发中常见的器件。


一、独立按键

1、原理分析


用跳帽把J5的引脚2和引脚3接起来,即可使用4个独立按键(如下图):S7,S6,S5,S4。按键的一端接到GND,另一端接到P3口的低四位,所以我们只要检测连接按键的P3口的某一位是否为低电平即可确定某一按键是否被按下。但是,因为存在抖动,所以需要进行消抖处理。总之,独立按键的按键检测基本流程为:检测是否有键按下,延时消抖,再次检测是否有键按下,执行按键按下后的相应操作,松手检测。

这里写图片描述

2、示例程序


sbit S7=P3^0;

sbit S6=P3^1;

sbit S5=P3^2;

sbit S4=P3^3;

//这里以S4为例

if(S4==0)   //检测S4是否被按下

{

    delay_ms(2);   //延时消抖

    if(S4==0)   //再次检测S4是否被按下

    {

       //这里执行按键后需要执行的操作  

    }

    while(S4==0);   //松手检测

}


二、矩阵键盘

1、原理分析


用跳帽把J5的引脚1和引脚2接起来,即可使用矩阵键盘(如下图)。矩阵键盘的检测常常采用行列扫描法。先进行行扫描,给P3口赋值为0x0f,当有键按下时P3口低四位的某一位的高电平会拉低,通过检测P3口高低电平的变化即可确定是哪一行的按键被按下,然后再给P3口赋值为0xf0,同理,当有键按下时P3口的高四位的某一位的高电平会被拉低,通过检测P3口的电平变化即可确定是哪一列的按键被按下,由行列交叉可以确定唯一的一个按键。

这里写图片描述

2、示例程序


先确定行来得到键值的临时值,待确定列后将键值的临时值加上列值得到最终的键值。当然,这里的按键编号可以进行合理的自定义,不需要和以下程序完全一样。


#include

#define uchar unsigned char

#define uint unsigned int

#define temp P3

uchar key_value = 0;

void keyscan()   //按键扫描函数

{

   temp = 0x0f;

   if(temp!=0x0f)    //扫描行

   {

      delay_ms(10);    //延时消抖

      switch(temp)

      {

         case 0x0e:   key_value = 0;   break;     

         case 0x0d:   key_value = 4;   break;

         case 0x0b:   key_value = 8;   break;

         case 0x07:   key_value = 12;  break;

      }


      temp = 0xf0;    //扫描列

      if(temp == 0x70)   key_value + = 0;     while(temp == 0x70);     //松手检测

      if(temp == 0xb0)   key_value + = 1;     while(temp == 0xb0);     //松手检测

      if(temp == 0xd0)   key_value + = 2;     while(temp == 0x0d);     //松手检测

      if(temp == 0xe0)   key_value + = 3;     while(temp == 0x0e);     //松手检测

   }

}


因为CT107D单片机开发平台采用IAP15F2K61S2单片机,使用的是转接板,由转接板原理图知矩阵键盘接的是P3口的低6位与P4.2、P4.4口,即用P4.2代替了P3.6,P4.4代替了P3.7,所以需要修改部分代码。


#include

#define uchar unsigned char

#define uint unsigned int

#define temp P3

sfr P4 = 0xc0;

sbit P44 = P4^4;

sbit P42 = P4^2;

uchar key_value = 0;

void keyscan()    //按键扫描函数

{

   temp = 0x0f; P42 = 0; P44 = 0;

   if(temp!=0x0f)    //扫描行

   {

      delay_ms(10);    //延时消抖

      switch(temp)

      {

         case 0x0e:   key_value = 0;   break;

         case 0x0d:   key_value = 4;   break;

         case 0x0b:   key_value = 8;   break;

         case 0x07:   key_value = 12;  break;

      }


      temp = 0xf0; P42 = 1; P44 = 1;    //扫描列

      if(P44 == 0)       key_value + = 0;     while(P44 == 0);       //松手检测

      if(P42 == 0)       key_value + = 1;     while(P42 == 0);       //松手检测

      if(temp == 0xd0)   key_value + = 2;     while(temp == 0x0d);   //松手检测

      if(temp == 0xe0)   key_value + = 3;     while(temp == 0x0e);   //松手检测

   }

}

关键字:蓝桥杯  单片机  独立按键 引用地址:桥杯单片机设计与开发笔记(四)

上一篇:蓝桥杯单片机设计与开发笔记(二)
下一篇:蓝桥杯单片机设计与开发笔记(三)

推荐阅读最新更新时间:2024-11-07 11:06

基于MC9RS08KB12设计的8位MCU入门开发方案
MC9RS08KB12/8/4/2(RS08KB)是Freescale 公司的超低成本的入门级8位MCU,具有容易使用,设计灵活性和性能.RS08KB集成了多种外设和高效的RS08内核,支持中断,改善系统性能和节省其它元件成本. RS08KB有多达12KB闪存,256B RAM,高分辨率12路10位ADC,TPM,模块定时器和ACMP,以提供块速精密的检测和控制.目标应用在小家电,照明控制,低档热控制BLDC风扇,手持设备,电池充电器和玩具.本文介绍了MC9RS08KB12主要特性,方框图,以及DEMO9RS08KB12演示板主要特性和电路图. The MC9RS08KB12/8/4/2 (RS08KB) family inclu
[单片机]
基于MC9RS08KB12设计的8位<font color='red'>MCU</font>入门开发方案
MSP432E401Y单片机智能小车测速功能
* MSP432E401Y * Description:本函数实现定时和测速功能 * 引脚:PD0- 编码器输入信号 * * Author: Robin.J ***************************************************************************/ /* DriverLib Includes */ #include ti/devices/msp432e4/driverlib/driverlib.h /* Standard Includes */ #include common.h uint32_t count = 0; //uint32_t
[单片机]
与51单片机扩展有关的知识点
这些日子做项目,用到外部ram扩展,很是汗颜,很多基本知识点都不会,现在把不会的东西记下来,做个笔记,也和大家共享,学点知识,更好开发产品。 1.单片机中的关键字_at_:定义变量的存储地址。 2.这段程序是什么意思? #define XBYTE((char*)0x20000L) XBYTE =0x41; define XBYTE ((char*)0x20000L) 定义了XBYTE是个指向地址 0x0000L 的字符型指针(或者数组)变量XBYTE =0x41; 对数组XBYTE的第 0x8000个变量进行赋值,赋值为0x41。即对地址0x8000L的内存单元赋值为0x41。这说明你用的是带外部数据总线的51芯片,外部
[单片机]
时分多线程在单片机系统中的应用研究
引 言 随着IT技术的飞速发展,单片机应用系统几乎覆盖了社会生活的各个角落,从消费电子、通信网络、工业控制、汽车到军事等领域皆可觅其踪影;而在硬件、软件以及网络技术日益成熟的今天,其应用形式正呈现多样性和复杂性。尤其是SoC、可配置内核等性能的出现,其可裁剪性使系统设计成本大大降低,减小了系统设计工作量,为单片机应用提供了便利,在产品设计、更新换代等应用方面也备受青睐。 为适应这些纷繁的应用需求.本文就时分多线程技术在单片机中的应用进行了介绍。该方法为构建低成本、高效、便于维护的单片机系统提供了良好的体系框架结构和设计思想。 1 时分多线程结构应用 通常,在单片机应用的各种控制系统中,都或多或少地存在着诸如现场数据采集、控
[单片机]
基于单片机控制的数字电压表
1引言 由于单片机具有简单实用、高可靠性、良好的性能价格比以及体积小等优点,已经在各个技术领域得到了迅猛发展。数字电压表(DigitalVoltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC进行实时通信。目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非
[单片机]
基于<font color='red'>单片机</font>控制的数字电压表
PIC单片机以及51和AVR单片机的IO口操作方法解析
对于pic单片机的学习,很多朋友总是能充满激情,不断利用闲余时间研究pic单片机的各类技术。而谈及pic单片机,必须牵扯至51、AVR单片机。因此本文中,将探讨pic单片机以及51、AVR单片机对于IO口的操作。对于本文,希望大家认真研读,以在pic单片机的学习之路上更为精进。 一.51单片机IO口的操作 51单片机IO口的结构比较简单,每个IO口只有一个IO口寄存器Px,而且这个寄存器可以位寻址,操作起来是所有单片机里最简单的,可以直接进行总线操作也可以直接进行位操作,这也是51单片机之所以成为经典的原因之一。下例的运行坏境为Keil软件,器件为AT89S52。 #i nclude sbit bv=P2^0;//定义位变量
[单片机]
PIC<font color='red'>单片机</font>以及51和AVR<font color='red'>单片机</font>的IO口操作方法解析
51单片机的内部资源和最小系统解读
1、单片机内部资源 STC89C52:8KFLASH、512字节RAM、32个IO口、3个定时器、1个UART、8个中断源 (1)Flash(硬盘)——程序存储空间 —— 擦写10万次,断电数据不丢失,读写速度慢 (2)RAM(内存)——数据存储空间 —— 断电数据丢失,读写速度快,无限次使用 (3)SFR —— 特殊功能寄存器 2、单片机最小系统 最小系统:最少组件组成单片机可以工作的系统。 三要素: (1)、 电源电路:5V (2)、 晶振电路:11.0592MHZ、两个30PF (3)、 复位电路: P0:开漏输出,必须加上拉电阻 准双向口: 强推挽输出:电流驱动能力强 高阻态 上下拉电阻:上拉电路就是
[单片机]
51<font color='red'>单片机</font>的内部资源和最小系统解读
单片机常用功能模块的使用 Part5. 独立按键
1、连接方法: 2、使用方法: (1)、标准使用: 把对应的端口赋值高电平,即 1 ,按键按下,端口被拉低至低电平,即 0 ,通过检测该端口的电平即可判断按键是否按下。 (2)、按键去抖动: 上图看出按键按下和松开的瞬间出现机械抖动,这个抖动时间虽然很短,一般 10~15 ms,不同按键抖动不同,但对应单片机来说,很轻松就能检测到,单片机是 us 级别。但实际上只进行一次按键操作,但有可能执行了多次按键结果,这就是抖动造成的,所以大多数产品实际使用中都使用了按键去抖功能。 软件去抖原理: ①、检测到按键按下后进行 10~15 ms 延时,用于跳过这个抖动区域 ②、延时后再检测按键状态,如果没有按下表明是抖
[单片机]
<font color='red'>单片机</font>常用功能模块的使用 Part5. <font color='red'>独立</font><font color='red'>按键</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved