📄 main.c
字号:
/* MAIN.C file
* Copyright (c) 轩微科技
本程序功能为让轩微科技STM8S105S4开发板左右触控键按下时发出蜂鸣且灭灯,滑块滑动时会发出答声,同时串口输出触控消息.
本程序使用ST官方库进行操作.
轩微科技保留所有权利.
*/
#include "stm8s.h"
#include "stm8s_uart2.h"
#include "stm8s_gpio.h"
#include "stm8s_beep.h"
#include "stm8_tsl_api.h"
#include "stm8s_exti.h"
unsigned char silder1=0;
unsigned char key=0;
void touchSensorEnable(void);
void xwopenTouchTask(void);
main()
{
unsigned long i=0;
//切换到外部16MHz晶振振荡器运行,让开发板高速运行
CLK_HSECmd(ENABLE);
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_DISABLE);
//反初始化GPIOD
GPIO_DeInit(GPIOD);
//实始化GPIOD,配置其第0,2,3位为推挽输出,高电平.
GPIO_Init(GPIOD, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);
//反初始化串口
UART2_DeInit();
//初始化串口
UART2_Init(38400,UART2_WORDLENGTH_8D,UART2_STOPBITS_1,UART2_PARITY_NO, UART2_SYNCMODE_CLOCK_DISABLE, UART2_MODE_TX_ENABLE);
//串口发送串口初始化完成信息
putStrLine("串口初始化完成.");
//反初始化BEEP
BEEP_DeInit();
//初始化BEEP
BEEP_Init(BEEP_FREQUENCY_2KHZ);
//配置振荡器2M
BEEP_LSICalibrationConfig(16000000);
putStrLine("蜂鸣器初始化完成.");
//初始化触摸
TSL_Init();
putStrLine("触摸服务初始化完成");
//使能所有触控盘
touchSensorEnable();
putStrLine("触摸键已使能");
while (1)
{
//执行客户端任务
xwopenTouchTask();
//检测按键状态
TSL_Action();
}
}
void touchSensorEnable(void)
{
u8 i;
#if NUMBER_OF_SINGLE_CHANNEL_KEYS > 0
for (i = 0; i < NUMBER_OF_SINGLE_CHANNEL_KEYS; i++)
{
sSCKeyInfo[i].Setting.b.IMPLEMENTED = 1;
sSCKeyInfo[i].Setting.b.ENABLED = 1;
sSCKeyInfo[i].DxSGroup = 0x01; /* 0x00 = DxS disabled, other values = DxS enabled */
}
#endif
#if NUMBER_OF_MULTI_CHANNEL_KEYS > 0
for (i = 0; i < NUMBER_OF_MULTI_CHANNEL_KEYS; i++)
{
sMCKeyInfo[i].Setting.b.IMPLEMENTED = 1;
sMCKeyInfo[i].Setting.b.ENABLED = 1;
sMCKeyInfo[i].DxSGroup = 0x01; /* 0x00 = DxS disabled, other values = DxS enabled */
}
#endif
}
void xwopenTouchTask(void)
{
if(key!=GPIO_ReadInputPin(GPIOD,GPIO_PIN_7))
{
key=GPIO_ReadInputPin(GPIOD,GPIO_PIN_7);
if(!key)
{
GPIO_WriteHigh(GPIOD, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3);
BEEP_Init(BEEP_FREQUENCY_2KHZ);
BEEP_Cmd(ENABLE);
}
else
{
GPIO_WriteLow(GPIOD, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3);
BEEP_Cmd(DISABLE);
}
}
if ((TSL_GlobalSetting.b.CHANGED) && (TSLState == TSL_IDLE_STATE))
{
TSL_GlobalSetting.b.CHANGED = 0;
if (sSCKeyInfo[0].State.b.DETECTED) /* KEY 1 touched */
{
putStrLine("左键被摸");
GPIO_WriteHigh(GPIOD, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3);
BEEP_Init(BEEP_FREQUENCY_2KHZ);
BEEP_Cmd(ENABLE);
return;
}
else if(sSCKeyInfo[0].State.b.IDLE)
{
GPIO_WriteLow(GPIOD, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3);
BEEP_Cmd(DISABLE);
}
if (sSCKeyInfo[1].State.b.DETECTED)
{
putStrLine("右键被摸");
GPIO_WriteHigh(GPIOD, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3);
BEEP_Init(BEEP_FREQUENCY_2KHZ);
BEEP_Cmd(ENABLE);
return;
}
else if (sSCKeyInfo[1].State.b.IDLE)
{
GPIO_WriteLow(GPIOD, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3);
BEEP_Cmd(DISABLE);
}
}
else if((TSL_GlobalSetting.b.LOCKED) && (silder1!=sMCKeyInfo[0].Position))
{
BEEP_Init(BEEP_FREQUENCY_4KHZ);
BEEP_Cmd(ENABLE);
silder1=sMCKeyInfo[0].Position;
GPIO_WriteHigh(GPIOD, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3);
putStr("滑块值:");
putIntLine(silder1);
GPIO_WriteLow(GPIOD, GPIO_PIN_0|GPIO_PIN_2|GPIO_PIN_3);
BEEP_Cmd(DISABLE);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -