19178|13

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM8S简易版触摸按键程序 [复制链接]

看了STM8的触摸按键库,没耐心看下去,就自己写了一个简易版的单触摸按键程序,经过测试,效果还不错,和大家分享一下,有不足之处,大家讨论
简单说下硬件电路,PD6为触摸按键输入,PG1为测试用LED,PA6,PB7为灵敏度微调输入口 ,用的是500K的充放电电阻

#include "stm8s.h"
#define DC_MOTOR PA5
#define uchar unsigned char
#define uint  unsigned int
void TIME3_INIT(void);
void SYSTEM_INIT(void);
#define LED   PG1  //测试用LED
u16 i,j;
u16 n;
u16 m=100;
u8 Sensor=15;
u8 sn1=0;
u8 sn2=0;
u16 dalay;
u8 time=0;
void main(void)
{

/*系统初始*/
SYSTEM_INIT();
GPIOA->ODR=0XFF;
TIME3_INIT();//
//enableInterrupts();

GPIOD->CR2=0;
TIM3_Cmd(ENABLE);
m=0;
n=0;
GPIOD->DDR=0XC0;//PD7 PD6 OUTPUT
GPIOD->CR1=0XC0;//推挽输出
GPIOD->ODR=0X80;//PD=0X80;
while(1)
{
if(time>11)//time m为12次测试结果总和
{
if(m>(760+Sensor*2)) //760为阀值,sensor为微调
{
n=5000;//按键延时
{
GPIOG->ODR=0;
}
}
else
{
if(n>0)
{
n--;
}
else
{
GPIOG->ODR=2;
}

}
m=0;
time=0;
}
TIM3->CNTRH=0;
TIM3->CNTRL=0;   


GPIOD->CR1=0X80;//PD6 悬浮输入
GPIOD->DDR=0X80;//PD6 INPUT
while(!((GPIOD->IDR)&(0X40)))
{

}
m=TIM3->CNTRL+m;
time++;
GPIOD->DDR=0XC0;//PD7 PD6 OUTPUT
GPIOD->CR1=0XC0;//推挽输出
GPIOD->ODR=0X80;//PD=0X80;
/*微调灵敏度调节*/
if(((GPIOA->IDR)&0X40)==0)
{
  if(sn1==1)
  {
if( Sensor<30)
Sensor++;
  }
  sn1=0;
}
else
{
  sn1=1;
}
if(((GPIOB->IDR)&0X80)==0)
{
  if(sn2==1)
  {
  if( Sensor>0)
Sensor--;
  }
  sn2=0;
}
else
{
  sn2=1;
}
}
}
/*系统初始化*/
void SYSTEM_INIT(void)
{
/*设置时钟*/
CLK_HSECmd(ENABLE);
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, DISABLE);
CLK_ClockSwitchCmd(ENABLE);
CLK_ClockSecuritySystemEnable();
CLK->CKDIVR=0;
//设置引脚,输出
GPIO_Init(GPIOG,GPIO_PIN_1,GPIO_MODE_OUT_PP_HIGH_SLOW);//led
GPIO_Init(GPIOE,GPIO_PIN_0,GPIO_MODE_OUT_PP_LOW_SLOW);//OUT 1
GPIO_Init(GPIOD,GPIO_PIN_ALL,GPIO_MODE_OUT_PP_LOW_SLOW);//OUT2,3, 4 5 6 7 8
//PE0 1
//PD0 2
//PD2 3
//PD3 4
//PD4 5
//PD5 6
//PD6 7
//PD7 8
GPIO_Init(GPIOA,GPIO_PIN_5,GPIO_MODE_OUT_PP_LOW_SLOW);//DC_PWM
//输入
GPIO_Init(GPIOA,GPIO_PIN_6|GPIO_PIN_4,GPIO_MODE_IN_FL_NO_IT);//IN1,DC_ERROR
GPIO_Init(GPIOB,GPIO_PIN_ALL,GPIO_MODE_IN_FL_NO_IT);//IN2~IN9
GPIO_Init(GPIOE,GPIO_PIN_5,GPIO_MODE_IN_FL_NO_IT);//IN10
GPIO_Init(GPIOC,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_IN_FL_NO_IT);//IN10
//ADC输入通道配置
}

/*计数器初始化*/
void TIME3_INIT(void)
{
  TIM3_DeInit();
  TIM3_TimeBaseInit(0, 0XFFFF);
  //TIM3_ITConfig(0x01,ENABLE);
  TIM3_UpdateRequestConfig(TIM3_UPDATESOURCE_REGULAR);
  //TIM3_ARRPreloadConfig(ENABLE);
  //TIM3_Cmd(ENABLE);

}

touchkey.rar (1.16 KB)

此帖出自stm32/stm8论坛

最新回复

很好的经验,学习了  详情 回复 发表于 2018-2-20 09:00
点赞 关注
 

回复
举报

66

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 有谁验证一下吗?如果确实好用,将发裤子一条,
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 嗯,我也在弄STM8,过几天再测试。
此帖出自stm32/stm8论坛
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 貌似比较适合少许按键
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 楼主可否写个教程?说说触摸按键实现的步骤。
此帖出自stm32/stm8论坛
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

6
 
好,touch库简直就是脱裤子放屁,其主要目的是让人用它的产品。看他的那个破API是浪费人的生命啊,那么简单的测试原理它给绕弯绕了十万八千里。
此帖出自stm32/stm8论坛
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(中级)

7
 
芯片厂商的很多所谓的库就是将简单问题复杂化,这是他们的策略。
此帖出自stm32/stm8论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

8
 
不错,学习中
此帖出自stm32/stm8论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

9
 
嗯,我也在弄STM8,过几天再测试。
此帖出自stm32/stm8论坛
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(初级)

10
 
不能下载了....
此帖出自stm32/stm8论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

11
 
赛元集控制,LED显示,触摸按键三合一触摸MCU,可以加我Q咨询索取资料Q2593454153

4.jpg (145.16 KB, 下载次数: 3)

4.jpg

3.jpg (127.82 KB, 下载次数: 1)

3.jpg
此帖出自stm32/stm8论坛
 
 
 

回复

37

帖子

0

TA的资源

一粒金砂(中级)

12
 
其实只要能设为开漏的单片机只要接上M欧的电阻都能改为触摸按键,连89C51的P0都可以实现,挺简单的就是抗干扰和灵敏度不好平衡而已
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

13
 
其中“
  n=5000;//按键延时
  {
    GPIOG->ODR=0;
  }
是什么意思?
此帖出自stm32/stm8论坛
 
 
 

回复

22

帖子

0

TA的资源

宇宙尘埃

14
 
很好的经验,学习了
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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