




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、温度控制器程序/PT100自身温度范围#defineM_temper_MIN-200#defineM_temper_MAX500最低温度最高温度/CPU引脚定义#defineP_LEDP0sbitLED_S1=P2八0;sbitLED_S2=P2八1;sbitLED_S3=P2八2;/LED1位选/LED2位选/LED3位选/LED4位选sbitLED_S4=P2八3;sbit KEY_S1 = P1 八 0;上下限温度设置sbitKEY_S2=P1八1;温度加sbitKEY_S3=P1八2;温度减全局变量寄存器ucharM_LED1,M_LED2,M_LED3,M_LED4;/4位LED显示
2、寄存器ucharLED_DISP_TAB口=/LED编码表0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,/0-90X40,0X23,0X1c,0X58字符:-nuc;uchar Set_count;uchar T0_count;uint T1_count;char M_temper_up;char M_temper_down;char M_temper_AI;char M_temper_conver;bit B_set,B_set_AI;温度设置按钮计数/T0定时中断计数/T1定时中断计数温度上限温度下限设置中温度当前温度温度设置标志bit
3、B_set_T0,B_set_T1;定时器中断标志函数声明voidT1int_init();/*定时器T1初始化:设置工作方式赋初值开启中断*/voidT0int_init();/*定时器T0初始化:设置工作方式赋初值开启中断*/voidSet_temper();/*设置上下限温度:按键次数=1:显示上限温度并处于操作状态按键次数=2:显示下限温度并处于操作状态按键次数=3:保存设置值并退出*/voidInc_temper();/*提高设置的温度*/voidDec_temper();/*降低设置的温度*/voidLED_data_BCD(charDisp_dat);/*数码管显示温度*/voi
4、dPT100_delay(uintcount);/*PT100延时程序*/voidPT100_reset(void);/*PT100复位初始程序:根据PT100要求对其进行复位初始控制*/bitPT100_readbit(void);/*PT100位读子程序:从PT100取出一位数据*/ucharPT100_readbyte(void);/*PT100字节读子程序:返回数据值*/读出的一字节数据并voidPT100_writebyte(uchardat);/*PT100字节写子程序:将输入参数值写入PT100*/voidPT100_change(void);/启动PT100温度转换ucharP
5、T100_Gettemper(void);/*读取PT100温度数据:单线方式读取PT100转换的温度数据,并返回处理后的温度值*/延时子voidDelay_ms(uintcount);程序:延时count(ms)voidmain()ucharM_temper_curr;SP=0x50;堆栈起始地址M_temper_up=100;初始温度上下限M_temper_down=0;Delay_ms(500);T0int_init();/T0T1初始化T1int_init();while(1)if(B_set_T0)/T0定时读取温度标志EA=0;关总中断B_set_T0=0;if(!B_set)上下
6、限设置状态时,取消温度读取PT100_change();读取温度M_temper_curr=PT100_Gettemper();M_temper_conver=(M_temper_curr>126?(127-M_temper_curr):M_temper_curr);转换正负温度LED_data_BCD(M_temper_conver);转换LED显示EA=1;if(B_set_T1)T1定时LED显示扫描标志TR1=0;B_set_T1=0;+T1_count;switch(T1_count)依次显示4位LEDcase1:LED_S4=1;P_LED=LED_DISP_TABM_LED
7、1;LED_S1=0;break;case 2:LED_S1=1;P_LED=LED_DISP_TABM_LED2;LED_S2=0;break;case 3:LED_S2=1;P_LED=LED_DISP_TABM_LED3;LED_S3=0;break;case 4:LED_S3=1;P_LED=LED_DISP_TABM_LED4;LED_S4=0;T1_count=0;break;TR1=1;开T1定时器if(M_temper_conver>M_temper_down)&&(M_temper_conver<M_temper_up)/温度在上下限范围内BUZZ
8、=B_BUZZ_OFF;RED_ALARM=B_RED_OFF;GREEN_ALARM=B_GREEN_OFF;elseBUZZ=B_BUZZ_ON;if(M_temper_conver<M_temper_down)RED_ALARM=B_RED_ON;低于下限温度elseGREEN_ALARM=B_GREEN_ON;高于上限温度if(!KEY_S1)按键检测Set_temper();/设置温度Delay_ms(200);if(B_set)if(!KEY_S2)Inc_temper();温度加Delay_ms(200);if(!KEY_S3)Dec_temper();温度减Delay_m
9、s(200);voidSet_temper()设置温度+Set_count;B_set=1;设置标志if(Set_count=1)设置上限B_set_AI=0;LED_data_BCD(M_temper_up);M_temper_AI=M_temper_up;将原上限温度取出设置下elseif(Set_count=2)限B_set_AI=1;M_temper_up=M_temper_AI;存入新的上限温度LED_data_BCD(M_temper_down);M_temper_AI将原下限温度取出=M_temper_down;/else确认退出B_set=0;Set_count=0;LED_d
10、ata_BCD(M_temper_conver);M_temper_down存入新的下限温度M_temper_AI;void Inc_temper()温度加if (B_set_AI)限(0)还是下限(1)判断当前是设置上if(M_temper_AI<M_temper_MAX)&&(M_temper_AI<M_temper_up)M_temper_AI+;不能加到上线温度和温度范围elseif(M_temper_AI<M_temper_MAX)M_temper_AI+;LED_data_BCD(M_temper_AI);温度减判断当前是设置voidDec_tem
11、per()if(B_set_AI)上限(0)还是下限(1)if(M_temper_AI>M_temper_MIN)M_temper_AI-;elseif(M_temper_AI>M_temper_MIN)&&(M_temper_AI>M_temper_down)M_temper_AI-;PT100特LED_data_BCD(M_temper_AI);voidPT100_delay(uintcount)定延时uinti;while(count)i=200;while(i>0)count-;voidPT100_reset(void)/PT100复位初始uin
12、ti;DQ=0;i=103;while(i>0)i-;DQ=1;i=4;while(i>0)i-;bitPT100_readbit(void)/PT100位读子程序uinti;bitdat;DQ=1;_nop_();DQ=0;i+;DQ=1;i+;i+;dat=DQ;i=8;while(i>0)i-;return(dat);ucharPT100_readbyte(void)/PT100字节读子程序uchari,j,dat;dat=0;for(i=1;i<=8;i+)j=PT100_readbit();dat=(j<<7)|(dat>>1);把读取
13、的数据一位一位放进去return(dat);voidPT100_writebyte(uchardat)/PT100字节写子程序uinti;ucharj;bittestb;for(j=1;j<=8;j+)testb=dat&0x01;dat=dat>>1;if(testb)/write1(DQ=0;i+;i+;DQ=1;i=8;while(i>0)i-;)elseDQ=0;(/write0i=8;while(i>0)i-;DQ=1;i+;i+;voidPT100_change(void)启动PT100温度转换PT100_reset();PT100_delay
14、(1);PT100_writebyte(0xcc);PT100_wMtebyte(0x44);读取ucharPT100_Gettemper()PT100温度数据uinttemp;ucharM_temper_L=0,M_temper_H=0;PT100_reset();PT100_delay(1);PT100_writebyte(0xcc);PT100_writebyte(0xbe);M_temper_L=PT100_readbyte();M_temper_H=PT100_readbyte();temp=M_temper_H;温度数据处理temp<<=8;temp=temp|M_te
15、mper_L;if(M_temper_H>0xf0)/正(0)负(1)温度值temp=(0x1000-(temp&0x0fff)/16)+127;计算温度elsetemp=temp/16;M_temper_H=temp;returnM_temper_H;voidLED_data_BCD(charDisp_dat)显示数据LED编码处理if(Disp_dat<0)负温度M_LED1=0X0a;/调用第10个M_LED2=(0-Disp_dat)/10;M_LED3=(0-Disp_dat)%10;elseM_LED1=Disp_dat/100;正温度M_LED2=(Disp_
16、dat%100)/10;M_LED3=(Disp_dat%100)%10;if(B_set)/设置状态时显示字符if(B_set_AI)M_LED4=0x0c;elseM_LED4=0x0b;elseM_LED4=0x0d;voidT0int_init()定时器T0初始化TMOD=0X11;TH0=(65536-XTAL/12q0_TIMER)/256;TL0=(65536-XTAL/12叮0_TIMER)%256;EA=1;ET0=1;TR0=1;voidT1int_init()定时器T1初始化TMOD=0X11;TH1=(65536-XTAL/12q1_TIMER)/256;TL1=(65536-XTAL/12叮1_TIMER)%256;EA=1;ET1=1;TR1=1;延时countvoidDelay_ms(uintcount)(ms)uinti;while(-count>0)for(i=0;i<125;i+);voidTimer0()inter
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度环境监测工程师劳动合同模板
- 二零二五年度房贷合同编号查询与统计分析合同
- 二零二五年度钢结构工程设计与施工一体化合同
- 2025版建筑行业劳务派遣用工管理合同模板
- 年级语文数学试卷
- 青教赛数学试卷
- 2025中国能建葛洲坝集团西北分公司招聘(25人)笔试参考题库附带答案详解
- 2025年湖南常德烟草机械有限责任公司公开招聘笔试笔试参考题库附带答案详解
- 2025湖北省外商投资企业协会秘书处工作人员招聘22人笔试参考题库附带答案详解
- 清河志臻初中数学试卷
- 2025年餐饮服务从业人员食品安全知识培训考试题及答案
- 2025年湖北省公务员录用考试《行测》真题及答案解析(记忆版)
- 安宁疗护之症状管理
- 静脉输血操作规范与风险防控
- 门市转租合同协议书
- 《探索《资本论》的奥秘》课件
- 2025年初级消防员试题及答案
- API RP 5A3-2023 套管、油管和管线管的螺纹脂推.荐方法
- 行政岗干货知识培训课件
- 小学音乐人音版三年级上册摇啊摇教案
- 《数鸡蛋》(教学设计)-2024-2025学年一年级上册数学北师大版
评论
0/150
提交评论