




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
NTC热敏电阻高精度温度计程序日期:2009-08-17 来源:东哥单片机学习网 作者:admin 字体:大 中 小 (投递新闻) STC12C5406AD 晶振频率为12MHz 本程序已调试完成: 功能说明:采用廉价的NTC热敏电阻设计高精度温度计的方案, 根据NTC热敏电阻的温度特性,采用了较具新意程序算法;摆脱了传统的查表显示温度的方法, 特点:程序中无须查表,打破了常规的查表显示温度的方法。 /NTC敏电阻温度显示。 /DS18B20温度显示。 #include stc12c5410ad.h/头文件 #include intrins.h #define uchar unsigned char/宏定义 #define uint unsigned int/宏定义 sbit RS=P34;/定义I/O的硬件接口 sbit E=P37; sbit A_B=P32; sbit CP=P33; sbit RT=P13;/外接NTC sbit R_100K=P14;/ sbit D_J=P16;/检测 sbit DQ=P15;/定义I/O的硬件接口-温度 uint Temperature;/温度暂存单元 uint Negative_Temperature;/负温度暂存单元 bit Negative_sign=1;/负温度标志 unsigned long TEMP_1;/长整形单元 float Time_RT,Time_R; uchar aa,cc,ee; uint bb11; float dd,temp5; uchar code DispTab_1=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F;/1602:0-9 数字 uchar code DispTab_2=0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00;/温度符号 uchar DispBuf6; /6字节的显示缓冲区 void delay(uint z)/1ms延时 uchar x,x1; for(;z0;z-) for(x=0;x114;x+) for(x1=0;x10) x2-; void write_Directive(uchar a)/写指令 uchar i,temp; for(i=0;i8;i+) temp=a; temp&=0x80; if(temp=0x80) A_B=1; else A_B=0; a=a1; delay1(1); CP=0; delay1(1); CP=1; delay1(1); CP=0; RS=0; delay(3); E=0; delay(3); E=1; delay(3); E=0; delay(3); void write_Data(uchar a)/写数据 uchar i,temp; for(i=0;i8;i+) temp=a; temp&=0x80; if(temp=0x80) A_B=1; else A_B=0; a=a1; delay1(1); CP=0; delay1(1); CP=1; delay1(1); RS=1; delay(3); E=0; delay(3); E=1; delay(3); E=0; delay(3); void init()/初始化 TMOD=0x10;/定时器T1工作于方式1,16位计数器 TH1=0x00; TL1=0x00; EA=1;/开总中断允许 ET1=1;/开定时器T1允许控制 /PT1=1;/开定时器T1中断为最高优先级 TR1=0;/T1开始运行 P1M1=0x80; P1M0=0x80; /aa=TH1; /aa=aa8; /aa|=TL1; /Time_RT=aa; /Time_RT=Time_RT|TL1; _nop_(); delay(15); write_Directive(0x38); delay(5); write_Directive(0x38); delay(5); write_Directive(0x38); write_Directive(0x01); write_Directive(0x02);/初始化后数据地址为0x80;即第一行,第一个位置 write_Directive(0x0c); void Temperature_symbol()/温度符号 uchar i; for(i=0;i8;i+) write_Directive(0x40+i);/写入温度符号 write_Data(DispTab_2i); void write_Data_String()/显示时间函数 uchar i; uint mm,mb; mb=temp5; / DispBuf0=temp/10000;/显示百位 / mm=temp%10000; / DispBuf1=mm/1000;/显示十位 / mm=mm%1000; / DispBuf2=mm/100;/显示个位 / mm=mm%100; DispBuf1=mb/100;/显示小数点:0.001 mm=mb%100;/显示小数点:0.0001 DispBuf2=mm/10;/显示小数点:0.001 DispBuf3=mm%10;/显示小数点:0.0001 /i=DispBuf0;/百位判断,如果为0,则消隐 /if(i=0) / i=10; /DispBuf0=DispTab_1i;/查表,取字符 i=DispBuf1; DispBuf1=DispTab_1i; i=DispBuf2; DispBuf2=DispTab_1i; i=DispBuf3; DispBuf3=DispTab_1i; /i=DispBuf4; /DispBuf4=DispTab_1i; write_Directive(0x80+0x00);/第一行,第五个位置地址 write_Data(N); write_Data(T); write_Data(C); /write_Data(5); /write_Data(D); /write_Data(Z); /write_Data( ); write_Data(:); /write_Data(DispBuf0);/第一行,第五个位置 write_Data(DispBuf1);/第一行,第七个位置 write_Data(DispBuf2);/第一行,第八个位置 write_Data(.);/第一行,第六个位置 write_Data(DispBuf3);/第一行,第九个位置 /write_Data(DispBuf4);/第一行,第十个位置 /write_Data(0x00);/第一行,第十三个位置显示温度符号 void DB18B20_init()/DB18B20复位 DQ=1; delay1(1);/程序1次延时时间为 19.53us DQ=0; delay1(250);/程序110次延时时间为 965.71us DQ=1; delay1(10);/程序1次延时时间为 19.53us while(DQ=1); /if(DQ=0) _nop_(); / led_7=led_7;/led检测复位正常否,如果DB18B20存在,且正常;led闪烁。 while(DQ=0); delay1(40);/程序20次延时时间为 197.32us void write_DB18B20(uchar m1)/写DB18B20 uchar i,m2; for(i=0;i1; DQ=1; read_DB18B20()/读DB18B20 uint temp_1; uchar i; for(i=0;i1; DQ=1; _nop_(); DQ=0; _nop_(); DQ=1; _nop_(); _nop_(); _nop_(); _nop_(); if(DQ=1) temp_1=temp_1|0x8000; /else / temp_1=temp_1|0x0000; delay1(50);/程序5次延时时间为 54.25us return temp_1;/返回温度值 void Negative()/温度为零度以下时,将变换温度 Negative_Temperature=Temperature; Negative_Temperature=Negative_Temperature&0xf800; if(Negative_Temperature=0xf800) Temperature=Temperature; Temperature=Temperature+1; Negative_sign=0; void write_Data_String1()/显示时间函数 uchar i; unsigned long mm; DispBuf0=TEMP_1/1000000;/显示百位 mm=TEMP_1%1000000; DispBuf1=mm/100000;/显示十位 mm=mm%100000; DispBuf2=mm/10000;/显示个位 mm=mm%10000; DispBuf3=mm/1000;/显示小数点:0.1 mm=mm%1000; DispBuf4=mm/100;/显示小数点:0.01 mm=mm%100; DispBuf5=mm/10;/显示小数点:0.001 DispBuf6=mm%10;/显示小数点:0.0001 i=DispBuf0;/百位判断,如果为0,则消隐 if(i=0) i=10; else if(Negative_sign=0)/负温度判断,如果为0,则温度为负的,显示负号 i=11; DispBuf0=DispTab_1i;/查表,取字符 i=DispBuf1; DispBuf1=DispTab_1i; i=DispBuf2; DispBuf2=DispTab_1i; i=DispBuf3; DispBuf3=DispTab_1i; i=DispBuf4; DispBuf4=DispTab_1i; i=DispBuf5; DispBuf5=DispTab_1i; i=DispBuf6; DispBuf6=DispTab_1i; write_Directive(0x80+0x40);/第一行,第五个位置地址 write_Data(D); write_Data(S); write_Data(1); write_Data(8); write_Data(B); write_Data(2); write_Data(0); write_Data(:); /write_Data(DispBuf0);/第一行,第五个位置 / write_Data(DispBuf1);/第一行,第六个位置 write_Data(DispBuf2);/第一行,第八个位置 write_Data(.);/第一行,第七个位置 write_Data(DispBuf3);/第一行,第九个位置 write_Data(DispBuf4);/第一行,第十个位置 /write_Data(DispBuf5);/第一行,第十一个位置 /write_Data(DispBuf6);/第一行,第十二个位置 write_Data(0x00);/第一行,第十三个位置显示温度符号 void Timer1() interrupt 3/TR1 /TR1=0; /P1M0=0x08;/P1.3高阻 /* void RT_DJ() D_J=0; R_100K=0; P1M0=0x18;/P1.3,P1.4高阻 P1M1=0x18;/P1.3,P1.4高阻 TH1=0x00; TL1=0x00; P1M0=0x48;/P1.3,P1.6高阻 P1M1=0x48;/P1.3,P1.6高阻 R_100K=1; TR1=1; while(!D_J); TR1=0; aa=TH1; aa=aa8; aa|=TL1; Time_R=aa; temp=aa; */ void ADC_Conversion()/ADC开始转 ADC_CONTR=0x87; delay(1); ADC_CONTR=0x8f; delay(1); /while(ADC_CONTR=0x8f); ADC_CONTR=0x87; delay(1); /temp=ADC_DATA;/高8位 void main() /delay1(5);/程序1次延时时间为 19.53us /P1M1=0x80; /P1M0=0x80; /sbit RT=P13;/外接NTC /sbit R_100K=P14;/ /sbit D_J=P16;/检测 uchar i; cc=0x3d; dd=30; /goto lk; init(); Temperature_symbol();/写入温度符号 while(1) DB18B20_init();/DB18B20复位 write_DB18B20(0xcc);/写DB18B20;0xcc 跳过 ROM 指令 write_DB18B20(0x44);/写DB18B20;0x44 启动温度转换指令 delay(1000);/延时1秒 DB18B20_init();/DB18B20复位 write_DB18B20(0xcc);/写DB18B20;0xcc 跳过 ROM 指令 write_DB18B20(0xbe);/写DB18B20;0xbe 读温度指令 Temperature=read_DB18B20();/读 DB18B20 温度,读出的温度在 Temperature Negative();/温度为零度以下时,将变换温度,否则不变 TEMP_1=Temperature*0.0625*10000;/转换成 十
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全日培训文件课件
- 瓯海区安全生产培训课件
- 安全方面的培训内容课件
- 广西荣登堡木业有限公司年产8万立方米生态板和50万张PET贴面板建设项目环评报告
- 北海港铁山港西港区北暮作业区5万吨级航道工程环境影响报告书
- 广西晟宇通新型建材有限公司年产30万立方米蒸压加气混凝土砌块生产线项目新增生物质锅炉环境影响报告表
- 猫咪的科学课件
- 农业无人机租赁服务产业链上下游企业合作模式研究
- 农业无人机租赁平台运营效率优化与市场盈利能力分析报告
- 犬感染性疾病课件
- 前列腺增生科普知识
- 5G-Advanced通感融合网络架构研究报告(第二版)
- 五倍子提取物对临床分离鸡源大肠杆菌的抑制作用研究
- 2025年反洗钱知识竞赛多选题库及答案(共70题)
- 2025时事政治考试题库及参考答案(公职考试)
- 2025年秋苏教版小学科学四年级上册教学计划
- DB32 T538-2002 江苏省住宅物业管理服务标准
- 农业可持续发展指标体系
- 2024年危险化学品经营单位主要负责人试题题库
- 2024届贵州省贵阳市高三下学期适应性考试(二)物理试题
- 癌因性疲乏治疗指南
评论
0/150
提交评论