高精度温度控制器设计参考程序

上传人:cn****1 文档编号:483749996 上传时间:2023-10-09 格式:DOCX 页数:5 大小:16.37KB
返回 下载 相关 举报
高精度温度控制器设计参考程序_第1页
第1页 / 共5页
高精度温度控制器设计参考程序_第2页
第2页 / 共5页
高精度温度控制器设计参考程序_第3页
第3页 / 共5页
高精度温度控制器设计参考程序_第4页
第4页 / 共5页
高精度温度控制器设计参考程序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《高精度温度控制器设计参考程序》由会员分享,可在线阅读,更多相关《高精度温度控制器设计参考程序(5页珍藏版)》请在金锄头文库上搜索。

1、程序#includeunsignedcharcodeLED1=0x3F,0x06,0x5B,0x4R0x66,0x6D,0x7D,0x07,0x7F,0x6E0x3f;/ 共阳极0,1,2,3,4,5,6,7,8,9,0 的段码unsigned char code dispbit=0x8f,0x4f,0x2f; /1,2,3 位数码管的位选温度从25r到 100r,对应的阻值从10k到0.972k,差模电压从0V到2Vunsigned char q=0,ADC_CHANNEL=0;/8位转换结果及设定温度T设定与测量温度转换温度增加温度减小红灯显示加热状态int DATA,T=25;sbit

2、S1=P1A7;sbit S2=P3A2;sbit S3=P3A3;sbit red=P1A6;void delay(unsigned char i) 数码管动态显示的延时函数 ( unsigned char j;for(i; i 0; i-)for(j = 200; j 0; j-);void main() unsigned char a=0,i,R=0,n=0;unsigned char LEDOUT3;int J=0,Z=0,E=0;P2M0=0xff;P0M0=0xe0;P1M1=0x01;P1M0=0x40;P1ASF=0x01;TMOD=0x01;TH0=254;TL0=152;测

3、量温度及中间变量与显示温度/P2 口设为推挽输出/P0/P1口高3位推挽输出口最低位高阻输入用于AD口最低位用于AD转换/P1定时器0工作于方式1/11.0592M时使得PWM 脉冲频率为10HZ,则初值为X,设为最大,使其输出低,复位初始不加热使PCA处于PWM模式外部中断0下降沿触发外部中断1下降沿触发开总中断允许定时器0中断11059200/【12* (65536-X) *256】=10CMOD=0x84;定时器0的溢出脉冲作为PCA的计数源CCAP0H=CCAP0L=0xff;PCA_PWM0=3;CCAPM0=0x42;IT0=1;IT1=1;EA=1;ET0=1;/启动ADC_CO

4、NTR=ADC_POWERIADC_SPEEDHHIADC_CHANNELIADC_START;AD,最高速转换频道0TR0=1;开启定时器0开启PCA计数打开允许对EEPROM操作操作地址读数据命令送触发命令5A送触发命令A5取数据关闭允许操作EEPROMCR=1;IAP_CONTR=0x83;IAP_ADDRH=0x00;IAP_ADDRL=0x00;IAP_CMD=IAP_READ;IAP_TRIG=IAP_TRIG0;IAP_TRIG=IAP_TRIG1;T=IAP_DATA;IAP_CONTR=0x03;PCON=PCON&(LVDF); 清除掉电标志位while(1)if(ADC_

5、CONTR&0x10)转换完成DATA=ADC_RES;if(0=DATA&DATA=16)/分 6 段非线性处理J=25+7*(DATA-0)/16.0;else if(16DATA&DATA=37)J=32+7*(DATA-16)/21.0;else if(37DATA&DATA=74)J=39+14*(DATA-37)/37.0;else if(74DATA&DATA=100)J=53+13*(DATA-74)/26.0;else if(100DATA&DATA=128) J=66+24*(DATA-100)/28.0;else if(128DATA&DATA=141)J=90+12*(

6、DATA-128)/13.0; /8 位 AD 转换/E=Z;/Z=J;/if(red=1)加热时只升不降/if(J=E)不加热时只降不升/Z=E;/30次数据相加求平均值清标志位Z=Z+J;a+;if(a=30)a=0;Z=Z/30;E=Z;ADC_CONTR&=ADC_FLAG;ADC_CONTR=ADC_CONTRIADC_START; /下次转换开始if(S1=0)测量温度与设定温度切换_/ LEDOUT0=LED1DATA/100;调试时显示转换值/LEDOUT1=LED1DATA%100/10;/LEDOUT2=LED1DATA%10;if(T=100)设定温度超过100时锁定T=

7、100;LEDOUT0=LED11;达 100 度最高位显示 1else LEDOUT0=LED10;LEDOUT1=LED1T/10;显示设定温度LEDOUT2=LED1T%10;elseif(E=100)显示温度超100锁定E=100;LEDOUT0=LED11; else LEDOUT0=LED10; LEDOUT1=LED1E/10;LEDOUT2=LED1E%10;/ 显示测量温度if(!S1)if(37T&T95)EX0=1;EX1=1;else if(T=37)EX0=1;EX1=0;else EX0=0;EX1=1;else EX0=0;EX1=0;q=0;设定温度范围在37到

8、95设定时中断有效低于37度只升不降高于95度只降不升处于显示测量温度时使按键无效IE0=0;IE1=0;if(q)IAP_CONTR=0x83;IAP_ADDRH=0x00;IAP_ADDRL=0x00;IAP_CMD=IAP_ERASE;IAP_TRIG=IAP_TRIG0;IAP_TRIG=IAP_TRIG1;IAP_DATA=T;IAP_CMD=IAP_PROGRAM;IAP_TRIG=IAP_TRIG0;IAP_TRIG=IAP_TRIG1;IAP_CONTR=0x03;IAP_CMD=0x00;IAP_TRIG=0x00;IAP_ADDRH=0xff;IAP_ADDRL=0xff;

9、q=0;开始存储设定温度写之前擦出大约21ms编程写入大约55usif(R=0)if(E1)CCAP0H=CCAP0L=0x00;PCA_PWM0=0;red=1;n=1;elseif(E-T1)CCAP0H=CCAP0L=0xff;PCA_PWM0=3;低于2度时加热保温控制直到加热到高于2度red=0;n=0;for(i=0;i3;i+) P2=LEDOUTi;P0=dispbiti;delay(100);void EX0_ISR() interrupt 0 T+;q=1;void T0_ISR() interrupt 1TH0=254;TL0=152;void EX1_ISR() interrupt 2 T-;q=1;动态显示外部0中断定时器0中断外部1中断

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号