![温度控制系统设计_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/5a249975-ddc4-4e50-a655-f40335dcbab0/5a249975-ddc4-4e50-a655-f40335dcbab01.gif)
![温度控制系统设计_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/5a249975-ddc4-4e50-a655-f40335dcbab0/5a249975-ddc4-4e50-a655-f40335dcbab02.gif)
![温度控制系统设计_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/5a249975-ddc4-4e50-a655-f40335dcbab0/5a249975-ddc4-4e50-a655-f40335dcbab03.gif)
![温度控制系统设计_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/5a249975-ddc4-4e50-a655-f40335dcbab0/5a249975-ddc4-4e50-a655-f40335dcbab04.gif)
![温度控制系统设计_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/5a249975-ddc4-4e50-a655-f40335dcbab0/5a249975-ddc4-4e50-a655-f40335dcbab05.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.硬件设计 软件设计/*/#include <C8051F410.H>#include <math.H>#include <RT12832.H>#include <string.H>#include <stdio.h>/*/#define BYTE unsigned char#define WORD unsigned int#define D_WORD unsigned long/*/#define AD_TEMP 0x01/*/#define L_0mm 1964#define L_100mm 3396#define T_223de
2、gree 1231#define T_989degree 3239 /*/WORD idata ADC_ = 0;float idata Temp_Given = 0; /温度扩大10倍/*/WORD idata L_WARNING = 100; WORD idata H_WARNING = 1000; /*/int idata TEMP_SET14=0;int idata L_A_H_SET4=0;int idata L_A_L_SET3=0;WORD idata TEMP_SET_ = 0;WORD idata L_A_H_SET_ = 0;WORD idata L_A_L_SET_ =
3、0;/*/BYTE xdata DispStr132,DispStr232;WORD xdata AD_BUF40; /= 12,11,10,9,8,7,6,5,4,3,2,1;/*/sbit BEER_A = P05;sbit TEST_XH = P04;sbit SST_CON = P03;sbit KEY_SWITCH = P23;sbit KEY_SET = P20;sbit KEY_SHIFT = P22;sbit KEY_INC = P21;bit KEY_SWITCH_H_BIT = 0;bit KEY_SWITCH_L_BIT = 0;bit KEY_SET_H_BIT = 0
4、;bit KEY_SET_L_BIT = 0;bit KEY_SHIFT_H_BIT = 0;bit KEY_SHIFT_L_BIT = 0;bit KEY_INC_H_BIT = 0;bit KEY_INC_L_BIT = 0;BYTE idata KEY_SWITCH_COUNT = 0;BYTE idata KEY_SHIFT_COUNT1 = 0;BYTE idata KEY_SHIFT_COUNT2 = 0;BYTE idata KEY_SHIFT_COUNT3 = 0;/*/float idata L_yw = 0;float idata T_yw = 0;float idata
5、T_yw_buf1= 0;float idata T_yw_buf2= 0;WORD idata L_yw_ = 0;WORD idata T_yw_ = 0;WORD idata Count_ = 0;BYTE idata Count_ = 0;/*/WORD xdata MCH_JISHU60 = 0;WORD idata T0_BUF = 0;WORD idata ZHUANSU = 0;BYTE idata T3INT_JISHU = 0;BYTE idata Count_n = 0; WORD idata K = 0; bit CESU_BIT = 0; /速度脉冲时间计数控制标志,
6、下降沿启动或停止计数bit INT0_BIT = 0;bit CHAOSHI_BIT = 1; /INT0超时标志,超过100ms没有INT0中断,即被置位。bit Warning_bit = 0;bit S1_BIT = 0;bit WENKONG_BIT = 0;bit BEER_A_BIT = 0;WORD idata WENDU_JISHU = 0;BYTE idata Warning_Count=0;BYTE idata INT0_CHAOSHI_JSH = 0;/PCA计数中断加1,INT0中断清0,超过总值20认为INT0超时,置位CHAOSHI_BIT。/*/void CONF
7、IG();void YSH(D_WORD x);/*/void CONFIG() PCA0MD = 0x07; /看门狗禁止,PCA用于对ECI计数 REG0CN = 0x10; /内部LDO使能 PFE0CN = 0X20; /预取指令允许 XBR1 = 0x40; /使能交叉开关 P0MDIN = 0xfd; /P0.1配置成模拟输入 P2MDOUT = 0x40; /P2.6配置成模拟输入/- OSCICN = 0xc7; /开启内部振荡器不分频/内部振荡器控制寄存器/位7:IOSCEN:内部振荡器使能位,0:内部振荡器禁止。1:内部振荡器使能。/位6:IFRDY:内部振荡器频率准备好标
8、志,0:内部振荡器未运行在编程频率。1:内部振荡器按编程频率运行。/位5:SUSPEND:内部振荡器挂起使能位,向该位写1将内部振荡器置于SUSPEND模式。当有一个SUSPEND模式唤醒事件发生时,内部振荡器恢复运行。/位4-3:未用。读 = 00b,写 = 忽略。/位2-0:IFCN2-0:内部振荡器频率控制位,/000:SYSCLK为内部振荡器128分频(缺省)。/001:SYSCLK为内部振荡器64分频。/010:SYSCLK为内部振荡器32分频。/011:SYSCLK为内部振荡器16分频。/100:SYSCLK为内部振荡器8分频。/101:SYSCLK为内部振荡器4分频。/110:S
9、YSCLK为内部振荡器2分频。/111:SYSCLK为内部振荡器不分频。/- CLKSEL = 0x30; /配置振荡器为系统时钟/-/VREF初始化 REF0CN = 0x13;/-/ADC初始化 ADC0CF = 0xf8; ADC0CN = 0x80; ADC0TK = 0xff; ADC0MX = 0x01; /-/IDAC0初始化 IDA0CN = 0xf6; IDA0H = 0x04; IDA0L = 0xff;/-/T0作为PCA输入频率,T1用来测量电机速度 IT0 = 1; CKCON = 0xcc; /T0采用系统时钟,T1采用系统时钟,T2采用系统时钟/12,T3采用系统
10、时钟 TMOD = 0x19; /T0定时器模式,由INT0决定。 TR0 = 1; /- IT01CF = 0x02; /p0.2口 EX0 = 1;/-/T2初始化 TMR2CN = 0x04; TMR2RLL = 0x3f; TMR2RLH = 0xb0; TMR2L = 0x3f; TMR2H = 0xb0; ET2 = 1;/-/T3初始化 TMR3CN = 0x00; TMR3RLL = 0x00; TMR3RLH = 0x00; TMR3L = 0x00; TMR3H = 0x00;/- EA = 1;/*/void INT0_INT() interrupt 0 float x
11、= 0; BYTE i = 31; BYTE j = 0; T0_BUF = TL0 + 256*TH0; TH0=0; TL0=0; for(i=59;i>=1;i-) MCH_JISHUi = MCH_JISHUi-1; MCH_JISHU0 = T0_BUF; for(j=0;j<=59;j+) x += MCH_JISHUj; x = x/60.0; ZHUANSU = x;/*/void T2_INT() interrupt 5 TMR2CN &= 0x7f; Count_n+; if(Count_n > 2000) Count_n = 0; Warning
12、_Count+; if(Warning_Count > 100) Warning_Count = 0; Warning_bit = !Warning_bit; S1_BIT = 1; if(WENKONG_BIT = 1) WENDU_JISHU+; if(WENDU_JISHU>270) WENDU_JISHU = 270;BEER_A_BIT = 1;WENKONG_BIT = 0; /*/void T3_INT() interrupt 14 TMR3CN &= 0x7f;/*/延时子程序void YSH(D_WORD x) while(x>0) x-; /*/波
13、形发生void BOXING() TEST_XH = 0; YSH(100); TEST_XH = 1; YSH(100);/*/液位换算void YEWEI_HS() L_yw = 1000.0*(float)(ZHUANSU) - L_0mm)/(L_100mm-L_0mm); if(L_yw<0) L_yw = 0; L_yw_= (WORD)L_yw; /*/温度换算void TEMP_HS() T_yw = 766.0*(float)(ADC_)-T_223degree)/(T_989degree-T_223degree)+223.0; T_yw_= (WORD)T_yw;/*
14、/WORD ADC0(BYTE AD_LU) BYTE x; WORD y; ADC0MX = AD_LU; ADC0CN |= 0x10; x = ADC0CN&0x20; while(x = 0) x = ADC0CN&0x20; ADC0CN = ADC0CN&0xdf; y = 256*ADC0H+ADC0L; return y;/*/WORD ADC0_PINGJUN(BYTE AD_LU) BYTE i; float x=0; AD_BUFCount_ = ADC0(AD_LU); Count_+; if(Count_>40) Count_=0; fo
15、r(i=0;i<40;i+) x += AD_BUFi; return (x/40.0);/-void DispLCD()int i;for(i=0;i<16;i+)DispStr1i = 32;DispStr2i = 32;switch(KEY_SWITCH_COUNT) case 0:/温度液位报警显示 if(L_yw_<L_WARNING) if(Warning_bit = 0) sprintf(DispStr1,"Low Warning"); sprintf(DispStr2,"Level:%3d.%dmm",L_yw_/10,
16、L_yw_%10); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1," "); sprintf(DispStr2," "); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else if(L_yw_>H_WARNING) if(Warning_bit = 0) sprintf(DispStr1,&
17、quot;High Warning"); sprintf(DispStr2,"Level:%3d.%dmm",L_yw_/10,L_yw_%10); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1," "); sprintf(DispStr2," "); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,
18、DispStr2,8); else sprintf(DispStr1,"Temp:%3d.%d%d",T_yw_/10,T_yw_%10,WENDU_JISHU); sprintf(DispStr2,"Level:%3d.%dmm",L_yw_/10,L_yw_%10); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 1:/温度液位显示 sprintf(DispStr1,"Temp:%3d.%d",T_yw
19、_/10,T_yw_%10); sprintf(DispStr2,"Level:%3d.%dmm",L_yw_/10,L_yw_%10); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 2: /温度设置 switch(KEY_SHIFT_COUNT1) case 0: sprintf(DispStr1,"Temp SET:"); sprintf(DispStr2,"Temp:%d%d%d.%d",TEMP_
20、SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 1: if(Warning_bit = 0) sprintf(DispStr1,"Temp SET:"); sprintf(DispStr2,"Temp:%d%d%d.%d",TEMP_SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HAN
21、ZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,"Temp SET:"); sprintf(DispStr2,"Temp:%d%d%d. ",TEMP_SET10,TEMP_SET11,TEMP_SET12); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 2: if(Warning_bit = 0) sprint
22、f(DispStr1,"Temp SET"); sprintf(DispStr2,"Temp:%d%d%d.%d",TEMP_SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,"Temp SET:"); sprintf(DispStr2,"Temp:%d%d .%d",TEMP_SET10,
23、TEMP_SET11,TEMP_SET13); DispStr2strlen(DispStr2)=32; RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 3: if(Warning_bit = 0) sprintf(DispStr1,"Temp SET:"); sprintf(DispStr2,"Temp:%d%d%d.%d",TEMP_SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT128
24、32_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,"Temp SET:"); sprintf(DispStr2,"Temp:%d %d.%d",TEMP_SET10,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 4: if(Warning_bit
25、 = 0) sprintf(DispStr1,"Temp SET:"); sprintf(DispStr2,"Temp:%d%d%d.%d",TEMP_SET10,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,"Temp SET:"); sprintf(DispStr2,"Temp: %d%d.%d"
26、;,TEMP_SET11,TEMP_SET12,TEMP_SET13); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; default: break; KEY_SHIFT_COUNT2 = 0; KEY_SHIFT_COUNT3 = 0; break; case 3: /高液位报警设置 switch(KEY_SHIFT_COUNT2) case 0: sprintf(DispStr1,"High Alarm SET:"); sprintf(DispStr2
27、,"Level:%d%d%d.%dmm",L_A_H_SET0,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 1: if(Warning_bit = 0) sprintf(DispStr1,"High Alarm SET:"); sprintf(DispStr2,"Level:%d%d%d.%dmm",L_A_H_SET0,L_A_H_S
28、ET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,"High Alarm SET:"); sprintf(DispStr2,"Level:%d%d%d. mm",L_A_H_SET0,L_A_H_SET1,L_A_H_SET2); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,
29、DispStr2,8); break; case 2: if(Warning_bit = 0) sprintf(DispStr1,"High Alarm SET:"); sprintf(DispStr2,"Level:%d%d%d.%dmm",L_A_H_SET0,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,"High Ala
30、rm SET:"); sprintf(DispStr2,"Level:%d%d .%dmm",L_A_H_SET0,L_A_H_SET1,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; case 3: if(Warning_bit = 0) sprintf(DispStr1,"High Alarm SET:"); sprintf(DispStr2,"Level:%d%d%d.%dmm"
31、;,L_A_H_SET0,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(DispStr1,"High Alarm SET:"); sprintf(DispStr2,"Level:%d %d.%dmm",L_A_H_SET0,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT128
32、32_WRITE_HANZI(0x90,DispStr2,8); break; case 4: if(Warning_bit = 0) sprintf(DispStr1,"High Alarm SET:"); sprintf(DispStr2,"Level:%d%d%d.%dmm",L_A_H_SET0,L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); else sprintf(Dis
33、pStr1,"High Alarm SET:"); sprintf(DispStr2,"Level: %d%d.%dmm",L_A_H_SET1,L_A_H_SET2,L_A_H_SET3); RT12832_WRITE_HANZI(0x80,DispStr1,8); RT12832_WRITE_HANZI(0x90,DispStr2,8); break; default: break; KEY_SHIFT_COUNT1 = 0; KEY_SHIFT_COUNT3 = 0; break; case 4: /低液位报警设置 switch(KEY_SHIFT_COUNT3) case 0: spri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科技公司商业模式创新的成功案例研究
- 科技助力构建平安校园新生态
- 家庭教育与医疗健康的关系
- DB6103T 81-2025袋栽银耳栽培技术规范
- DB35T 2228-2024科技成果转化效果评估导则
- 个人向企业租赁设备合同标准范本
- 个人地下停车位转让合同书
- 三人共同持股合同范例
- 个人贷款合同样本(房产抵押)
- 二人合资创业合同书:经营合作协议
- 品质部经理KRA KPI考核表
- 国家中小学智慧教育平台推动家校共育
- 《马克思主义与社会科学方法论》授课教案
- 一个28岁的漂亮小媳妇在某公司打工-被老板看上之后
- 马工程教育哲学课件第十章 教育哲学与教师发展
- 三年级道德与法治下册第一单元我和我的同伴教材解读新人教版
- GB/T 11376-2020金属及其他无机覆盖层金属的磷化膜
- 成功源于自律 主题班会课件(共34张ppt)
- 新青岛版(五年制)五年级下册小学数学全册导学案(学前预习单)
- (完整word版)重点监管的危险化学品名录(完整版)
- 高级工程师电子版职称证书在网上打印步骤
评论
0/150
提交评论