欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOC文档下载  

    基于某51单片机地数字温度计设计.doc

    • 资源ID:16086       资源大小:1.13MB        全文页数:23页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于某51单片机地数字温度计设计.doc

    基于51单片机的数字温度计设计一课题选择随着时代的开展,控制智能化,仪器小型化,功耗微量化得到广泛关注。单片机控制系统无疑在这方面起到了举足轻重的作用。单片机的应用系统设计业已成为新的技术热点,其中数字温度计就是一个典型的例子,它可广泛应用与生产生活的各个方面,具有巨大的市场前景。二设计目的1. 理解掌握51单片机的功能和实际应用。2. 掌握仿真开发软件的使用。3. 掌握数字式温度计电路的设计、组装与调试方法。三实验要求1. 以51系列单片机为核心器件,组成一个数字式温度计。2. 采用数字式温度传感器为检测器件,进展单点温度检测。3. 温度显示采用4位LED数码管显示,三位整数,一位小数。四设计思路1. 根据设计要求,选择STC89C51RC单片机为核心器件。2. 温度检测采用DS18B20数字式温度传感器。与单片机的接口为P3.6引脚。3. 采用usb数据线连接充电宝供电,接电后由按钮开关控制电路供电。硬件电路设计总体框图为图1:五系统的硬件构成与功能1. 主控制器单片机STC89C51RC具有低电压供电和体积小等特点,有40个引脚,其仿真图像如如下图所示:2. 显示电路显示电路采用4位共阳LED数码管,从P3口RXD,TXD串口输出段码。LED数码管在仿真软件中如如下图所示:3. 温度传感器DS18B20是美国DALLAS半导体公司最新推出的一种改良型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20的性能特点如下:1. 独特的单线接口仅需一个端口引脚进展通讯。2. 简单的多点分布应用。3. 无需外部器件。4. 可通过数据线供电。5. 零待机功耗。6. 测温X围-55+125摄氏度。其电路图如如下图所示:在仿真软件中如如下图所示:DS18B20的测温原理图如如下图所示:在正常测温情况下,DS18B20的测温分辨力为0.5摄氏度,可采用下述方法获得高分辨率的温度测量结果。:首先用DS18B20提供的读暂存器指令BEH读出以0.5摄氏度为分辨率的温度测量结果,然后切去测量结果中的最低有效位LSB,得到所测实际温度的整数局部Tz,然后再利用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS18B20测量温度的整数局部以0.25、0.75摄氏度为进位界限的关系,实际温度Ts可以用下式计算:Ts=(Tz-0.25)+(CD-Cs)/CD六系统整体硬件电路根据设计要求与设计思路,硬件电路设计框图如如下图所示,在仿真软件Proteus上完成,其中LED数码管以动态扫描法实现温度显示,由四个PNP型晶体管Q2,Q3,Q4,Q5和8个电阻组成。基极与单片机的P1.0,P1.1,P1.2连接,DS18B20的数据I/O端与单片机P3.6引脚连接。外部晶振为12MHZ。七系统程序设计数字式温度计的应用程序主要包括主程序,温度检测程序,温度转换程序,LED显示程序等。其思路如如下图所示:八测量与其结果分析1. Proteus仿真结果软件方面,在Proteus编译下进展,源程序编译与仿真调试。在软件中选定传感器后可对其进展环境温度设置,如如下图,将环境温度设为34.9.2. 硬件测试结果在硬件测试方面,检查电路板与焊接的质量情况,在焊接无误后通电检查LED显示器。其中成品图如下列图:通电后,室温下LED的示数如下列图九设计心得体会本次实验对我们组来说是一次难得的经历,首先是第一次接触了仿真软件Proteus,在使用时经历了很屡次失败,因为这款软件与以前使用过的软件有很大不同,使用时不停出错,接线时由于原件放置不合理而接的杂乱无章,输入源程序时还算顺利,显示结果比拟满意。其次是程序设计,我们在参考别人成功先例的根底上根据自己设计的需要进展编程,其中经历了不少曲折,最后我的收获是编程一定要细心,针对每一个细节,稍有疏忽程序就不能正常运行。在这次的实践与学习中,尽管期间困难重重,但我们还是从中学习了不少新的知识和技能,也体会到了经历失败最终成功的喜悦。总之,通过这次电工电子综合设计,我收获了很多,我希望自己在今后的各项研究工作中也坚持这种精神。十附录 源程序#include<reg52.h>#include <intrins.h>#define  uchar  unsigned  char #define  uint   unsigned  intsbit  DATA = P11; /DS18B20接入口uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/共阴极字型码int temp;  /温度值int ss;         /中间的一个变量int dd;int j;uchar data b;/定时器中断次数uchar data buf4;/字型显示中间变量int alarmH=320;      /默认报警值int alarmL=100;/定义开关的接入口sbit  k1=P25;/+sbit  k2=P26;/-sbit  k3=P27;/确认sbit  k4=P24; /切换sbit  bell=P10; /蜂鸣器sbit  HLight=P12; /正温指示灯sbit  LLight=P13; /负温度指示灯sbit  warn=P14;  /报警指示灯sbit  Red=P16;      /温度上限设置指示灯sbit  Green=P17; /温度下限设置指示灯bit set=0;     /初始化bit Flag=0;     /设置标志int n;/函数的声明区void key_to1();void key_to2();void delay(uint); void key();void Show();/函数的定义区/*延时子函数*/void delay(uint num)        while(num-) ;/DS18b20温度传感器所需函数,分为初始化,读写字节,读取温度4个函数Init_DS18B20(void)           /传感器初始化        uchar x=0;     DATA = 1;   /DQ复位     delay(10);  /稍做延时     DATA = 0;   /单片机将DQ拉低     delay(80); /准确延时 大于 480us   /450     DATA = 1;   /拉高总线        delay(20);     x=DATA;    /稍做延时后 如果x=0如此初始化成功 x=1如此初始化失败        delay(30);ReadOneChar(void)  /读一个字节        uchar i=0;        uchar dat = 0;        for (i=8;i>0;i-)                   DATA = 0; / 给脉冲信号                  dat>>=1;           DATA = 1; / 给脉冲信号                  if(DATA)                   dat|=0x80;                  delay(8);                return(dat);WriteOneChar(unsigned char dat)     /写一个字节        uchar i=0;        for (i=8; i>0; i-)                          DATA = 0;                  DATA = dat&0x01;          delay(10);          DATA = 1;          dat>>=1;                delay(8);int ReadTemperature(void) /读取温度        uchar a=0;        uchar b=0;        int t=0;        float tt=0;        Init_DS18B20();     WriteOneChar(0xCC); / 跳过读序号列号的操作     WriteOneChar(0x44); / 启动温度转换        Init_DS18B20();     WriteOneChar(0xCC); /跳过读序号列号的操作     WriteOneChar(0xBE); /读取温度存放器等共可读9个存放器 前两个就是温度     a=ReadOneChar();/低位     b=ReadOneChar();/高位        t=b;        t<<=8;        t=t|a;        tt=t*0.0625;        t= tt*10+0.5;         return(t);void  display00()    /*显示负值子函数            dd=-(temp-1);    buf1=dd/100;        buf2=dd/100;        buf3=dd%100/10;        buf0=dd%10;     /动态显示        for(j=0;j<5;j+)         P2=0xff;                    / 初始灯为灭的    P0=0x00;     P2=0xfd; /显示小数点     P0=0x80; /显示小数点        delay(100);                   P2=0xff;  / 初始灯为灭的    P0=0x00;   P2=0xf7; /片选LCD1    P0=0x40;        delay(100);        P2=0xff;    P0=0x00;   P2=0xfb;  /片选LCD2    P0=tablebuf2;        delay(100);        P2=0xff;    P0=0x00;     P2=0Xfd;/片选LCD3        P0=tablebuf3;        delay(100);        P2=0xff;    P0=0x00;        P2=0Xfe;     P0=tablebuf0;          /片选LCD4            delay(100);        P2=0xff;       /显示正值子函数void  display()                     buf1=temp/1000;/显示百位     buf2=temp/100%10;/显示十位     buf3=temp%100/10;/显示个位     buf0=temp%10; /小数位        for(j=0;j<3;j+)              P2=0xff;                    / 初始灯为灭的    P0=0x00;     P2=0xfd; /显示小数点     P0=0x80; /显示小数点        delay(300);                   P2=0xff;                    / 初始灯为灭的    P0=0x00;   P2=0xf7;                      /片选LCD1    P0=tablebuf1;        delay(300);        P2=0xff;    P0=0x00;   P2=0xfb;                  /片选LCD2    P0=tablebuf2;        delay(300);        P2=0xff;    P0=0x00;     P2=0Xfd;          /片选LCD3        P0=tablebuf3;        delay(300);        P2=0xff;    P0=0x00;        P2=0Xfe;     P0=tablebuf0;          /片选LCD4            delay(300);        P2=0xff;        void key()     /按键扫描子程序   if(k1!=1)                   delay(20);           if(k1!=1)                           while(k1!=1)                   key_to1();                    for(n=0;n<8;n+)                    Show();                                          if(k2!=1)                        delay(20);                if(k2!=1)                                  while(k2!=1)                        key_to2();                           for(n=0;n<8;n+)                      Show();                                                                                         if(k3!=1)          TR0=1; /复位,开定时        temp=ReadTemperature();                if(k4!=1)          delay(20);           if(k4!=1)             while(k4!=1);              set=!set;                   if(set=0)                   Red=0;Green=1;                   else Green=0;Red=1;                         void key_to1()        TR0=0;          /关定时器        temp+=10;                if(temp>=1100)                   temp=-550;        if(set=0)                alarmH=temp;                else alarmL=temp;        void key_to2()            TR0=0;     /关定时器        temp-=10;                if(temp<=-550)                    temp=1100;        if(set=0)                alarmH=temp;                else alarmL=temp;void alarm(void)    if(temp>alarmH|temp<alarmL)            /bell=1;            /delay(50);                /bell=0;                Flag=1;     else Flag=0;logo()/开机的Logo     P0=0x40;    P2=0xf7;        delay(50);    P2=0xfb;        delay(50);        P2=0Xfd;        delay(50);        P2=0Xfe;        delay(50);   P1 = 0xff;      /关闭显示void Show()  /显示函数,分别表示温度正负值            if(temp>=0)                HLight=1;LLight=0;display();                if(temp<0)                HLight=0;LLight=1;display00();void  main()           TCON=0x01; /定时器T0工作在01模式下    TMOD=0X01;             TH0=0XD8;/装入初值        TL0=0XF0;     EA=1;  /开总中断     ET0=1; /开T0中断     TR0=1; /T0开始运行计数     EX0=1; /开外部中断0             for(n=0;n<500;n+)/显示启动LOGo"- - - -"        bell=1;warn=1;logo();         Red=0;        while(1)                    key();                 ss=ReadTemperature();        Show();         alarm();  /报警函数                if(Flag=1)                bell=!bell;          warn=!warn;  /蜂鸣器滴滴响                else bell=1;                      warn=1;                         void time0(void) interrupt 1 using 1  /每隔10ms执行一次此子程序        TH0=0X56;        TL0=0XDC;                temp=ss;

    注意事项

    本文(基于某51单片机地数字温度计设计.doc)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开