Files
r3_delay_3/main.c
T
moyuhai f0bbac3bb3 V1.0
2026-06-11 17:26:06 +08:00

212 lines
7.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef _MAIN_C_
#define _MAIN_C_
/*********************************************************************************************************************/
#include "ca51f5_config.h"
#include "includes\ca51f5sfr.h"
#include "includes\ca51f5xsfr.h"
#include "includes\gpiodef_f5.h"
#include "Library\includes\uart.h"
#include "Library\includes\system_clock.h"
#include "Library\Includes\tmc.h"
#include "includes\system.h"
#include "Library\includes\wdt.h"
/*********************************************************************************************************************/
#include "TS_Lib\Includes\ts_configuration.h"
#include "TS_Lib\Includes\ts_def.h"
#include "TS_Lib\Includes\ts_api.h"
#include "TS_Lib\Includes\ts_service.h"
#include "rf_send.h"
#include "Library\Includes\delay.h"
#define INT_TIME 100 //定时时间,单位为us
#define TH_VAL (unsigned char)((0x2000 - (INT_TIME*(FOSC/1000))/12000)>>5)
#define TL_VAL (unsigned char)(0x2000 - (INT_TIME*(FOSC/1000))/12000)&0x1F
unsigned char flagSend = 0;
unsigned char valueSend = 0;
unsigned char flagStart = 0;
void Delay_ms(unsigned int n);
//void TIMER0_ISR (void) interrupt 1 //每100us产生中断
//{
// TH0 = TH_VAL;
// TL0 = TL_VAL;
// Send433_Byte();
//}
/*********************************************************************************************************************/
/*******************************************************************************************************************************************
说明:
------------------------------------------------------------------------------------------------------------
1.ts_configuration.h是触摸的配置文件,可在配置文件中设置触摸通道、灵敏度等。详见ts_configuration.h中的说明。
------------------------------------------------------------------------------------------------------------
2.如果需要使用UART来调试,可在ca51f5_config.h中打开宏定义UART0_EN
------------------------------------------------------------------------------------------------------------
3.触摸库对外的数据接口为KeysFlagSN,用户可根据KeysFlagSN的值来判断触摸键是否按下(如果触摸键按下,KeysFlagSN
的对应位一直为1,触摸键松开,对应位变为0),TS_Key是根据KeysFlagSN的值生成的按键消息,用户如不使用可忽略。
------------------------------------------------------------------------------------------------------------
4.使能了触摸省电模式后,在无按键时,在定义的时间后会进入省电模式,进入省电模式前会关闭TMC中断和触摸中断(注意,总
中断仍是开启的),在触摸省电模式下,CPU会进入STOP模式,在被触摸唤醒后,程序在省电函数(TS_EnterSleepMode)的循环内运行(注意,触摸省电模式程序不
会在主循环内运行),在触摸省电模式下如果还要响应其他中断,用户需在进入触摸省电模式前自行开启其他中断,
如果需要退出省电模式,用户只需要在省电函数循环内加入条件判断,跳出循环即可。
变量TS_SleepEn是控制触摸省电模式的开关,如果希望程序在某些条件下不进入省电模式,只需在此条件下设置TS_SleepEn = 0
------------------------------------------------------------------------------------------------------------
5.触摸外挂电容(即TK_CAP引脚连接电容)范围:6nF~50nF,建议值:20nF(即203
------------------------------------------------------------------------------------------------------------
6.触摸引脚串联电阻范围:0~5K,建议值:1K欧姆,如果有抗对讲机等电磁干扰要求, 此电阻至少3K以上。
*******************************************************************************************************************************************/
unsigned long int Read_32bit_UID(void)
{
unsigned long int ID;
FSCMD = 0x80;
PTSH = 0x00;
PTSL = 0x00;
FSCMD = 0x81;
ID = FSDAT;
ID *= 256;
ID |= FSDAT;
ID *= 256;
ID |= FSDAT;
ID *= 256;
ID |= FSDAT;
FSCMD = 0;
return ID;
}
code unsigned char rf_data[255]=
{
16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40,40,
41,41, 42, 43, 44,44, 45, 46, 47,47, 48, 49, 50,50, 51, 52, 53,53, 54, 55,55, 56, 57, 58,58, 59, 60,
61, 62,62, 63, 64,64, 65, 66, 67,67, 68, 69, 70,70, 71, 72, 73, 74,74, 75, 76,76, 77, 78,78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
181, 182, 183, 184, 185, 186 , 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
};
void main(void)
{
unsigned long int addr=0;
unsigned char send_times = 0;
#ifdef LVD_RST_ENABLE
LVDCON = 0xE3; //设置LVD复位电压为2.0V
#endif
#ifdef UART0_EN
Uart0_Initial(UART0_BAUTRATE);
#endif
//看门狗时钟源为IRCL
CKCON |= ILCKE; //使能IRCL
WDCON = WDTS(WDTS_IRCL) | WDRE(WDRE_reset); //设置看门狗时钟源为ILCKE,模式为复位模式
WDVTHH = 0; //看门狗复位阈值高八位设置 当前值为5s
WDVTHL = 75; //看门狗复位阈值低八位设置
WDFLG = 0xA5;
EA = 1;
TS_init();
P32F = OUTPUT; //P00设置为推挽输出模式
P32=0;
addr = (unsigned int)Read_32bit_UID(); //获取遥控ID
D0 = (unsigned char)(addr >> 8);
D1 = (unsigned char)(addr);
Yaokong_Data[0] = D1;
Yaokong_Data[1] = D0;
// TMOD = (TMOD&0xFC)|0x00; //模式选择: 定时器0,模式0。
// TH0 = TH_VAL; //高8位装初值
// TL0 = TL_VAL; //低8位装初值
//
// TR0 = 0; //定时器0使能
// ET0 = 1; //定时器0中断使能
// PT0 = 0; //设置定时器0中断优先级为低优先级
while(1)
{
TS_Action();
if(WheelSliderPosition != -1)
{
send_times = 3;
//当WheelSliderPosition不等于-1时, 表示滑条或圆环有触摸事件发生。WheelSliderPosition的值表示滑条或圆环的位置。
valueSend=rf_data[ WheelSliderPosition];//0-240
//valueSend += 15;//15-255
}
if(KeysFlagSN != 0)
{
send_times = 3;
switch(KeysFlagSN)
{
case 0x0001:
valueSend = 0x0A;//1
break;
case 0x0002:
valueSend = 0x0C;//
break;
case 0x0004:
// valueSend = 0x07;//1
valueSend = 0x0E;//1
break;
case 0x0008:
//valueSend = 0x09;//
valueSend = 0x06;//
break;
case 0x0010:
valueSend = 0x02;//1
break;
case 0x0020:
valueSend = 0x04;//1
break;
case 0x0040:
valueSend = 0x00; // 1
break;
case 0x0080:
valueSend = 0x0F; // 1
break;
default:
flagSend = 0;
break;
}
}
if(KeysFlagSN==0&&WheelSliderPosition==-1){
flagSend=0;
}else{
flagSend = 1;
}
if(flagSend&&RF_Time>20)
{
RF_Time = 0;
flagSend = 0;
RF_Time=0;
EA = 0;
RF_send(send_times);
EA = 1;
}
}
}
#endif