基于STM8S003f3的单键触摸开关制作

提示:设计资料在文章末尾有链接下载

功能需求:

1. 单按触摸按键关闭/开启连接的用电器电源

2. 双击触摸按键延时5分钟关闭连接的用电器电源

需求分析:

  1.  控制部分:单片机——要求引脚少,因为需要使用的引脚特别少。
  2. 触摸部分:专业触摸芯片——支持单个按键
  3. 继电器部分:用于控制用电器电源——5V控制220V
  4. 电源部分:220V转5V稳定模块——给单片机系统供电
  5. LED灯指示灯:用于夜间指示开关位置
  6. 外壳部分:兼容现有常见的86型开关

根据上述分析:

继电器采用固态的继电器,这样开关使用寿命可以大在提高;

单片机供电电源采用220V转5V模块;

单片机芯片采用stm8s003f3价格便宜引脚少

外壳采用成熟且使用广泛的86型开关

硬件设计:

查找资料

1. 先上网查找单按键触摸芯片。比如:TTP223-BA6。下载数据手册

2. 进入st官网www.st.com,然后在搜索栏中输入stm8s003关键字。我们将要下载stm8s003 datasheet(绘制原理图库文件以及layout)、下载stm8s的官方固件开发库(用于进行库开发,这种方法速度快不需要查寄存器手册。目前主流也是这种方式)、以及stm8s003使用手册(使用寄存器开发时用得到,里面有详细的寄存器说明)下载下来。

stm8s003f3 datasheet:

 

stm8s003固件库:

 

在st官网的stm8 embedded栏目中找到standard library字样,表示固件库。请仔细对照描述,查看是否为所需要固件库

注意:下载st官网的资料需要有st账号才行。用邮箱注册就行,这里就不再说明了。

 

查看手册,了解参数

stm8s003f3芯片工作电压、时钟等。此芯片有内部时钟,所以为了简化电路可以不接外部晶振

然后查看其他电气参数确定引脚驱动电压/电流为后续设置电路做准备

 

触摸芯片手册查询

 

原理图设计:

 

PCB layout设计:

查看86型开关设计图纸(从淘宝图片或者淘宝卖家那里获取),大概看下结构。发现触摸开关需要有一个玻璃板用于触摸,所以PCB我们需要设置为两部分。上部分:只放置触摸按钮;下部分:放置主控电路、供电电路等。

PCB Layout图:

底板:

顶层板:

 

3D渲染图:

软件设计:

思路:

通过查看TTP223-BA6/TTP223N-BA6手册发现这芯片有触发功能,所以按键的按下可以采用外部中断方式。然后判断双击:当有按键按下时定时器开始计时;当第二次按键按下时定时器停止计时,然后主程序中判断定时器时间。如果在1秒内按下次数≥2次,表示双击。如果1秒内按下次数=1次,表示单击。如果双击就执行延时5分钟使继电器断开用电器电源;如果单击使继电器立刻断开/闭合用电器电源。

步骤:

解压下载的stm8s的固件库并找到

库函数的帮助手册请参考固件库的chm文档。

或者使用BH7KQK的“STM8函数库中文参考.exe”小程序查找库函数。

外部中断中实现定时器启动

主程序:

void main(void)
{
    uint8_t key_value = 0;//按键值
    uint8_t temp = 0;
  
    Init_CLK();//初始化时钟为内部快速时钟
    Config_Stdperiph();//初始化相关外设
    
    LED_on();
    Delay_ms(500);
    LED_off();
    Delay_ms(500);//LED指示灯闪烁给触摸芯片500ms初始化时间
    
    while(1)
    {
        //先判断按键值
        if(TIM2_GetCounter() <= _1_SEC)
        {
            if(key_times >= 2)
            {
                key_value = 1; //双击
                Timer2_clear();
            }
        }
        else //大于1秒
        {
            if(key_times >= 1)
            {
                key_value = 2;//单击
                Timer2_clear();
            }
        }
      
        //再根据按键值来执行相关动作
        if(key_value == 1)//双击
        {
            //延时关灯
            TIM1_Cmd(ENABLE);//开启延时定时器1
            Relay_on();//开灯
            key_value = 0;
        }
        else if(key_value == 2)//单击
        {
            key_value = 0;
            //延时关灯清零
            Timer1_clear();
            if(temp == 0)   
            {
                temp = 1;
                Relay_on();//开灯
            }
            else  
            {
                temp = 1;
                Relay_off();//关灯
            }
        }
        //延时5分钟执行关灯
        if(tim1_min >= _5_MIN)
        {
            Relay_off();
            Timer1_clear();//清零延时定时器1
        }
    }
}

 

相关资料:

链接:https://pan.baidu.com/s/1GI0xd3HYnE_IOTd_Jj0pEw 
提取码:x170

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值