基于stc89c52单片机带温度显示的时钟设计内容摘要:

个字节的内容是温度的低八位,第二个字节是温度的高八位。 第三个和第四个字节是 TH、 TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。 第六、七、八个字节用于内部计算。 第九个字节是冗余检验字节。 6 表 2 DS18B20暂存寄存器分布表 寄存器内容 字节地址 温度最低数字位 0 温度最高数字位 1 高温限值 2 低温限值 3 保留 4 保留 5 计数 剩余值 6 每度计数值 7 CRC 校验 8 TM R1 R0 1 1 1 1 1 低五位一直都是 1 ,TM 是测试模式位 ,用于设置 DS18B20 在工作模式还是在测试模式。 在 DS18B20 出厂时该位被设置为 0,用户不要去改动。 R1和 R0用来设置分辨率 ,如下表 3所示:( DS18B20 出厂时被设置为 12 位) 表 3 分辨率设置表 R1 R0 分辨率 温度最大转换时间 0 0 9位 0 1 10位 1 0 11位 375ms 1 1 12位 750ms 表 4 和表 5分别 是 ROM指令和 RAM 指令表。 根据 DS18B20 的通讯协议 ,主机控制 DS18B20 完成温度转换必须经过三个步骤:每一次读写之前都要对 DS18B20 进行复位 ,复位成功后发送一条 ROM 指令 ,最后发送 RAM 指令 ,这样才能对 DS18B20进行预定的操作。 复位要求主 CPU 将数据线下拉 500 微秒 ,然后释放 ,DS18B20 收到信号后等待 16~ 60微秒左右 ,后发出 60~ 240 微秒的存在低脉冲 ,主 CPU 收到此信号表示复位成功。 所有的读 ,写时序至少需要 60us,且每两个独立的时序之间至少需要 1us的恢复时间。 在写时序中 ,主机将在 拉低总线 15us之内释放总线 ,并向单总线器件写 1。 若主机拉低总线后能保持至少 60us 的低电平 ,则向单总线器件写 0,单总线器件仅在主机读时序时才向主机传输数据。 7 表 4 ROM指令 指令 约定代码 功能 读 ROM 33H 读 DS18B20ROM 中的编码(即读 64位地址) 符合 ROM 55H 发出此命令后,接着发出 64 位 ROM编码,访问单线总线上与该编码相对应的 DS18B20 使之作出响应,为下一步对该 DS18B20 的读写作准备。 搜索 ROM 0F0H 用于确定挂接在同一总线上 DS18B20 的个数和识别 64 位ROM 地址,为操作各器件做好准备。 跳过 ROM 0CCH 忽略 64 位 ROM 地址,直接向 DS18B20 发温度交换命令,适用于单片工作。 告警搜索命令 0ECH 执行后,只有温度超过设定值上限或下限的片子才做出响应。 表 5 RAM指令 指令 指令代码 功能 温度变换 44H 启动 DS18B20 进行温度变换,转换时间最长为 500 ms(典型为 200ms),结果存入内部 9字节 RAM 中。 读暂存器 0BEH 读内部 RAM 中 9 字节的内容。 写暂存器 4EH 发出向内部 RAM 的第 3, 4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 复制暂存器 48H 将内部 RAM 的第 3, 4字节内容复制到 E2ROM 中。 重调E2ROM 0B8H 将 E2ROM 中内容恢复到 RAM 中的第 4字节。 读供电方式 0B4H 读 DS18B20 的供电模式,寄生供电时 DS18B20 发送 ” 0” ,外接电源供电 DS18B20 发送“ 1“。 DS18B20 应用电路 DS18B20 应用电路具体电路图如图。 由于采用单总线器件, DS18B20 的硬件电路连接很简单, 1脚为接地端, 2脚 DQ为数据输入 /输出脚,它与 TTL 电平兼容,与单片机的 I/O 口线 相接,同时 要接 左右的上拉电阻 ; 3脚 VDD,可接电源,也可接地。 因为每只 DS18B20 都可以选择两种供电方式,即数据总线供电方式和外部总线供电方式。 采用数据总线供电方式时 VDD 接地,可以节省一根传输线,但完成温度测量的时间较长;采用外部供电方式则把 VDD接+ 5V,虽然多用一根导线,但测量速度较快。 8 图 DS1820应用电路 LED 显示模块 电路原理图如图 所示。 其中两 个 四位 二极管采用共阳极接法 ,使用时公 共端接 +5V,段码端输入低电平时的段发光二极管就导通发亮 ,而输入高电平的则不点亮。 采用动态扫描显示 ,所用数码管的 8 个笔划段 ah 同名端连在一起 ,而每一个显示器的公共极 COM 各自的受 I/O 线控制。 图 LED显示电路 单片机最小系统 STC89C52 是低功耗 ,高性能芯片。 由运算器和控制器组成的微处理器 ,具有512 个单元的片内 RAM,8K 的内部程序存储器 ,4*8 条并行 I/O 口线 ,3 个定时器 /计数器 ,具有 5个中断源 ,和一个全双工串行通道。 其中 XTAL1 和 XTAL2 为外接晶体引线端 ,当使用芯片内部 时钟时 ,此二引线端用于外接石英晶体和微调电容。 RST为复位信号 ,当输入的复位信号延续 2个机器周期以上高电平时即为有效 ,用以完成单片机的复位操作。 PSEN 为外部程序存储器读选通信号 ,只有在读外部ROM 时 ,PSEN 为低电平实现对外部 ROM 单元的读操作。 EA 是访问程序存储器控制信号 ,当 EA信号为高电平时 ,对 ROM的读操作是从内部程序存储器开始 ,并可延续9 至外部程序存储器。 ALE 是地址锁存控制信号 ,在系统扩展时 ,ALE 用于控制把 P0口输出的低 8 位地址送入锁存器锁存起来 ,以实现低位地址和数据的分时传送。 如图 所示。 图 单片机最小系统 3 系统测试分析 此系统的测试主要通过软件进行测试 时钟测试 把调试成功的时钟 C 语言程序写入单片机中 ,通过软件的方式使时钟芯片中的信息在 LED 数码管中显示时分秒 ,并通过 K2 切换到日历显示。 include include include define uchar unsigned char define uint unsigned int codeunsignedcharnuma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}。 unsigned char CurDateTime[7] = { 0X00, // 秒 0X00, // 分 0X14, // 时 0X20, // 日 0X03, // 月 0X04, // 星期 0X08 // 年 }。 delay2(long nn) { while(nn)。 } 10 void disp(uchar wei,uchar shu) { switch(wei) { case 1:P0=0xFE。 P1=numa[shu]。 break。 case 2:P0=0xFD。 P1=numa[shu]。 break。 case 3:P0=0xFB。 P1=0XBF。 break。 case 4:P0=0xf7。 P1=numa[shu]。 break。 case 5:P2=0xef。 P1=numa[shu]。 break。 case 6:P2=0xf7。 P1=0XBF。 break。 case 7:P2=0xFB。 P1=numa[shu]。 break。 case 8:P2=0xfD。 P1=numa[shu]。 break。 default:P1=0xff。 break。 } } void disp_all(void) { P1=0xff。 P2=0xff。 disp(1,CurDateTime[2]/16)。 delay2。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。