ImageVerifierCode 换一换
格式:DOC , 页数:12 ,大小:68.04KB ,
资源ID:8781954      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/8781954.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(NTC热敏电阻高精度温度计程序.doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

NTC热敏电阻高精度温度计程序.doc

1、 NTC热敏电阻高精度温度计程序 [日期:2009-08-17 ] [来源:东哥单片机学习网 作者:admin] [字体:大 中 小] (投递新闻) STC12C5406AD 晶振频率为12MHz 本程序已调试完成: 功能说明:采用廉价的NTC热敏电阻设计高精度温度计的方案, 根据NTC热敏电阻的温度特性,采用了较具新意程序算法;摆脱了传统的查表显示温度的方法, 特点:程序中无须查表,打破了常规的查表显示温度的方法。 //NTC敏电阻温度显示。 //DS18B20温度显示。 #include "stc12c5410ad.h

2、"//头文件 #include "intrins.h" #define uchar unsigned char//宏定义 #define uint unsigned int//宏定义 sbit RS=P3^4;//定义I/O的硬件接口 sbit E=P3^7; sbit A_B=P3^2; sbit CP=P3^3; sbit RT=P1^3;//外接NTC sbit R_100K=P1^4;// sbit D_J=P1^6;//检测 sbit DQ=P1^5;////定义I/O的硬件接口--温度 uint Temperatu

3、re;//温度暂存单元 uint Negative_Temperature;//负温度暂存单元 bit Negative_sign=1;//负温度标志 unsigned long TEMP_1;//长整形单元 float Time_RT,Time_R; uchar aa,cc,ee; uint bb[11]; 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 数字

4、 uchar code DispTab_2[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//温度符号 uchar DispBuf[6]; //6字节的显示缓冲区 void delay(uint z)//1ms延时 { uchar x,x1; for(;z>0;z--) { for(x=0;x<114;x++) { for(x1=0;x1<1;x1++); } } } void delay1(uchar x2)//经精准计算,该段程序1次延时时间为 19.53us;多次调用需要重新计算。

5、 { while(x2>0) { x2--; } } void write_Directive(uchar a)//写指令 { uchar i,temp; for(i=0;i<8;i++) { temp=a; temp&=0x80; if(temp==0x80) A_B=1; else A_B=0; a=a<<1; delay1(1); CP=0; delay1(1); CP=1; delay1(1); CP=0; } RS=0; delay(3); E=0;

6、delay(3); E=1; delay(3); E=0; delay(3); } void write_Data(uchar a)//写数据 { uchar i,temp; for(i=0;i<8;i++) { temp=a; temp&=0x80; if(temp==0x80) A_B=1; else A_B=0; a=a<<1; delay1(1); CP=0; delay1(1); CP=1; delay1(1); } RS=1; delay(3); E=0; de

7、lay(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=aa<<8; //aa|=TL1; //Time

8、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()//温

9、度符号 { uchar i; for(i=0;i<8;i++) { write_Directive(0x40+i);//写入温度符号 write_Data(DispTab_2[i]); } } void write_Data_String()//显示时间函数 { uchar i; uint mm,mb; mb=temp5; // DispBuf[0]=temp/10000;//显示百位 // mm=temp%10000; // DispBuf[1]=mm/1000;//显示十位 // mm=mm%1000;

10、// DispBuf[2]=mm/100;//显示个位 // mm=mm%100; DispBuf[1]=mb/100;//显示小数点:0.001 mm=mb%100;//显示小数点:0.0001 DispBuf[2]=mm/10;//显示小数点:0.001 DispBuf[3]=mm%10;//显示小数点:0.0001 //i=DispBuf[0];//百位判断,如果为0,则消隐 //if(i==0) // i=10; //DispBuf[0]=DispTab_1[i];//查表,取字符 i=DispBuf[1]; DispBuf[

11、1]=DispTab_1[i]; i=DispBuf[2]; DispBuf[2]=DispTab_1[i]; i=DispBuf[3]; DispBuf[3]=DispTab_1[i]; //i=DispBuf[4]; //DispBuf[4]=DispTab_1[i]; write_Directive(0x80+0x00);//第一行,第五个位置地址 write_Data(’N’); write_Data(’T’); write_Data(’C’); //write_Data(’5’); //write_Data(’D’); //wr

12、ite_Data(’Z’); //write_Data(’ ’); write_Data(’:’); //write_Data(DispBuf[0]);//第一行,第五个位置 write_Data(DispBuf[1]);//第一行,第七个位置 write_Data(DispBuf[2]);//第一行,第八个位置 write_Data(’.’);//第一行,第六个位置 write_Data(DispBuf[3]);//第一行,第九个位置 //write_Data(DispBuf[4]);//第一行,第十个位置 //wri

13、te_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闪烁。

14、 while(DQ==0); delay1(40);//程序20次延时时间为 197.32us } void write_DB18B20(uchar m1)//写DB18B20 { uchar i,m2; for(i=0;i<8;i++) { m2=m1; m2=m2&0x01; DQ=0; _nop_(); DQ=1; if(m2==0x01) DQ=1; else DQ=0; delay1(50);//程序5次延时时间为 54.25us m1=m1>>1; DQ=1; } } r

15、ead_DB18B20()//读DB18B20 { uint temp_1; uchar i; for(i=0;i<16;i++) { temp_1=temp_1>>1; 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 }

16、 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_St

17、ring1()//显示时间函数 { uchar i; unsigned long mm; DispBuf[0]=TEMP_1/1000000;//显示百位 mm=TEMP_1%1000000; DispBuf[1]=mm/100000;//显示十位 mm=mm%100000; DispBuf[2]=mm/10000;//显示个位 mm=mm%10000; DispBuf[3]=mm/1000;//显示小数点:0.1 mm=mm%1000; DispBuf[4]=mm/100;//显示小数点:0.01 mm=mm%100;

18、 DispBuf[5]=mm/10;//显示小数点:0.001 DispBuf[6]=mm%10;//显示小数点:0.0001 i=DispBuf[0];//百位判断,如果为0,则消隐 if(i==0) i=10; else if(Negative_sign==0)//负温度判断,如果为0,则温度为负的,显示负号 i=11; DispBuf[0]=DispTab_1[i];//查表,取字符 i=DispBuf[1]; DispBuf[1]=DispTab_1[i]; i=DispBuf[2]; DispBuf[2]=DispTab_1[

19、i]; i=DispBuf[3]; DispBuf[3]=DispTab_1[i]; i=DispBuf[4]; DispBuf[4]=DispTab_1[i]; i=DispBuf[5]; DispBuf[5]=DispTab_1[i]; i=DispBuf[6]; DispBuf[6]=DispTab_1[i]; write_Directive(0x80+0x40);//第一行,第五个位置地址 write_Data(’D’); write_Data(’S’); write_Data(’1’); write_Data(’8’);

20、 write_Data(’B’); write_Data(’2’); write_Data(’0’); write_Data(’:’); //write_Data(DispBuf[0]);//第一行,第五个位置 // write_Data(DispBuf[1]);//第一行,第六个位置 write_Data(DispBuf[2]);//第一行,第八个位置 write_Data(’.’);//第一行,第七个位置 write_Data(DispBuf[3]);//第一行,第九个位置 write_Data(DispBuf[4]);//第一行,

21、第十个位置 //write_Data(DispBuf[5]);//第一行,第十一个位置 //write_Data(DispBuf[6]);//第一行,第十二个位置 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,P

22、1.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=aa<<8; aa|=TL1; Time_R=aa; temp=aa; }*/ void ADC_Conversion()//ADC开始转 { ADC_CONTR=0x87; delay(1); ADC_CONTR=0x8f; delay(1); //wh

23、ile((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=P1^3;//外接NTC //sbit R_100K=P1^4;// //sbit D_J=P1^6;//检测 uchar i; cc=0x3d; dd=30; //goto lk; init(); T

24、emperature_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);//写D

25、B18B20;0xbe 读温度指令 Temperature=read_DB18B20();//读 DB18B20 温度,读出的温度在 Temperature Negative();//温度为零度以下时,将变换温度,否则不变 TEMP_1=Temperature*0.0625*10000;//转换成 十进制(*10000,表示,显示到小数点后4位:0.0000) write_Data_String1();//显示温度 //RT_DJ(); for(i=0;i<10;i++) { ADC_Conversion(); bb[i]=ADC_DATA;//高8

26、位; } Time_RT=bb[0]+bb[1]+bb[2]+bb[3]+bb[4]+bb[5]+bb[6]+bb[7]+bb[8]+bb[9]; ee=Time_RT/10; //lk: temp=0x46; //if(ee==cc) //{ // temp5=30; //} if(ee>cc) { for(i=0;i<94;i++) { cc=cc+1; dd=dd+0.5; if(ee==cc) { temp5=dd*10; i=93; } } } if(ee

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服