#include "bsp_pressure.h" //#include "tpc_debug.h" ////#include "tpc_x.h" #include "msp_uart1.h" #include "msp_uart2.h" #include "msp_uart4.h" #include #include "debug_drv.h" #include "TTSS_task.h" TS_task_sw_ ts_task_sw; void L2_pressure_init(void) { D_stdIO_P5(BITN2);//485RE D_HighI_P3(BITN2);//led1 /// D_485_TX(); D_SW_IO_INIT(); } U8 Fun_SC_Check(U8 *p1, unsigned short int len)//累加和校验 { U8 sum = 0; for(;len > 0; len--) { sum += *p1++; } return sum; } //pressure数据初始化 void l2_task_pressure_init() { L1_task_init(&ts_task_sw.task); L3_task_s_go(ts_task_sw,D_task_init); } ////二维数组的第一个参数是行,第二个参数是列。 ///二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2], ////其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。 void L3_hang_judge(u8 hang) { printf(" H %d ",(int)hang); switch (hang) { case 0x00: { L0_adc_S0_OFF(); L0_adc_S1_OFF(); L0_adc_S2_OFF(); L0_adc_S3_OFF(); break; } case 0x01: { L0_adc_S0_ON(); L0_adc_S1_OFF(); L0_adc_S2_OFF(); L0_adc_S3_OFF(); break; } case 0x02: { L0_adc_S0_OFF(); L0_adc_S1_ON(); L0_adc_S2_OFF(); L0_adc_S3_OFF(); break; } case 0x03: { L0_adc_S0_ON(); L0_adc_S1_ON(); L0_adc_S2_OFF(); L0_adc_S3_OFF(); break; } case 0x04: { L0_adc_S0_OFF(); L0_adc_S1_OFF(); L0_adc_S2_ON(); L0_adc_S3_OFF(); break; } case 0x05: { L0_adc_S0_ON(); L0_adc_S1_OFF(); L0_adc_S2_ON(); L0_adc_S3_OFF(); break; } case 0x06: { L0_adc_S0_OFF(); L0_adc_S1_ON(); L0_adc_S2_ON(); L0_adc_S3_OFF(); break; } case 0x07: { L0_adc_S0_ON(); L0_adc_S1_ON(); L0_adc_S2_ON(); L0_adc_S3_OFF(); break; } case 0x08: { L0_adc_S0_OFF(); L0_adc_S1_OFF(); L0_adc_S2_OFF(); L0_adc_S3_ON(); break; } case 0x09: { L0_adc_S0_ON(); L0_adc_S1_OFF(); L0_adc_S2_OFF(); L0_adc_S3_ON(); break; } case 0x0A: { L0_adc_S0_OFF(); L0_adc_S1_ON(); L0_adc_S2_OFF(); L0_adc_S3_ON(); break; } case 0x0B: { L0_adc_S0_ON(); L0_adc_S1_ON(); L0_adc_S2_OFF(); L0_adc_S3_ON(); break; } case 0x0C: { L0_adc_S0_OFF(); L0_adc_S1_OFF(); L0_adc_S2_ON(); L0_adc_S3_ON(); break; } case 0x0D: { L0_adc_S0_ON(); L0_adc_S1_OFF(); L0_adc_S2_ON(); L0_adc_S3_ON(); break; } case 0x0E: { L0_adc_S0_OFF(); L0_adc_S1_ON(); L0_adc_S2_ON(); L0_adc_S3_ON(); break; } case 0x0F: { L0_adc_S0_ON(); L0_adc_S1_ON(); L0_adc_S2_ON(); L0_adc_S3_ON(); break; } default: break; } /// Lc_delay_us(2); /* if((hang & 0x01) == 0x01) { L0_adc_S0_ON(); } else { L0_adc_S0_OFF(); } if((hang & 0x02) == 0x02) { L0_adc_S1_ON(); } else { L0_adc_S1_OFF(); } if((hang & 0x04) == 0x04) { L0_adc_S2_ON(); } else { L0_adc_S2_OFF(); } if((hang & 0x08) == 0x08) { L0_adc_S3_ON(); } else { L0_adc_S3_OFF(); } */ } void L3_lie_judge(u8 lie) { printf(" L %d ",(int)lie); switch (lie) { case 0x00: { D_GND_S0_OFF(); D_GND_S1_OFF(); D_GND_S2_OFF(); D_GND_S3_OFF(); break; } case 0x01: { D_GND_S0_ON(); D_GND_S1_OFF(); D_GND_S2_OFF(); D_GND_S3_OFF(); break; } case 0x02: { D_GND_S0_OFF(); D_GND_S1_ON(); D_GND_S2_OFF(); D_GND_S3_OFF(); break; } case 0x03: { D_GND_S0_ON(); D_GND_S1_ON(); D_GND_S2_OFF(); D_GND_S3_OFF(); break; } case 0x04: { D_GND_S0_OFF(); D_GND_S1_OFF(); D_GND_S2_ON(); D_GND_S3_OFF(); break; } case 0x05: { D_GND_S0_ON(); D_GND_S1_OFF(); D_GND_S2_ON(); D_GND_S3_OFF(); break; } case 0x06: { D_GND_S0_OFF(); D_GND_S1_ON(); D_GND_S2_ON(); D_GND_S3_OFF(); break; } case 0x07: { D_GND_S0_ON(); D_GND_S1_ON(); D_GND_S2_ON(); D_GND_S3_OFF(); break; } case 0x08: { D_GND_S0_OFF(); D_GND_S1_OFF(); D_GND_S2_OFF(); D_GND_S3_ON(); break; } case 0x09: { D_GND_S0_ON(); D_GND_S1_OFF(); D_GND_S2_OFF(); D_GND_S3_ON(); break; } case 0x0A: { D_GND_S0_OFF(); D_GND_S1_ON(); D_GND_S2_OFF(); D_GND_S3_ON(); break; } case 0x0B: { D_GND_S0_ON(); D_GND_S1_ON(); D_GND_S2_OFF(); D_GND_S3_ON(); break; } case 0x0C: { D_GND_S0_OFF(); D_GND_S1_OFF(); D_GND_S2_ON(); D_GND_S3_ON(); break; } case 0x0D: { D_GND_S0_ON(); D_GND_S1_OFF(); D_GND_S2_ON(); D_GND_S3_ON(); break; } case 0x0E: { D_GND_S0_OFF(); D_GND_S1_ON(); D_GND_S2_ON(); D_GND_S3_ON(); break; } case 0x0F: { D_GND_S0_ON(); D_GND_S1_ON(); D_GND_S2_ON(); D_GND_S3_ON(); break; } default: break; } /// Lc_delay_us(2); /* if((lie & 0x01) == 0x01) { D_GND_S0_ON(); } else { D_GND_S0_OFF(); } if((lie & 0x02) == 0x02) { D_GND_S1_ON(); } else { D_GND_S1_OFF(); } if((lie & 0x04) == 0x04) { D_GND_S2_ON(); } else { D_GND_S2_OFF(); } if((lie & 0x08) == 0x08) { D_GND_S3_ON(); } else { L0_adc_S3_OFF(); } */ } #define D_3232_left() D_CD3_ON();D_CD2_OFF(); ts_task_sw.ch = D_DW_left; #define D_3232_right() D_CD2_ON();D_CD3_OFF(); ts_task_sw.ch = D_DW_right; #define D_3232_odd() D_CD4_OFF(); D_CD1_ON();///D_CD2_ON();D_CD3_OFF(); #define D_3232_even() D_CD1_OFF(); D_CD4_ON(); //// 和电路的排列息息相关 void L4_SW_set3232(u8 hang,u8 lie) { if((hang%2) == 0) { D_3232_even(); /// 0->0 2->1 4->2 6->3 hang /= 2; L3_hang_judge(hang); }else { D_3232_odd(); ///偶数 /// 1->15 3->14 5->13 /// 0 1 2 hang --; hang /= 2;/// (hang - 1)/2; L3_hang_judge(15 - hang); } if(lie < 16)//左 { /// 0->15 1->14 2->13 ...15->0 D_3232_left(); L3_lie_judge(15 - lie); }else {/// 16-----31 /// 16->15 17->14 18->13 ... 31->0 D_3232_right(); L3_lie_judge(31-lie); } } //点的切换 #if 0 ch =0 set adc ch =1 set adc #endif /// 硬件先切换 行列切换---之后通道 然后当前adc采样, //// 行切换 hang++ //// 列切换 lie++ //// 通道切换 ch++ //// adc //// 通道切换 ch++ //// adc //// 列切换 lie++ //// 通道切换 ch++ //// adc //// 通道切换 ch++ //// adc //// 列切换 lie++ //// 通道切换 ch++ //// adc //// 通道切换 ch++ //// adc //// //// 列切换.... //// 行切换 hang++ //// 列切换 lie++ //// 通道切换 ch++ //// adc //// 通道切换 ch++ //// adc //// 列切换 lie++ //// 通道切换 ch++ //// adc //// 通道切换 ch++ //// adc //// 列切换 lie++ //// 通道切换 ch++ //// adc //// 通道切换 ch++ //// adc //// #if 0 #define D_SW_hang_max 16 #define D_SW_lie_max 16 #define D_SW_hang_max (6-1) #define D_SW_lie_max (6-1) #else #define D_SW_hang_max (2-1) #define D_SW_lie_max (2-1) #endif #define D_SW_all_hang_max 32 #define D_SW_all_lie_max 32 #define D_SW_ch_max (2-1) void L3_task_sw(TS_task_sw_ *s) { TTSS_Task_init(): printf("\r\n task_sw "); s->H = 0; s->L = 0; ts_task_adc.chok1 = 0; ts_task_adc.chok2 = 0; L2_pressure_init(); L2_task_go(D_TASK_SW_change); TTSS_Task_step(D_TASK_SW_change): L4_SW_set3232(s->H,s->L); printf("\r\n %d %d ",(int)s->H,(int)s->L); ts_task_adc.change = 1; ts_task_adc.ch_now = s->ch; L2_task_go(D_TASK_SW_wait_adc); /// L2_task_Cdelay_go(1000,D_TASK_SW_ch);////100000--2s TTSS_Task_step(D_TASK_SW_wait_adc): if(ts_task_adc.chok1) { ts_task_adc.chok1 = 0; /// printf("\r\n %d %d %d %d ",(int)s->ch,(int)s->H,(int)s->L,(int)ts_task_adc.chok1); //// L2_task_go(D_TASK_SW_ch_ok); L2_task_Cdelay_go(10000,D_TASK_SW_lie);////100000--2s } TTSS_Task_step((D_TASK_SW_lie)): if(s->L >= D_SW_all_lie_max) { s->L = 0; if(s->H >= D_SW_all_hang_max) { s->H = 0; printf("\r\n next circle"); }else { s->H ++; } }else { s->L ++; } L2_task_go(D_TASK_SW_change); TTSS_Task_end(); } void L3_pressure_debug(u8 filter) { //u8 D_pressure_hang1 = 0x00; //u8 D_pressure_hang2 = 0x0f; if( filter == ts_debug_rec.filter) { if(0x33 == ts_debug_rec.ocr ) { printf("\r\nhang : %d lie: %d ",(int)ts_debug_rec.R1,(int)ts_debug_rec.R2); L4_SW_set3232(ts_debug_rec.R1,ts_debug_rec.R2); }else { printf("\r\n 44444 "); } } }