温度控制器程序_第1页
温度控制器程序_第2页
温度控制器程序_第3页
温度控制器程序_第4页
温度控制器程序_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、/PT100自身温度范围 #define M_temper_MIN -200 /最低温度 #define M_temper_MAX 500 /最高温度 /CPU引脚定义 #define P_LED P0 sbit LED_S1 = P2 0; /LED1位选 sbit LED_S2 = P2 1; /LED2位选 sbit LED_S3 = P2 2; /LED3位选 sbit LED_S4 = P2 3; /LED4位选 sbit KEY_S1 = P1 0; /上下限温度设置 sbit KEY_S2 = P1 1; /温度加 sbit KEY_S3 = P1 2; /温度减 /全局变量寄存

2、器 uchar M_LED1, M_LED2, M_LED3, M_LED4; /4位LED显示寄存器 uchar LED_DISP_TAB = /LED编码表 0X3f, 0X06, 0X5b, 0X4f, 0X66, 0X6d, 0X7d, 0X07, 0X7f, 0X6f, /0-9 0X40, 0X23, 0X1c, 0X58 /字符: - n u c ; uchar Set_count; /温度设置按钮计数 uchar T0_count; /T0定时中断计数 uint T1_count; /T1定时中断计数 char M_temper_up; /温度上限 char M_temper_

3、down; /温度下限 char M_temper_AI; /设置中温度 char M_temper_conver; /当前温度 bit B_set,B_set_AI; /温度设置标志 bit B_set_T0,B_set_T1; /定时器中断标志 /函数声明 void T1int_init(); /* 定时器T1初始化: 设置工作方式 赋初值 开启中断 */ void T0int_init(); /* 定时器T0初始化: 设置工作方式 赋初值 开启中断 */ void Set_temper(); /*设置上下限温度: 按键次数=1:显示上限温度并处于操作状态 按键次数=2:显示下限温度并处于

4、操作状态 按键次数=3:保存设置值并退出 */ void Inc_temper(); /*提高设置的温度 */ void Dec_temper(); /*降低设置的温度 */ void LED_data_BCD(char Disp_dat); /*数码管显示温度 */ void PT100_delay(uint count); /* PT100延时程序 */ void PT100_reset(void); /*PT100复位初始程序:根据PT100要求对其进行复位初始控制 */ bit PT100_readbit(void) ; /*PT100位读子程序: 从PT100取出一位数据 */ uc

5、har PT100_readbyte(void); /*PT100字节读子程序: 读出的一字节数据并返回数据值 */ void PT100_writebyte(uchar dat); /*PT100字节写子程序: 将输入参数值写入PT100 */ void PT100_change(void); /启动PT100温度转换 uchar PT100_Gettemper(void); /*读取PT100温度数据:单线方式读取PT100转换的温度数据, 并返回处理后的温度值 */ void Delay_ms(uint count); /延时子程序:延时 count (ms) void main() u

6、char M_temper_curr; SP=0x50; /堆栈起始地址 M_temper_up =100; /初始温度上下限 M_temper_down=0; Delay_ms(500); T0int_init(); /T0 T1初始化 T1int_init(); while(1) if (B_set_T0) /T0定时读取温度标志 EA=0; /关总中断 B_set_T0=0; if(!B_set) /上下限设置状态时,取消温度读取 PT100_change(); /读取温度 M_temper_curr=PT100_Gettemper(); M_temper_conver=(M_tempe

7、r_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位LED case 1: LED_S4 = 1; P_LED = LED_DISP_TABM_LED1; LED_S1 = 0; break; case 2: LED_S1 = 1; P_LED = LED_DISP_TABM_L

8、ED2; 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_converM_temper_down)&(M_temper_converM_temper_up) /温度在上下限范围内 BUZZ=B_BUZZ_OFF; RED_ALARM=B_RED_OFF; G

9、REEN_ALARM=B_GREEN_OFF; else BUZZ=B_BUZZ_ON; if(M_temper_converM_temper_down) RED_ALARM=B_RED_ON; /低于下限温度 else GREEN_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_ms(200)

10、; void Set_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; /将原上限温度取出 else if (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; /将原

11、下限温度取出 else /确认 退出 B_set = 0; Set_count = 0; LED_data_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+; /不能加到上线温度和温度范围 else if (M_temper_AI M_temper_MIN) M_tem

12、per_AI-; else if (M_temper_AI M_temper_MIN) & (M_temper_AI M_temper_down) M_temper_AI-; LED_data_BCD(M_temper_AI); void PT100_delay(uint count) /PT100特定延时 uint i; while(count) i=200; while(i0) i-; count-; void PT100_reset(void) /PT100复位初始 uint i; DQ=0; i=103; while(i0)i-; DQ=1; i=4; while(i0)i-; bit

13、 PT100_readbit(void) /PT100位读子程序 uint i; bit dat; DQ=1;_nop_(); DQ=0;i+; DQ=1;i+;i+; dat=DQ; i=8;while(i0)i-; return (dat); uchar PT100_readbyte(void) /PT100字节读子程序 uchar i,j,dat; dat=0; for(i=1;i=8;i+) j=PT100_readbit(); dat=(j1); /把读取的数据一位一位放进去 return(dat); void PT100_writebyte(uchar dat) /PT100字节写

14、子程序 uint i; uchar j; bit testb; for(j=1;j1; if(testb) /write 1 DQ=0; i+;i+; DQ=1; i=8;while(i0)i-; else DQ=0; /write 0 i=8;while(i0)i-; DQ=1; i+;i+; void PT100_change(void) /启动PT100温度转换 PT100_reset(); PT100_delay(1); PT100_writebyte(0xcc); PT100_writebyte(0x44); uchar PT100_Gettemper() /读取PT100温度数据

15、uint temp; uchar M_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; /温度数据处理 temp0xf0) /正(0)负(1)温度值 temp=(0x1000-(temp&0x0fff)/16)+127; /计算温度 else temp=temp/16; M_temper_H=temp; return M_temper_H; void LED_data_BCD(char Disp_dat) /显示数据LED编码处理 if (Disp_dat 0) for (i = 0; i T0_TIMER_S); B_set_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论