欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    单片机温度检测系统.docx

    • 资源ID:17039179       资源大小:564.99KB        全文页数:18页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    单片机温度检测系统.docx

    1、单片机温度检测系统单片机温度检测记录系统一.设计要求1. LCD显示实时时钟2. 每30秒采样温度,LCD更新显示温度值3. 按键触发存储当前温度和时钟信息4. 按键触发串口传输存储温度和时钟信息5. 温度测量精度1度二设计方案1) 系统框图硬件总体框图2) 器件选择单片机采用80C51Lcd采用LM1602外部时钟采用DS1302数字温度传感器采用DS18B203) 电路图三器件功能:(1)时钟显示模块DS13021)Vcc1:后备电源,VCC2:主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc

    2、2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。2)X1、X2:振荡源,外接32.768kHz晶振。3)RST:复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。4)I/

    3、O为串行数据输入输出端(双向)。5)SCLK为时钟输入端。(2)LM016L显示模块引脚说明:引脚符号功能说明1VSS一般接地2VDD接电源(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6EE(或EN)端为使能(enable)端,下降沿使能。7DB0底4位三态、 双向数据总线 0位(最低位)8DB1底4位三态、 双向数据总线 1位

    4、9DB2底4位三态、 双向数据总线 2位10DB3底4位三态、 双向数据总线 3位11DB4高4位三态、 双向数据总线 4位12DB5高4位三态、 双向数据总线 5位13DB6高4位三态、 双向数据总线 6位14DB7高4位三态、 双向数据总线 7位(最高位)(也是busy flang)寄存器选择控制表 RSR/W操作说明00写入指令寄存器(清除屏等)01都busy flag(DB7),以及读取位址计数器(DB0DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据(3)数字温度传感器DS18B20引脚定义: (1)DQ 为数字信号输入/输出端; (2)GND 为电源地; (3)

    5、VDD 为外接供电电源输入端(在寄生电源接线方式时接地)。 图 2: DS18B20 内部结构图DS18B20 工作原理 DS18B20 的读写时序和测温原理与 DS1820 相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由 2s 减为 750ms。 DS18B20 测温原理如图 3 所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器 1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器 2 的脉冲输入。计数器 1 和温度寄存器被预置在55所对应的一个基数值。计数器 1 对低温度系数晶振产生的脉冲信号进行减法计数,当计

    6、数器 1 的预置值减到 0 时,温度寄存器的值将加 1,计数器 1 的预置将重新被装入,计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器 2 计数到 0 时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图 3 中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器 1 的预置值。DS18B20 有 4 个主要的数据部件: (1)光刻 ROM 中的 64 位序列号是出厂前被光刻好的,它可以看作是该 DS18B20 的地址序列码。64位光刻 ROM 的排列是:开始 8 位(28H)是产品类型标号,接着的 48 位是该 DS18B20 自身

    7、的序列号,最后 8 位是前面 56 位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻 ROM 的作用是使每一个 DS18B20都各不相同,这样就可以实现一根总线上挂接多个 DS18B20 的目的。 (2)DS18B20 中的温度传感器可完成对温度的测量,以 12 位转化为例:用 16 位符号扩展的二进制补码读数形式提供,以 0.0625/LSB 形式表达,其中 S 为符号位。表1: DS18B20 温度值格式这是 12 位转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0,这 5 位为 0,只要将测到的

    8、数值乘于 0.0625 即可得到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取反加 1 再乘于 0.0625 即可得实际温度。 例如+125的数字输出为 07D0H,+25.0625的数字输出为 0191H,-25.0625的数字输出为 FF6FH,-55的数字输出为 FC90H。(3)DS18B20 温度传感器的存储器 DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦除的 EEPRAM,后者存放高温度和低温度触发器 TH、TL 和结构寄存器。 (4)配置寄存器 该字节各位的意义如下: 表3: 配置寄存器结构 TM R1 R0 1 1 1

    9、1 1 低五位一直都是1,TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式。在 DS18B20出厂时该位被设置为 0,用户不要去改动。R1 和 R0 用来设置分辨率,如下表所示:(DS18B20 出厂时被设置为 12 位)温度分辨率设置表 R1 R0 分辨率 温度最大转换时间 0 0 9 位 93.75ms 0 1 10 位187.5ms 1 0 11位375ms1 1 12 位750ms DS1302实时时钟送LM016L显示程序(结果不能显示,找不到原因)#include#include#define uchar unsigned char#define uint u

    10、nsigned intsbit rs=P20; /LM016L指令/数据寄存器(0/1)sbit e=P21; /LM016L使能控制端sbit sclk=P36; /DS1302串行时钟,输入,控制数据的输入输出sbit io=P37; /DS1302数据端sbit rst=P35; /DS1302复位端uint temp; /定义整形温度数据float f_temp;uchar code num=0123456789;uchar code nian=20 - - ;uchar code shi= : : ;uchar read_add=0x8d,0x8b,0x89,0x87,0x85,0x

    11、83,0x81;/DS1302读数据地址端uchar write_add=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80; /DS1302写数据地址端uchar time_data=11,1,12,5,18,00,00; /设置初始时间uchar code table=0x3e,0x7f,0x08,0x18,0x7e,0x5a,0xff,0x00; uchar disp14; /定义数组/*/void delayms(uint z) uint i,j; for(i=z;i0;i-) for(j=120;j0;j-);void delayus(uint time) whil

    12、e(time-);/*/void write_com(uchar com) rs=0; /选择指令寄存器 P0=com; /把命令写入P0 delayms(5); /延时,让1602准备接受数据 e=1; delayms(5); e=0;void write_data(uchar date) rs=1;/选择数据寄存器 P0=date; /把要显示的数据送入P0口 delayms(5); /延时,使1602做好准备 e=1; /数据送入显示屏显示 delayms(5); e=0;/*/void init() uchar num; write_com(0x38); write_com(0x06)

    13、; write_com(0x0c); write_com(0x01); write_com(0x80+0x40);/第二行地址 for(num=0;num8;num+) write_data(shinum); delayms(1); write_com(0x80); /第一行地址 for(num=0;num10;num+) write_data(niannum); delayms(1); /*/void write_ds1302_byte(uchar dat) uchar i; for (i=0;i1; /dat右移一位 /0-1制造上升沿,写数据 void write_ds1302(ucha

    14、r add,uchar dat) rst=0; _nop_(); sclk=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); write_ds1302_byte(dat); rst=0; _nop_(); sclk=1;uchar read_ds1302(uchar add) uchar i,value; rst=0; _nop_(); sclk=0; _nop_(); rst=1; _nop_(); write_ds1302_byte(add); for(i=0;i1; sclk=0; if(io) value=value|0x80; s

    15、clk=1; _nop_(); rst=0; _nop_(); sclk=0; _nop_(); sclk=1; _nop_(); io=0; return value;void read_rtc(void) uint i; for(i=0;i7;i+) time_datai=read_ds1302(read_addi); void z() write_com(0x80+0x40+9); switch(disp2) case 1: write_data(M); delayms(5); write_data(o); delayms(5); write_data(n); break; case 2

    16、: write_data(T); delayms(5); write_data(u); delayms(5); write_data(e); break; case 3: write_data(W); delayms(5); write_data(e); delayms(5); write_data(n); break; case 4: write_data(T); delayms(5); write_data(h); delayms(5); write_data(u); break; case 5: write_data(F); delayms(5); write_data(r); dela

    17、yms(5); write_data(i); break; case 6: write_data(S); delayms(5); write_data(a); delayms(5); write_data(t); break; case 7: write_data(S); delayms(5); write_data(u); delayms(5); write_data(n); break; /*/void time_change(void) disp0=time_data0%16; /年 disp1=time_data0/16; disp2=time_data1%16; /周 disp3=t

    18、ime_data1/16; disp4=time_data2%16;/月 disp5=time_data2/16; disp6=time_data3%16; /日 disp7=time_data3/16; disp8=time_data4%16; /时 disp9=time_data4/16; disp10=time_data5%16; /分 disp11=time_data5/16; disp12=time_data6%16; /秒 disp13=time_data6/16;void display() write_com(0x82); /年 write_data(0x30+disp1);

    19、write_com(0x83); write_data(0x30+disp0); z(); /周write_com(0x85); /月 write_data(0x30+disp5); write_com(0x86); write_data(0x30+disp4); write_com(0x88); /日 write_data(0x30+disp7); write_com(0x89); write_data(0x30+disp6); write_com(0xc0); /时 write_data(0x30+disp9); write_data(0xc1); write_data(0x30+disp

    20、8); write_com(0xc3); /分 write_data(0x30+disp11); write_com(0xc4); write_data(0x30+disp10); write_com(0xc6); /秒 write_data(0x30+disp13); write_com(0xc7); write_data(0x30+disp12);/*/ /主程序/void main(void) init(); Delay_2Us(200); temp=Ds18b20_Read_Temperature(); Delay_50Us(1000); /空读一次,读出默认的85 while(1)

    21、gotoxy(20,1); change(); LCD_display(tmp); Delay_50Us(100); write_com(0x80+14); write_data(m); delayms(100); write_com(0x80+14); write_data( ); write_com(0x80+14); write_data(x); delayms(100); write_com(0x80+14); write_data( ); write_com(0x80+14); write_data(l); delayms(100); write_com(0x80+14); write_data( ); read_rtc(); display();


    注意事项

    本文(单片机温度检测系统.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开