#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