void set_time(GtkWidget *widget,gpointer data) { struct tm ti; time_t t; int i,tmp[6]; TIME *day=(TIME *)data; for(i=0; i<6; i++) tmp[i]=change_data(gtk_entry_get_text(GTK_ENTRY(day->data[i]))); if(tmp[0]<=1900) { error_message(widget,"输入的年份有误,请重新输入!"); return; } if(tmp[1]<1 || tmp[1]>12) { error_message(widget,"输入的月份有误,请重新输入!"); return; } if(tmp[2]<=0 || tmp[2]>31) { error_message(widget,"输入的日期有误,请重新输入!"); return; } if(tmp[3]<=0 || tmp[3]>24) { error_message(widget,"输入的小时有误,请重新输入!"); return; } if(tmp[4]<0 || tmp[4]>59) { error_message(widget,"输入的分钟数有误,请重新输入!"); return; } if(tmp[5]<0 || tmp[5]>59) { error_message(widget,"输入的秒数有误,请重新输入!"); return; } tmp[0]-=1900; ti.tm_year=tmp[0]; ti.tm_mon=tmp[1]; ti.tm_mday=tmp[2]; ti.tm_hour=tmp[3]; ti.tm_min=tmp[4]; ti.tm_sec=tmp[5]; t=mktime(&ti); stime(&t); error_message(widget,"设置成功!"); }
/***接收ad转换数据 读取传感器数值 测量硬币种类***/ __task void get_adc_value(void) { u8 bf=0,read_flash[2],dia_b=0,n; u16 adc_data=0,clear_config=0; u32 adc_buff=0; os_sem_init(adcsem,0); memset(view_detial,0,530); memset(view_send,0,10); memset(read_flash,0,4); ReadFlashNByte(0,read_flash,2); limitup=read_flash[0]+read_flash[1]*256; if(limitup==0||limitup==0xffff) limitup=7500; while(1) { // os_sem_wait(adcsem,0xffff); while(1) { adc_value1=spi_readwrite_byte(SPI1,adc_data); adc_value=change_data(adc_value1); if((1000<adc_value&&adc_value<7500)) break; clear_config++; if(clear_config==50000) { clear_config=0; memset(&refresh,0,8); i=0; //5秒种没有硬币就将计数清零 } os_dly_wait(1); } GPIO_ResetBits(GPIOC,GPIO_Pin_5); os_sem_send(iosem); TIM_Cmd(TIM4,ENABLE); value_count=0; // while(add_count<25) // { while(adc_value<7500) // while(1) { adc_buff=adc_buff+adc_value; add_count++; //采样次数 0.2ms一次 view_detial[view_i][add_count]=adc_value; os_dly_wait(1); adc_value=spi_readwrite_byte(SPI1,adc_data); adc_value=change_data(adc_value); // if(count==50) // break; if(add_count==49) break; } // } // view_detial[view_i][add_count+2]=count; //view_detial数据位后面第二位是金属传感器检测的时间 // count=0; GPIO_SetBits(GPIOC,GPIO_Pin_5); adc_buff=adc_buff/add_count; if(add_count>20) { dia_b=(add_count/2)-2; adc_buff=0; for(n=0;n<5;n++) adc_buff=view_detial[view_i][dia_b+n]+adc_buff; adc_buff=adc_buff/5; } else adc_buff=8888; //调试看数据 view_detial[view_i][0]=add_count; //对金属传感器采样的详细数据个数 view_detial[view_i][add_count+1]=adc_buff; //view_detial数据位后面第一位是对金属传感器采样得到数据的平均值 //*** coin_kind[bf]=deal_value(adc_buff); //比较金属传感器的电压值,得出币种 // if(view_detial[view_i][10]>6000) // coin_kind[bf]=0; view_i++; if(view_i==5) view_i=0; bf++; if(bf==5) bf=0; adc_buff=0; add_count=0; clear_config=0; // os_sem_send(iosem); // os_sem_send(resultsem); } }