当前位置: 首页 > article >正文

DSP2335的按键输入key工程笔记

配置输入

时钟

方向

下拉

本文使用的是矩阵按键  12 13 14 为物理上拉输入,48 49 50为输出;

可以考虑输入AQ滤波;里面没有加;

/*
 * key.c
 *
 *  Created on: 2023年11月19日
 *      Author: peng
 */
#include"key.h"
#include"led1.h"
void key_init(void)
{
    EALLOW;
    SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK=1;
    GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;//输入
    GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;

    GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;//输入
    GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;

    GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;
    GpioCtrlRegs.GPADIR.bit.GPIO14 = 0;//输入
    GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0;
    //输出
    GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO48 = 1;//
    GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0;

    GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1;//
    GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0;

    GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO50 = 1;//
    GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0;

    EDIS;
    GpioDataRegs.GPBSET.bit.GPIO48 = 1;
    GpioDataRegs.GPBSET.bit.GPIO49 = 1;
    GpioDataRegs.GPBSET.bit.GPIO50 = 1;
}

unsigned char read_row()
{
    unsigned char temp=0;
    temp=( GpioDataRegs.GPADAT.bit.GPIO12<<0| GpioDataRegs.GPADAT.bit.GPIO13<<1| GpioDataRegs.GPADAT.bit.GPIO14<<2);
    return temp;
}
unsigned char read_line()
{
    unsigned char temp=0;
    temp= (
     GpioDataRegs.GPBDAT.bit.GPIO48
    |((GpioDataRegs.GPBDAT.bit.GPIO49&0x01)<<1)
    |((GpioDataRegs.GPBDAT.bit.GPIO50&0x01)<<2)
    );
    return temp;
}

void  _SCAN_line(char x)
{
    GpioDataRegs.GPBDAT.bit.GPIO48=~((long)0x01&x);
    GpioDataRegs.GPBDAT.bit.GPIO49=~(((long)0x02&x)>>1);
    GpioDataRegs.GPBDAT.bit.GPIO50=~(((long)0x04&x)>>2);
}
char  SCAN_row ()
{
     return GpioDataRegs.GPADAT.bit.GPIO12<<0| GpioDataRegs.GPADAT.bit.GPIO13<<1| GpioDataRegs.GPADAT.bit.GPIO14<<2;
}

char key_scan()
{
    char key = 0;
    unsigned char i = 0,tt=0x1;
    unsigned int temp=0;
    unsigned char p48=0,p49=0,p50=0;
    tt=~tt;
    static char key_up_flag = 0,key_breakup=0;

    for ( i = 0; i < 3; i++)
    {
        switch (i)//列扫描
        {
        case 0: _SCAN_line(1);

        break;
        case 1: _SCAN_line(2);
        break;
        case 2: _SCAN_line(4);
        break;
        default:
            break;
        }

        if ( (temp=(SCAN_row() & 0x07) )!= 0x07 )//被按下
        {
            DELAY_US(10000);
            if ((temp=(SCAN_row() & 0x07)) != 0x07)
            {

                key_up_flag = 1;
                switch (temp=( ~temp)&0x07 )
                {

                case 1: key = (temp - 1) * 3 + i+1; key_breakup = key;return 0;
                case 2: key = (temp- 1) * 3 + i+1 ; key_breakup = key;return 0;
                case 4: key = (temp - 1) * 3 + i+1;  key_breakup = key;return 0;

                default:key = 0;
                    break;
                }
               // key_breakup = key;
            }
        }
        else
        {
            if (key_up_flag == 1)
            {
                key_up_flag = 0;
                return key_breakup;
            }
        }
    }
    return 0;
}

void key_LED()//按键控制LED
{
    //char key = 0;
    switch (key_scan())
    {
    case 1:  LED1_TOGGLE; break;
    case 2:  LED2_TOGGLE; break;
    case 3:  LED3_TOGGLE; break;
    default: break;
    }


}


http://www.kler.cn/news/135809.html

相关文章:

  • element表格头部加入图标
  • Vue中实现div的任意移动
  • 前端为什么要工程化
  • 计算矩阵边缘元素之和
  • 七天.NET 8操作SQLite入门到实战 - SQLite 简介
  • STM32电源名词解析
  • 持续集成部署-k8s-配置与存储-配置管理:ConfigMap 的热更新
  • 使用1688开放平台API接口获取商品详情信息
  • Java值传递和引用传递
  • VAD监测(一)
  • 最全HTTP/HTTPS面试题整理(二)
  • 【开源】基于JAVA的快递管理系统
  • Uniapp连接iBeacon设备——实现无线定位与互动体验(实现篇)
  • 基础组件-流量回放(全链路流量回放预研)
  • 论文-分布式-拜占庭将军问题
  • 免疫微环境、免疫细胞浸润分析、免疫功能分析
  • 解决在pycharm中使用matplotlib画图问题
  • SpringBean的配置详解 --中
  • UnitTest框架
  • 图像处理01 小波变换
  • uni-app开发微信小程序 vue3写法添加pinia
  • 云桌面 node_modules 切换艰辛历程记录 rebuild失败记录
  • Positive Technologies 利用 PT Cloud Application Firewall 保护中小型企业的网络资源
  • (八)、基于 LangChain 实现大模型应用程序开发 | 基于知识库的个性化问答 (检索 Retrieval)
  • 实用篇-ES-RestClient查询文档
  • 使用Lychee搭建个人图片存储系统并进行远程访问设置实现公网访问本地私人图床
  • 拼图游游戏代码
  • Vatee万腾携手Wiki EXPO 2023悉尼峰会 共谱辉煌未来
  • Java code auditing
  • 力扣刷题-二叉树-完全二叉树的节点个数