温度控制系统设计_第1页
温度控制系统设计_第2页
温度控制系统设计_第3页
温度控制系统设计_第4页
温度控制系统设计_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论