恒温箱系统
2016-09-12 11:12
281 查看
#include "common.h" #include "include.h" #include "MK60_FTM.h" #include "oled.h" #include "CONTROL.h" /** *函数声明 */ void PIT0_IRQHandler(); void PORTE_IRQHandler(); void control(); void UART0_IRQHandler(); /** *变量 */ extern float temp_value_dht22, humi_value_dht22; float wendu,shidu; int wendu1=0; char ch,ch2; char ch; int last_t=0,last_last_t=0,chazhi=0; int _temp_value_dht22; uint8 YANSHI=30; int shengwenflag = 0, jiangwenflag = 0; int only_one_flag=0,only_one_cont=0; char up_T=0,down_T=0; extern u8 key0,key1,key2,key3,key4,key5,key6,key7,key8,key9,keyA,keyB,keyC,keyD,keyE,keyF; int n=0,i=0,n1=0; int number[3]={0}; int number_cont=0; int temperture,queren_flag=0; int temperture_line[3]={0};//温度曲线设定数组 char temperture_cont=1; //温度输入次数计数 int measre_tempure=0; u8 temperture_show[128]; //设置温度曲线存储数组 u8 temperture_show1[64][128];//温度曲线存储数组 u8 temperture_show2[64][128];//温度曲线存储数组 u8 zuo_biao=0; int nn=1 ,wendu_cont=0; extern char set_T_num_cont; extern char key_flag; extern char auto_num; extern char get_init_num_f; extern uint shou_zi; extern char shidu_num; //0 表示什么也不操作/1 表示增湿 int jj=0,oo=0; int shidu1=0; char queren_flag2=0; int Set_Shidu; int delay1=0,delay_count=0; int ii=0,j=0; float shi_s_init=0,shi_set=0; int yy=0,yyy=0,yy_z=0; float temp_set=0.0,temp_s_init=0.0; int my_delay=0; int qushicount=0; int hold=0; int y_z=0; char flag = 1; int shengwen=0,jiangwen=0; int j_w_count=0,s_w_count=0,tingji=0; float gaowen=10; void main(){ DisableInterrupts; OLED_Init(); OLED_CLS(); pit_init_ms(PIT0, 10); PIT_Flag_Clear(PIT0); set_vector_handler(PIT0_VECTORn, PIT0_IRQHandler); uart_init (UART0, 9600); set_vector_handler(UART0_RX_TX_VECTORn, UART0_IRQHandler); NVIC_SetPriorityGrouping(2); NVIC_SetPriority(PIT0_IRQn, 0); NVIC_SetPriority(UART0_RX_TX_IRQn, 1); gpio_init (PTB5, GPO,0); //制冷片 gpio_init (PTB6, GPO,0); gpio_init (PTB7, GPO,0); gpio_init (PTB8, GPO,0); gpio_init (PTB9, GPO,1); //风扇 gpio_init (PTB10, GPO,0); //制热 gpio_init (PTB11, GPO,0); //湿度 gpio_init(PTE0, GPI, 1); port_init_NoALT(PTE0,PULLUP); gpio_init(PTE1, GPI, 1); port_init_NoALT(PTE1,PULLUP); gpio_init(PTE2, GPI, 1); port_init_NoALT(PTE2,PULLUP); gpio_init(PTE4, GPI, 1); port_init_NoALT(PTE4,PULLUP); gpio_init(PTE6, GPO, 0); gpio_init(PTE8, GPO, 0); gpio_init(PTE10,GPO, 0 4000 ); gpio_init(PTE12,GPO, 0); EnableInterrupts; enable_irq(PIT0_IRQn); while(1) { ch2=DHT22_ReadTempAndHumi(); if(ch2 == OK) { shidu=(float)(humi_value_dht22/10); wendu=(float)(temp_value_dht22/10); shidu1=(int)shidu; keyboard(); if(queren_flag==1) { temperture=number[1]+number[0]*10;//确认后的设定温度temperture set_T_num_cont// number[1]=0;number[0]=0;number_cont=0; queren_flag=0; } if(queren_flag2==1) { Set_Shidu=number[1]+number[0]*10; number[1]=0;number[0]=0;number_cont=0; queren_flag2=0; } if(number_cont==2) { if(keyE == 1) { queren_flag = 1; } if(keyD==1) { queren_flag2 = 1; } } if(number_cont == 1) { if(key0 == 1) {number[1] = 0; number_cont ++;} if(key1 == 1) {number[1] = 1; number_cont ++;} if(key2 == 1) {number[1] = 2; number_cont ++;} if(key3 == 1) {number[1] = 3; number_cont ++;} if(key4 == 1) {number[1] = 4; number_cont ++;} if(key5 == 1) {number[1] = 5; number_cont ++;} if(key6 == 1) {number[1] = 6; number_cont ++;} if(key7 == 1) {number[1] = 7; number_cont ++;} if(key8 == 1) {number[1] = 8; number_cont ++;} if(key9 == 1) {number[1] = 9; number_cont ++;} } if(number_cont==0) { if(key0 == 1) {number[0] = 0; number_cont ++;} if(key1 == 1) {number[0] = 1; number_cont ++;} if(key2 == 1) {number[0] = 2; number_cont ++;} if(key3 == 1) {number[0] = 3; number_cont ++;} if(key4 == 1) {number[0] = 4; number_cont ++;} if(key5 == 1) {number[0] = 5; number_cont ++;} if(key6 == 1) {number[0] = 6; number_cont ++;} if(key7 == 1) {number[0] = 7; number_cont ++;} if(key8 == 1) {number[0] = 8; number_cont ++;} if(key9 == 1) {number[0] = 9; number_cont ++;} } measre_tempure = (int)((wendu1 - 10) * 1.5);//此处输入温度值 if(measre_tempure > 64) { measre_tempure = 63; } if(measre_tempure<0) { measre_tempure = 0; } for(n = 127; n > 0; n --) { temperture_show = temperture_show[n - 1]; } temperture_show[0] = measre_tempure; //上面是温度存储 for(n1=0;n1<64;n1++)//hang { for(n=0;n<128;n++) { temperture_show1[n1] =0; } } for(n=0;n<128;n++) { zuo_biao=0; zuo_biao=wendu1; temperture_show1[zuo_biao] =255; } /************以上是温度变化曲线*********************/ for(n1=0;n1<64;n1++)//hang { for(n=0;n<128;n++) { temperture_show2[n1] =0; } } for(n=0;n<128;n++) { zuo_biao=0; zuo_biao=temperture; temperture_show2[zuo_biao] =255; } /*********************************/ if( auto_num==0) { if(key_flag==1) OLED_CLS(); OLED_P8x16Str(35,0,"A H U T"); } if( auto_num==1) { if(key_flag==1) { OLED_CLS(); } OLED_PrintImage((u8*)temperture_show1, 64, 128); OLED_PrintImage((u8*)temperture_show2, 64, 128); } if(auto_num == 2) { if(key_flag == 1) { OLED_CLS(); } if(shou_zi == 0) { if(keyA==1) { OLED_CLS(); } OLED_P8x16Str(0,0,"Set_T_num:"); OLED_P8x16Str(0,2,"Set_T:"); OLED_P8x16Str(0,4,"Now_T:"); OLED_P8x16Str(0,6,"Now_M:"); OLED_P8x16Str(80,6,"auto"); OLED_P14x16Str(110,2,"度"); OLED_nurbem(90,2,temperture,0); OLED_P14x16Str(110,4,"度"); OLED_nurbem(90,4,wendu1,0); OLED_nurbem(90,0,set_T_num_cont,0); } if(shou_zi==1) { if(keyA==1) { OLED_CLS(); } OLED_P8x16Str(0,0,"Set_T_num:"); OLED_P8x16Str(0,2,"Set_T:"); OLED_P8x16Str(0,4,"Now_T:"); OLED_P8x16Str(0,6,"Now_M:"); OLED_P8x16Str(80,6,"shouD"); OLED_P14x16Str(110,2,"度"); OLED_nurbem(90,2,temperture,0); OLED_P14x16Str(110,4,"度"); OLED_nurbem(90,4,wendu1,0); OLED_nurbem(90,0,set_T_num_cont,0); } } if(auto_num==3) { if(key_flag==1) OLED_CLS(); if(shidu_num==0) { if(keyB==1) OLED_CLS(); OLED_P8x16Str(0,0,"chushi:"); OLED_P8x16Str(0,2,"shidu:"); OLED_P8x16Str(0,4,"Set_Shidu:"); OLED_P8x16Str(0,6,"Now_T:"); OLED_P8x16Str(80,0,"NOR"); 12ff2 OLED_nurbem(90,2,shidu1,0); OLED_nurbem(90,4,Set_Shidu,0); OLED_nurbem(90,6,wendu1,0); } if(shidu_num==1) { if(keyB==1) OLED_CLS(); OLED_P8x16Str(0,0,"chushi:"); OLED_P8x16Str(0,2,"shidu:"); OLED_P8x16Str(0,4,"Set_Shidu:"); OLED_P8x16Str(0,6,"Now_T:"); OLED_P8x16Str(80,0,"zenshi"); OLED_nurbem(90,2,shidu1,0); OLED_nurbem(90,4,Set_Shidu,0); OLED_nurbem(90,6,wendu1,0); } if(shidu_num==2) { if(keyB==1) OLED_CLS(); OLED_P8x16Str(0,0,"chushi:"); OLED_P8x16Str(0,2,"shidu:"); OLED_P8x16Str(0,4,"Set_Shidu:"); OLED_P8x16Str(0,6,"Now_T:"); OLED_P8x16Str(80,0,"chushi"); OLED_nurbem(90,2,shidu1,0); OLED_nurbem(90,4,Set_Shidu,0); OLED_nurbem(90,6,wendu1,0); } } reset();//按键复位 } } } void PIT0_IRQHandler() { PIT_Flag_Clear(PIT0); UARTn_e uratn = UART0; if(UART_S1_REG(UARTN[uratn]) & UART_S1_RDRF_MASK) //接收数据寄存器满 { uart_getchar (UART0, &ch); //无限等待接受1个字节 } wendu1=(int)wendu; control(); j ++; if(j==150) { j = 0; my_delay = 1; } } void control() { if(shidu_num==0) { if(shou_zi==0) { if(get_init_num_f==1) { shengwen=1; temp_s_init=wendu; temp_set=temp_s_init+5; get_init_num_f=0; } if(shengwen==1) { if(wendu>=temp_set)//temp_set { hold=1; } if(wendu<temp_set) { hold=0; } if(hold==1) { gpio_set (PTB5, 1); gpio_set (PTB6, 1); gpio_set (PTB7, 1); gpio_set (PTB8, 1); gpio_set (PTB10, 0); } if(hold==0) { gpio_set (PTB5, 0); gpio_set (PTB6, 0); gpio_set (PTB7, 0); gpio_set (PTB8, 0); if(my_delay == 1) { flag = ~flag; if(flag == -2) { gpio_set (PTB10, 0); } else { gpio_set (PTB10, 1); } my_delay = 0; } if(ABS(wendu-temp_set)<=0.5) { gaowen=wendu; s_w_count++; } if(s_w_count>=1000) { shengwen=0; jiangwen=1; } } } if(jiangwen==1) { temp_s_init=gaowen; temp_set=temp_s_init-20; if(wendu>temp_set)//temp_set { hold=1; } if(wendu<=temp_set) { hold=0; } if(hold==1) { gpio_set (PTB5, 1); gpio_set (PTB6, 1); gpio_set (PTB7, 1); gpio_set (PTB8, 1); gpio_set (PTB10, 0); } if(hold==0) { gpio_set (PTB5, 0); gpio_set (PTB6, 0); gpio_set (PTB7, 0); gpio_set (PTB8, 0); //DELAY_MS(800); if(my_delay == 1) { flag = ~flag; if(flag == -2) { gpio_set (PTB10, 0); } else { gpio_set (PTB10, 1); } my_delay = 0; } } if(ABS(wendu-temp_set)<=0.5) { j_w_count++; } if(j_w_count>=1000) { tingji=1; } } if(tingji==1) { gpio_set (PTB5, 0); gpio_set (PTB6, 0); gpio_set (PTB7, 0); gpio_set (PTB8, 0); gpio_set (PTB9, 0); gpio_set (PTB10, 0); } } if(shou_zi==1) { temp_set=temperture; if(wendu>temp_set)//temp_set { hold=1; } if(wendu<=temp_set) { hold=0; } if(hold==1) { gpio_set (PTB5, 1); gpio_set (PTB6, 1); gpio_set (PTB7, 1); gpio_set (PTB8, 1); gpio_set (PTB10, 0); } if(hold==0) { gpio_set (PTB5, 0); gpio_set (PTB6, 0); gpio_set (PTB7, 0); gpio_set (PTB8, 0); if(my_delay == 1) { flag = ~flag; if(flag == -2) { gpio_set (PTB10, 0); } else { gpio_set (PTB10, 1); } my_delay = 0; } } } } /**********************************************/ if(shidu_num!=0) { if(shou_zi==0) { y_z=0; if(shidu_num!=1) { yy=0; } if(shidu_num==1)//增湿 { if(yy<=200) { temp_s_init=wendu; shi_s_init=shidu; yy++; } shi_set=shi_s_init+5; temp_set=temp_s_init; if(shidu>=shi_set) { gpio_set (PTB11, 0); } if(shidu<shi_set) { gpio_set (PTB11, 1); } if(wendu>=temp_set) { hold=1; } if(wendu<temp_set) { hold=0; } if(hold==1) { gpio_set (PTB5, 1); gpio_set (PTB6, 1); gpio_set (PTB7, 1); gpio_set (PTB8, 1); gpio_set (PTB10, 0); } if(hold==0) { gpio_set (PTB5, 0); gpio_set (PTB6, 0); gpio_set (PTB7, 0); gpio_set (PTB8, 0); if(my_delay == 1) { flag = ~flag; if(flag == -2) { gpio_set (PTB10, 0); } else { gpio_set (PTB10, 1); } my_delay = 0; } } } if(shidu_num!=2) { qushicount=0; } if(shidu_num==2)//去湿 { if(qushicount<=200) { temp_s_init=wendu; shi_s_init=shidu; qushicount++; } shi_set=shi_s_init-5; temp_set=temp_s_init; if(shidu>=shi_set) { gpio_set (PTB11, 0); } if(shidu<shi_set) { gpio_set (PTB11, 1); } if(wendu>temp_set) { hold=1; } if(wendu<=temp_set) { hold=0; } if(hold==1) { gpio_set (PTB5, 1); gpio_set (PTB6, 1); gpio_set (PTB7, 1); gpio_set (PTB8, 1); gpio_set (PTB10, 0); } if(hold==0) { gpio_set (PTB5, 0); gpio_set (PTB6, 0); gpio_set (PTB7, 0); gpio_set (PTB8, 0); if(my_delay == 1) { flag = ~flag; if(flag == -2) { gpio_set (PTB10, 0); } else { gpio_set (PTB10, 1); } my_delay = 0; } } } } /*********************************************/ if(shou_zi==1) { if(y_z<=200) { temp_s_init=wendu; //shi_s_init=shidu; y_z++; } shi_set=Set_Shidu; temp_set=temp_s_init; if(shidu>shi_set) { gpio_set (PTB11, 0); } if(shidu<=shi_set) { gpio_set (PTB11, 1); } if(wendu>temp_set) { hold=1; } if(wendu<=temp_set) { hold=0; } if(hold==1) { gpio_set (PTB5, 1); gpio_set (PTB6, 1); gpio_set (PTB7, 1); gpio_set (PTB8, 1); gpio_set (PTB10, 0); } if(hold==0) { gpio_set (PTB5, 0); gpio_set (PTB6, 0); gpio_set (PTB7, 0); gpio_set (PTB8, 0); if(shi_set<=shi_s_init) { if(my_delay == 1) { flag = ~flag; if(flag == -2) { gpio_set (PTB10, 0); } else { gpio_set (PTB10, 1); } my_delay = 0; } } } } } } char ch; void UART0_IRQHandler() { UARTn_e uratn = UART0; if(UART_S1_REG(UARTN[uratn]) & UART_S1_RDRF_MASK) //接收数据寄存器满 { uart_getchar (UART0, &ch); //无限等待接受1个字节 wendu=ch; } }
相关文章推荐
- 批量自动安装常用软件
- 批量自动安装常用软件
- 企业批量部署RealVNC远程控制软件
- 好用的Markdown编辑器一览
- C#实现子窗体与父窗体通信方法实例总结
- 网上视频站 视频下载利器 优酷网 视频下载 必备 软件 下载[原创]_常用工具_脚本之家
- java和c#使用hessian通信的方法
- win32下进程间通信(共享内存)实例分析
- WinForm实现跨进程通信的方法
- C#中使用UDP通信实例
- ASP.NET UserControl 通信的具体实现
- BAT批处理实现软件的自动安装(以搜狗拼音为例)
- nw.js实现类似微信的聊天软件
- 采用C#实现软件自动更新的方法
- C#判断某个软件是否已安装实现代码分享
- IIS 防盗链 软件
- 浅析iOS应用开发中线程间的通信与线程安全问题
- Vue.js每天必学之组件与组件间的通信
- 使用Broadcast实现Android组件间的通信