标题: 单片机实验程序:LCD1602显示18b20温度且蜂鸣器报警 [打印本页]

作者: 凯旋小飞    时间: 2017-6-4 13:11
标题: 单片机实验程序:LCD1602显示18b20温度且蜂鸣器报警
单片机实验5:LCD1602显示ds18b20测出来的温度,超温蜂鸣器就发出声音报警.

单片机源程序如下:
  1. /**************************************************************************************
  2. *                                                      温度警报                                                                                                  *
  3. 实现现象:下载程序后插上LCD1602液晶在开发板上,上面显示温度限值,下边显示实时温度
  4.                   当温度达到限值时,蜂鸣器发声
  5. ***************************************************************************************/

  6. #include<reg52.h>
  7. #include "main.h"
  8. #include "lcd1.h"
  9. #include "delay.h"
  10. #include "ds18b20.h"
  11. #include "color.h"

  12. uchar CNCHAR[6] = "0";
  13. char i, buf[] = {0, 0, 0}; //定义数组

  14. /***********************************************
  15. 函数名:        mydisplay(uint x)
  16. 函数功能:        LCD显示温度
  17. **********************************************/
  18. void LcdDisplay(uint temp)         /*LCD显示温度*/
  19. {       
  20.         buf[0] = temp/100;
  21.         buf[1] = temp%100/10;
  22.         buf[2] = temp%100%10;

  23.         write_com(0x80+0x42);
  24.         write_date('0'+buf[0]);                        //十位
  25.         SBUF = '0'+buf[0];//将接收到的数据放入到发送寄存器
  26.         while (!TI);                                 //等待发送数据完成
  27. //        TI = 0;
  28.        
  29.         write_com(0x80+0x43);
  30.         write_date('0'+buf[1]);                        //个位
  31.         SBUF = '0'+buf[1];//将接收到的数据放入到发送寄存器
  32.         while (!TI);                                 //等待发送数据完成
  33. //        TI = 0;

  34.         write_com(0x80+0x45);
  35.         write_date('0'+buf[2]);                        //小数点后一位
  36.         SBUF = '0'+buf[2];//将接收到的数据放入到发送寄存器
  37.         while (!TI);                                 //等待发送数据完成
  38. //        TI = 0;
  39.        
  40.         for(i=0; i<6; i++)
  41.         {
  42.                  SBUF = CNCHAR[i];//将接收到的数据放入到发送寄存器
  43.                 while (!TI);                                 //等待发送数据完成
  44. //                TI = 0;
  45.         }
  46. }
  47. void guding()                                //固定显示
  48. {
  49.         //显示  T:
  50.         write_com(0x80+0x40);        //写地址 80表示初始地址
  51.         write_date('T');
  52.         write_com(0x80+0x41);        //写地址 80表示初始地址
  53.         write_date(':');
  54.         //显示 ‘.’
  55.         write_com(0x80+0x44);                //写地址 80表示初始地址
  56.         write_date('.');                 //显示 ‘.’
  57.         //显示摄氏度
  58.         write_com(0x80+0x46);                //写地址 80表示初始地址
  59.         write_date(0xdf);                 //显示 ‘.’
  60.         write_com(0x80+0x47);                //写地址 80表示初始地址
  61.         write_date('C');                 //显示 ‘.’


  62. //        write_charstr( 1,1," TEMPmax=30'C");          //第   行,第   列  
  63.        
  64. }
  65. void main(void)                                                                                                                          //0xdf
  66.     initlcd();                    //lcd初始化
  67.     guding();                  //固定显示
  68.     while(1)
  69.     {
  70.         read1();
  71.         warn(tempwarn);
  72.          LcdDisplay(get());
  73. ……………………

  74. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
实验5:LCD1602显示18b20温度.rar (42.29 KB, 下载次数: 138)



作者: 这个好不用了    时间: 2017-6-10 12:03
谢谢分享
作者: 林浩7856    时间: 2017-10-24 20:24
谢谢 资料很好
作者: 青春之逝    时间: 2018-1-4 22:27
谢谢分享
作者: 鬼狱007    时间: 2019-1-11 14:36
谢谢分享
作者: z974890869    时间: 2019-9-12 22:54
没看到显示温度限制
作者: ss179    时间: 2019-10-1 07:30
编译后主程序第79行报错,把79行去除后能显示温度T:25.4*c。没报警功能,程序不是很完整,能做个参考吧




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1