zoukankan      html  css  js  c++  java
  • s5pv210——按键

    ---恢复内容开始---

    1:按键原理图

    按键按下的时候EINT2、EINT3、KP_COL0-3为低电平;

    EINT2、EINT3引脚接在GPH0_2、GPH0_3引脚,引脚配置为输入模式,当引脚检测为低电平的时候说明有按键按下,

    KP_COL0-3引脚为GPH2_0~GPH2_3,,引脚配置为输入模式,当引脚检测为低电平的时候说明有按键按下,

    2:代码实战

    轮询方式检测有无按键

    /*
     *        s5pv210裸机实验
     *        
     *        key
     *
     */
     
    
    #define _REG_GPH0CON            (*(volatile unsigned int *)0xE0200C00)
    #define _REG_GPH0DAT            (*(volatile unsigned int *)0xE0200C04)
    #define _REG_GPH2CON            (*(volatile unsigned int *)0xE0200C40)
    #define _REG_GPH2DAT            (*(volatile unsigned int *)0xE0200C44)
    
    void led_blink(void);
    void led_off(void);
    
    void key_init(void)
    {
        //EINT2配置为输入模式
        _REG_GPH0CON &= ~(0xFF<<8);    
        //GPH2_0~GPH2_3置为输入
        _REG_GPH2CON &= ~(0xFFFF<<0);
        
    }
    
    void key_polling(void)
    {
        key_init();
        while (1) {
            if (!(_REG_GPH0DAT & (0x1<<2))) {
            led_blink();
        }
            if (!(_REG_GPH0DAT & (0x1<<3))) {
            led_blink();
        }
        if (!(_REG_GPH2DAT & (0x1<<0))) {
            led_blink();
        }
        if (!(_REG_GPH2DAT & (0x1<<1))) {
            led_blink();
        }
        if (!(_REG_GPH2DAT & (0x1<<2))) {
            led_blink();
        }
        if (!(_REG_GPH2DAT & (0x1<<3))) {
            led_blink();
        }
        
        }
        
        
        
    }

     按键消抖:消抖的原理就是在处理按键的时候加上一个20ms的延时程序;代码如下:

    if (!(_REG_GPH0DAT & (0x1<<2))) {
                delay20ms();
                if (!(_REG_GPH0DAT & (0x1<<2))) {
                    led_blink();
                }
            
        }

     3:以中断模式初始化按键

    外部中断设置需要涉及到4个寄存器:

    1:接线引脚要设置为中断模式;

    2:设置中断触发的方式;

    3:中断掩码设置为使能中断;

    4:中断挂起要设置为0,发生中断以后,中断处理函数要把中断挂起为重新写为0;

    寄存器介绍:

    GPH0CON寄存器:接入中断的引脚要设置为EXT_INT中断模式

    EXT_INT_0_CON寄存器:设置中断发生的模式 上升沿 下降沿 高电平 低电平

     

    EXT_INT_0_MASK:中断掩码要设置为0; 

     

    EXT_INT_0_PEND  清中断挂起 我们初始化的时候可以通过写1来进行清除中断,中断处理完之后,我们也要向这个寄存器写1来清除中断。

     实战代码:

    #define EXT_INT_0_CON    0xE0200E00
    #define EXT_INT_2_CON    0xE0200E08
    #define EXT_INT_0_PEND    0xE0200F40
    #define EXT_INT_2_PEND    0xE0200F48
    #define EXT_INT_0_MASK    0xE0200F00
    #define EXT_INT_2_MASK    0xE0200F08
    
    #define _REG_EXT_INT_0_CON    (*(volatile unsigned int *)EXT_INT_0_CON)
    #define _REG_EXT_INT_2_CON    (*(volatile unsigned int *)EXT_INT_2_CON)
    #define _REG_EXT_INT_0_PEND    (*(volatile unsigned int *)EXT_INT_0_PEND)
    #define _REG_EXT_INT_2_PEND    (*(volatile unsigned int *)EXT_INT_2_PEND)
    #define _REG_EXT_INT_0_MASK    (*(volatile unsigned int *)EXT_INT_0_MASK)
    #define _REG_EXT_INT_2_MASK    (*(volatile unsigned int *)EXT_INT_2_MASK)
    
    
    //中断方式初始化按键
    void key_inter_init(void)
    {
        
        //ENIT2、ENIT3引脚设置为中断模式
        _REG_GPH0CON |= (0xFF<<8);
        //ENIT16、ENIT17、ENIT18、ENIT19引脚设置为中断模式
        _REG_GPH2CON |= (0xFFFF<<0);
        
        //设置ENIT2、ENIT3为下降沿触发
        _REG_EXT_INT_0_CON &= ~(0xFF<<8);
        _REG_EXT_INT_0_CON |= ((0x2<<8) | (0x2<<12));
        //设置ENIT16、ENIT17、ENIT18、ENIT19为下降沿触发
        _REG_EXT_INT_2_CON &= ~(0xFFFF<<0);
        _REG_EXT_INT_0_CON |= ((0x2<<0) | (0x2<<4) | (0x2<<8) | (0x2<<12));
        
        //使ENIT2、ENIT3能外部中断;
        _REG_EXT_INT_0_MASK &= ~(0x3<<2);
        //使ENIT16、ENIT17、ENIT18、ENIT19能外部中断;
        _REG_EXT_INT_2_MASK &= ~(0xF<<0);
    
    /*    
        //清ENIT2、ENIT3中断挂起
        _REG_EXT_INT_0_PEND |= (0x3<<2);
        //清ENIT16、ENIT17、ENIT18、ENIT19中断挂起
        _REG_EXT_INT_2_PEND |= (0xF<<0);
    
    */
        clean_int_pend();
    }
  • 相关阅读:
    【上班摸鱼】聊天机器人定时发送微博热搜
    【上班摸鱼】企业微信、钉钉、飞书自动提醒基金预估加减仓
    python HTMLTestRunner单元测试报告
    python自动发送邮件
    python unittest模块使用
    python logging模块使用
    python编码安全规范
    python EXCEL处理
    【转】bootstrap, boosting, bagging 几种方法的联系
    【转】GBDT(MART) 迭代决策树入门教程 | 简介
  • 原文地址:https://www.cnblogs.com/biaohc/p/6353954.html
Copyright © 2011-2022 走看看