OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1966|回复: 3

电容按键不能用普通按键的方法编程吗?

[复制链接]

21

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2023-7-23
在线时间
89 小时
发表于 2023-9-2 23:12:13 | 显示全部楼层 |阅读模式
1金钱
编程之后,led都不正常了。
这是key。c的代码
#include "key.h"
#include "delay.h"

void KEY_Init(void)
{
        RCC->APB2ENR|=1<<2;
        RCC->APB2ENR|=1<<6;
        GPIOA->CRL&=0XFFFFFFF0;
        GPIOA->CRL|=0X00000008;
        GPIOE->CRL&=0XFFF00FFF;
        GPIOE->CRL|=0X00088000;
        GPIOE->ODR|=3<<3;
}

u8 KEY_Scan(u8 mode)
{
        static u8 key_up=1;
        if(mode) key_up=1;
        if(key_up&&(KEY0==0||KEY1==0||WK_UP==1||TPAD==0))
        {
                delay_ms(10);
                key_up=0;
                if(KEY0==0)return 1;
                else if(KEY1==0)return 2;
                else if(WK_UP==1)return 3;
                else if(TPAD==1)return 4;
        }else if(KEY0==1&&KEY1==1&&WK_UP==0&&TPAD==1)key_up=1;
        return 0;
}

void TPAD_Reset(void)
{
GPIOA->CRL&=0XFFFFFF0F; //PA1 输入
GPIOA->CRL|=0X00000030;  //推挽输出
GPIOA->ODR&=~(1<<1); //输出 0,放电
delay_ms(5);
GPIOA->CRL&=0XFFFFFF0F; //PA1 输入
GPIOA->CRL|=0X00000040;  //浮空输入
}


vu16 tpad_default_val=0;

u8 TPAD_Init(void)
{
u16 buf[10];
u16 temp;
u8 j,i;

for(i=0;i<10;i++)//连续读取 10 次
{
buf=TPAD;

delay_ms(10);
}
for(i=0;i<9;i++)//排序
{
for(j=i+1;j<10;j++)
{
if(buf>buf[j])//升序排列
{
temp=buf;
buf=buf[j];
buf[j]=temp;
}
}
}
temp=0;
for(i=2;i<8;i++)temp+=buf;//取中间的 8 个数据进行平均
tpad_default_val=temp/6;
//printf("tpad_default_val:%d\r\n",tpad_default_val);
if(tpad_default_val>0xFFFF/2)return 1;//初始化数值不正常!
return 0;
}


这是key。h的代码
#ifndef __KEY_H
#define __KEY_H         
#include "sys.h"

//KEY端口定义
#define KEY0 PEin(4)        //
#define KEY1 PEin(3)        //
#define WK_UP PAin(0)
#define TPAD PAin(1)

#define KEY0_PRES 1        //
#define KEY1_PRES 2        //
#define WKUP_PRES 3
#define TPAD_PRES 4

u8 KEY_Scan(u8);
void KEY_Init(void);        //初始化                                
void TPAD_Reset(void);
u8 TPAD_Init(void);

#endif


这是主函数的代码
#include "sys.h"
#include "usart.h"               
#include "delay.h"       
#include "led.h"
#include "beep.h"
#include "key.h"
//ALIENTEK精英STM32F103开发板 实验1
//跑马灯 实验  
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
int main(void)
{
        u8 key;
        Stm32_Clock_Init(9);//系统时钟设置
        delay_init(72);                  //延时初始化
        LED_Init();                          //初始化与LED连接的硬件接口
        BEEP_Init();
        KEY_Init();
        LED0=0;
        TPAD_Reset();
        TPAD_Init();

        while(1)
        {
                while(1)
                {
                        key=KEY_Scan(0);
                        if(key)
                        {
                                switch(key)
                                {
                                        case TPAD_PRES:
                                                LED1=!LED1;
                                                LED0=!LED0;
                                        TPAD_Reset();
                                        break;
                                        case WKUP_PRES:
                                                BEEP=!BEEP;
                                        break;
                                        case KEY1_PRES:
                                                LED1=!LED1;
                                        break;
                                        case KEY0_PRES:
                                                LED0=!LED0;
                                        break;
                                }
                        }else delay_ms(10);
                }
        }         
}


最佳答案

查看完整内容[请看2#楼]

那你就用tim1 按键呢是个机械开关导体 按下了导通 那就接地了或者接高 电容按键应该是叫触摸按键 手摸上去之后 改变了容值 那充放电时间就改变了 是通过这样判断的 和 机械的 判断电平不一样的
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

360

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1028
金钱
1028
注册时间
2021-2-4
在线时间
146 小时
发表于 2023-9-2 23:12:14 | 显示全部楼层
安打 发表于 2023-9-7 07:44
万一tim5和需要做别的事怎么办?

那你就用tim1
按键呢是个机械开关导体 按下了导通 那就接地了或者接高
电容按键应该是叫触摸按键

手摸上去之后 改变了容值
那充放电时间就改变了

是通过这样判断的 和 机械的 判断电平不一样的
回复

使用道具 举报

0

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
123
金钱
123
注册时间
2023-4-2
在线时间
22 小时
发表于 2023-9-4 10:57:13 | 显示全部楼层
不可以的,判断方式不一样的
回复

使用道具 举报

21

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
金钱
384
注册时间
2023-7-23
在线时间
89 小时
 楼主| 发表于 2023-9-7 07:44:19 来自手机 | 显示全部楼层
真是不可爱 发表于 2023-9-4 10:57
不可以的,判断方式不一样的

万一tim5和需要做别的事怎么办?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 15:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表