s3c2440学习之路-005 轮训模式读取key(按键)

发布者:快乐舞蹈最新更新时间:2021-09-09 来源: eefocus关键字:s3c2440  按键 手机看文章 扫描二维码
随时随地手机看文章

硬件平台:jz2440

软件平台:Ubuntu16.04 arm-linux-gcc-3.4.5

源码位置: https://github.com/lian494362816/C/tree/master/2440/006_key


1.原理分析

按键是常用的电子元器件,去读按键的方法主要有2种

1)轮训方式,就是需要不断的去读取按键的数值

2)中断方式,通过外部中断来实现,只有当按键 按下/松开 时才会触发,不需要不断的去读取按键的值

中断的方式配置比较复杂,本篇博客就先讲通过轮训的方式读取按键的值。


硬件原理很简单,从电源正极到地中间串联1个电阻和1个按键开关,然后2440的某个pin脚在连接上去,通过去读pin脚的电平来获取按键的数值。

当按键未按下时,读取到的就是高电平,2440获取到的就是1

当按键按下时,读取到的就是地电平,2440获取到的就是0

在这里插入图片描述

jz2440的原理图可能看上去有不同,因为分成了2个部分,1个是电阻上拉部分,1个是按键接地部分,不过最后组合起来就是上面那张图片的效果。这里有4按键,不过这次只用其中的3个。

EINT0–GPF0

EINT2–GPF2

EINT11–GPG3


jz2440按键原理图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.主要流程

2440的GPIO pin脚有不同的功能,不过一般GPIO pin脚有3种模式,输入模式、输出模式、特殊功能模式。


输出模式和输出模式好理解,特殊功能模式则是这个pin脚的特殊功能,每个pin脚都不一样。


如当做外部中断、当做LCD控制引脚等等。如要需要读取按键的数值,当然就需要配置成输入模式了。 这里只配置3个按键,因为开发板上刚好有3个led灯,可以通过led的亮灭来显示按键的状态


1)将GPF0,GPF2, GPG3 设置成输入模式, 通过GPFCON和GPGCON来控制

2)读取GPF0, GPF2,GPG3的数值。GPF0,GPF2的数值通过读取GPFDAT的第0,第2位来确定。GPG3 的数值通过去读GPGDAT的第3位来确定

3)通过死循环,不断的读取GPFDAT和GPGDAT的数值来判断按键状态

4)若按键按下,则led亮,若按键未按下,则led灭

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. 源码

key.c


/*

Input =b00

EINT0   GPF0 [1:0]

EINT2   GPF2 [5:4]

EINT11 GPG3 [7:6]

*/

int key_init(void)

{

    GPFCON &= ~(0x3 << 0);

    GPFCON &= ~(0x3 << 4);

    GPGCON &= ~(0x3 << 6);

      

    return 0;

}


按键的初始化代码很简单,将3个GPIO配置成输出模式即可


key.c


int main(void)

{

    int i = 0;

    int key_gpf_value = 0;

    int key_gpg_value = 0;


    led_init();

    key_init();


    while(1)

    {

        key_gpf_value = GPFDAT;

        key_gpg_value = GPGDAT;


        /* 1 key release */

        if (key_gpf_value & (1 << 0))

        {

            led_off(6);

        }

        else /* 0 key press */

        {

            led_on(6);

        }


        if (key_gpf_value & (1 << 2))

        {

            led_off(5);

        }

        else

        {

            led_on(5);

        }


        if(key_gpg_value & (1 <<3))

        {

            led_off(4);

        }

        else

        {

            led_on(4);

        }

    }



    return 0;

}


主函数先初始化按键和led, 然后通过while(1)不断的去读取GPFDAT,GPGDAT来获取按键的状态。 led_on, led_off 传入4,5,6 分别对应3个不同的led, 这里不做展开介绍。


这个程序只是简单的介绍如何通过轮训的方式来读取按键的值,程序主要存在2个问题:

1)实际使用中,可不能使用while(1)不停的读取按键的数值,这样做很浪费CPU。(不过以前写单片机程序就是这样做的)

2)按键存在消斗的问题,实际的电平波形是会出现来回抖动的,如下图的虚线就是判断电平高地的标准线。因为电平抖动,一次按键 按下/松开 的过程中会出现多次 按下/松开 的结果。因为程序是靠led来显示结果,如果是 按下/松开 通过串口打印结果的话,一次 按下/松开 串口可能会喷出多次不同的结果。 处理的方式就是延迟一会之后再次去读取,如果数值还是一样的话,那就是正确的结果了,否则就是抖动。

在这里插入图片描述

关键字:s3c2440  按键 引用地址:s3c2440学习之路-005 轮训模式读取key(按键)

上一篇:s3c2440学习之路-006 clock的设置
下一篇:s3c2440学习之路-004 区分nand/nor 启动

推荐阅读最新更新时间:2024-11-08 18:54

利用数字电位器实现按键保持控制
摘要:许多装置需要一个用户接口来调整温度、背光强度和电源电压等,这个用户接口需要能够避免按键调整中的误操作。若在这些装置中使用一个数字电位器,设计人员可以通过一个简单的硬件接口避免错误的调整操作。 概述 利用微控制器,可以编写一段程序抑制输入控制信号的抖动,延长开关关闭之前的延时可以防止误操作。但是,使用微处理器实现良好的用户控制接口时需要冗长的编程设计和验证过程。本文利用数字电位器设计了一个简便的硬件方案,能够保证在必要时对系统进行调整操作。 图1. 本设计采用一个扩展延时的手动复位器件和一个32抽头非易失数字电位器实现按键保持开关,用于系统调整操作。 按键保持控制的实现 图1为本文设计的原理图,用户可以通过友好的接口实现
[电源管理]
利用数字电位器实现<font color='red'>按键</font>保持控制
12864汉字液晶显示--按键电子时钟程序
#include reg52.h #include intrins.h #define uchar unsigned char void lcd_ini(); void ascii_change(void); void delay(); void wri_add(uchar com); void wri_dat(uchar com1); void shan(void); void disp(); void tkey(void); sbit cs=P1^7; sbit sid=P1^6; sbit sclk=P1^5; bit flag=1; uchar dat,count,f=1;//f测试哪个单元为当前闪烁状态 ucha
[单片机]
PIC16F877控制数码显示按键按下次数C语言程序
//数码管动态扫描,k1按下,数字+1,K2按下,数字-1,每次按下的同时,听到DD二声。 #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31); uint a; const uchar aa = {0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; void delay(uchar x)//延时函数 { uchar a; for(;x 0;x--) for(a=220;a 0;a--); } void
[单片机]
AVR单片机学习按键与数码管的程序设计
简介:按键与数码管的程序设计 AVR IO口的输入模式与上拉电阻 选择结构语句与按键的查询方式程序设计 数码管基本原理 扫描方式显示多位数码管 一、输入状态IO寄存器设置 1、DDRx 某一位置0,相应位的IO口被设置为输入 2、PORTx某一位置1,使能对应IO口相应位的上拉电阻 3、PINx的对应位是输入的数据,0或1 选择结构语句 一、关系运算符和关系表达式 小于 小于等于 = 大于 大于或等于== 不等于!= 二、逻辑运算符和逻辑表达式 逻辑与&&逻辑或||逻辑非! 三、if 语句结构 if(表达式1)语句1 else if(表达式2)语句2 else 语句3 四
[单片机]
AVR单片机学习<font color='red'>按键</font>与数码管的程序设计
iPod Touch取消物理按键为假消息
本月初曾有报道称新一代iPod Touch上惟一一个物理按键“Home”将被电容感应按键所取代,但现已证实这是一则虚假新闻。本月初,几张疑似新一代iPod Touch的照片被泄露到互联网上,照片显示iPod Touch上惟一一个物理按键“Home”将被电容感应按键所取代。日前,这组照片的原始发布者证实,这些照片是经过处理的虚假照片。   照片发布者称:“不久前我看到了一些泄露的64GB iPhone的照片,这激发了我的兴趣,于是决定制作一些虚假的128 GB iPod Touch的照片。”   于是,该发布者变拿出了相机,对着自己的iPod touch拍照,然后利用图像处理软件GIMP进行处理,最终完成了新一代iPod
[手机便携]
iPod Touch取消物理<font color='red'>按键</font>为假消息
嵌入式:S3C2410与S3C2440的区别
S3C2410A微处理器概述 SAMSUNG公司的S3C2410A芯片是一款16/32位的RISC微处理器芯片,芯片内使用了ARM公司的ARM920T内核,采用了称为AMBA(Advanced Microcontroller Bus Architecture,先进微处理器总线结构)的总线结构。 S3C2410A芯片组成介绍如下: ARM920T,内部包含两个协处理器、单独16KB指令Cache和MMU、单独16KB数据Cache和MMU等 存储器控制器,产生对SDRAM/Nor Flash/SRAM存储器芯片的控制和片选逻辑 Nand Flash控制器 中断控制器 LCD控制器,支持STN及TFT液晶显示器 带有外部请
[单片机]
嵌入式:S3C2410与<font color='red'>S3C2440</font>的区别
S3C2440⑤ | S3C2440时钟体系架构及实验
1.时钟架构 简化一下如图所示: 1.1.时钟源的选择 S3C2440的时钟源来源有两种: 外部晶振(OSC) 外部时钟信号(EXTCLK) 选择哪一路作为S3C2440的时钟源由模式控制引脚OM3和OM2引脚(的电平)决定,如何选择见下图: 以JZ2440开发板为例,其使用的是12Mhz外部晶振, 硬件电路如下: 其OM3和OM2选择引脚设置如下,选择第一种方式: 1.2.MPLL改变主时钟FCLK的控制时序(上电复位时序) 2.实验 —— LED闪烁(为了后续对比) 2.1.实验目的 使用C语言控制LED闪烁。 2.2.实验代码 启动文件与之前相同; C程序添加延时函数delay修改后如下:
[单片机]
<font color='red'>S3C2440</font>⑤ | <font color='red'>S3C2440</font>时钟体系架构及实验
专题2-通过按键玩中断\第1课-中断处理流程深度剖析-lesson1
中断概念 1、中断生命周期 串口先产生一个事件,该事件传送到中断控制器里面,中断控制器会进行相应过滤,能通过过滤,那么就交给CPU去处理。 2、中断源 2440芯片手册 6410芯片手册 3、中断过滤 4、中断处理 cpu处理方式有两种: 非向量方式: 向量方式: 总结:整个生命周期中软件的角色
[单片机]
专题2-通过<font color='red'>按键</font>玩中断\第1课-中断处理流程深度剖析-lesson1
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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