打印

STM8S简易版触摸按键程序

[复制链接]
10435|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
DLPIC|  楼主 | 2011-2-11 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看了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

沙发
香水城| | 2011-2-11 16:28 | 只看该作者
有谁验证一下吗?如果确实好用,将发裤子一条,:lol

使用特权

评论回复
板凳
sdpz| | 2011-2-11 21:27 | 只看该作者
嗯,我也在弄STM8,过几天再测试。

使用特权

评论回复
地板
zddxmu| | 2011-2-15 09:01 | 只看该作者
貌似比较适合少许按键

使用特权

评论回复
5
sdpz| | 2011-3-13 22:24 | 只看该作者
楼主可否写个教程?说说触摸按键实现的步骤。

使用特权

评论回复
6
xyxy110| | 2012-1-13 16:44 | 只看该作者
谢了,受用了。

使用特权

评论回复
7
hsbjb| | 2012-1-13 18:30 | 只看该作者
有时间验证一下

使用特权

评论回复
8
秋天落叶| | 2012-1-13 18:42 | 只看该作者
先看看,再找个时间验证一下

使用特权

评论回复
9
dfsa| | 2012-1-13 22:57 | 只看该作者
这个应该很好验证

使用特权

评论回复
10
today_lucky| | 2012-2-9 11:09 | 只看该作者
Mark!

使用特权

评论回复
11
香水城| | 2012-2-9 11:16 | 只看该作者
发条裤子吧,鼓励共享精神。

发裤子不代表帖子内容正确,请阅者自己验证,:lol

使用特权

评论回复
12
QT168X| | 2012-3-10 09:45 | 只看该作者
顶·

使用特权

评论回复
13
txcy| | 2012-3-10 11:05 | 只看该作者
很好的源代码

使用特权

评论回复
14
心愿wish| | 2012-3-21 17:29 | 只看该作者
:victory:

使用特权

评论回复
15
BLUE2008| | 2012-4-14 13:43 | 只看该作者
貌似看不出个所以然出来 能力有限:D

使用特权

评论回复
16
ailingg| | 2012-4-14 14:58 | 只看该作者
这个根本没法用吧

使用特权

评论回复
17
yybj| | 2012-4-14 20:41 | 只看该作者
有哪位大侠验证过没

使用特权

评论回复
18
lidongxin3| | 2012-4-15 14:17 | 只看该作者
没看出什么来

使用特权

评论回复
19
HORSE7812| | 2012-4-27 01:26 | 只看该作者
mark!

使用特权

评论回复
20
xiangyi0801| | 2012-10-8 17:02 | 只看该作者
MARK。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

129

帖子

1

粉丝