该项目有四项要求:

(1)检测温度

(2)检测温度超出限定温度,启动报警装置

(3)报警装置启动时,跑马灯进行工作,闪烁起来

(4)利用串口,实时传输温度数据

下面是源代码,运行是完全没有问题的,若读者有更佳的方式,希望可以交流一下.

delay.c

[html]  view plain  copy  
  1. /*
  2. *参数 :t(0 - 255)
  3. *延时时间 :约2 * t + 12
  4. */
  5. void delay_us(unsigned char t)
  6. {
  7. while(--t);
  8. }
  9. void delay_ms(unsigned char t)
  10. {
  11. while(t--)
  12. {
  13. delay_us(245);
  14. delay_us(245);
  15. }
  16. }
  17. // void delay_s(unsigned char t)
  18. // {
  19. //     while(t--)
  20. //     {
  21. //     delay_ms(200);
  22. //     delay_ms(200);
  23. //         delay_ms(200);
  24. //         delay_ms(200);
  25. //         delay_ms(200);
  26. //     }
  27. // }

delay.h

[html]  view plain  copy  
  1. #ifndef _DELAY_H_
  2. #define _DELAY_H_
  3. extern void delay_us(unsigned char t);
  4. extern void delay_ms(unsigned char t);
  5. // extern void delay_s(unsigned char t);
  6. #endif

lcd.c

[html]  view plain  copy  
  1. #include "./lcd/lcd.h"
  2. #define LCDPORT P0
  3. #define LCD_WRITE_DATA 1
  4. #define LCD_WRITE_COM 0
  5. sbit RS = P2^4;
  6. sbit RW = P2^5;
  7. sbit E  = P2^6;
  8. void lcd_init()
  9. {
  10. delay_ms(15);
  11. lcd1602_write(0x38,LCD_WRITE_COM); //设置8位数据接口,两行显示,5x7点阵字符
  12. delay_ms(5);
  13. lcd1602_write(0x38,LCD_WRITE_COM); //设置8位数据接口,两行显示,5x7点阵字符
  14. delay_ms(5);
  15. lcd1602_write(0x38,LCD_WRITE_COM); //设置8位数据接口,两行显示,5x7点阵字符
  16. delay_ms(5);
  17. lcd1602_write(0x38,LCD_WRITE_COM); //设置8位数据接口,两行显示,5x7点阵字符
  18. delay_ms(5);
  19. lcd1602_write(0x08,LCD_WRITE_COM); //关闭显示,关闭光标和闪烁
  20. delay_ms(5);
  21. lcd1602_write(0x01,LCD_WRITE_COM); //清屏
  22. delay_ms(5);
  23. lcd1602_write(0x06,LCD_WRITE_COM); //设置指针方式,画面不平移
  24. delay_ms(5);
  25. lcd1602_write(0x0c,LCD_WRITE_COM);  //设置指针方式,画面不平移
  26. delay_ms(5);
  27. }
  28. void lcd1602_write(unsigned char byte,unsigned char flag)
  29. {
  30. if(flag)
  31. {
  32. RS = 1;
  33. }
  34. else
  35. {
  36. RS = 0;    //选择输入数据为数据
  37. }
  38. RW = 0;    //写
  39. E = 1;     //选中LCD
  40. LCDPORT = byte;
  41. delay_us(5);
  42. E = 0;     //失能LCD
  43. }
  44. void lcd_dis_char(unsigned char x, unsigned char y, unsigned char byte)
  45. {
  46. if((x > 15) || (y > 1))
  47. {
  48. return ;
  49. }
  50. if(0 == y)
  51. {
  52. lcd1602_write(0x80 + x,LCD_WRITE_COM);
  53. }
  54. else
  55. {
  56. lcd1602_write(0x80 + 0x40 + x,LCD_WRITE_COM);
  57. }
  58. lcd1602_write(byte,LCD_WRITE_DATA);
  59. }
  60. /*显示字符串*/
  61. void lcd1602_dis_str(unsigned char x, unsigned char y, unsigned char *str)
  62. {
  63. if((x > 15) || (y > 1))
  64. {
  65. return ;
  66. }
  67. if(0 == y)
  68. {
  69. lcd1602_write(0x80 + x,LCD_WRITE_COM);
  70. }
  71. else
  72. {
  73. lcd1602_write(0x80 + 0x40 + x,LCD_WRITE_COM);
  74. }
  75. while(*str != '\0')
  76. {
  77. lcd1602_write(*str,LCD_WRITE_DATA);
  78. str++;
  79. }
  80. }
  81. void lcd_dis_self()
  82. {
  83. lcd1602_write(0x40,LCD_WRITE_COM);
  84. lcd1602_write(0x07,LCD_WRITE_DATA);
  85. lcd1602_write(0x05,LCD_WRITE_DATA);
  86. lcd1602_write(0x07,LCD_WRITE_DATA);
[html]  view plain  copy  
  1. lcd1602_write(0x0,LCD_WRITE_DATA);
  2. lcd1602_write(0x0,LCD_WRITE_DATA);
  3. lcd1602_write(0x0,LCD_WRITE_DATA);
  4. lcd1602_write(0x0,LCD_WRITE_DATA);
  5. lcd1602_write(0x0,LCD_WRITE_DATA);
  6. lcd1602_write(0x80 + 0x40 + 13,LCD_WRITE_COM);
  7. lcd1602_write(0x0,LCD_WRITE_DATA);

lcd.h

[html]  view plain  copy  
  1. <span style="font-size:18px;"><strong>#ifndef __LCD1602_H__
  2. #define __LCD1602_H__
  3. #include "./delay/delay.h"
  4. #include <reg52.h>
  5. extern void lcd_init();
  6. extern void lcd1602_write(unsigned char byte,unsigned char flag);
  7. extern void lcd_dis_char(unsigned char x, unsigned char y, unsigned char byte);
  8. extern void lcd1602_dis_str(unsigned char x, unsigned char y, unsigned char *str);
  9. extern void lcd_dis_self();
  10. #endif</strong></span>

uart.c

[html]  view plain  copy  
  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include "./delay/delay.h"
  4. void uart_init()
  5. {
  6. SCON = 0x50;
  7. TMOD |= 0x20;
  8. TH1 = 0xfd;
  9. TR1 = 1;
  10. }

uart.h

[html]  view plain  copy  
  1. #ifndef _UART_H_
  2. #define _UART_H_
  3. extern void uart_init();
  4. // extern void uart_send_byte(unsigned char byte);
  5. // extern void uart_send_str(unsigned char *s);
  6. #endif

主函数:ds18b20.c

[html]  view plain  copy  
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. #include "./lcd/lcd.h"
  5. #include "./delay/delay.h"
  6. #include "./uart/uart.h"
  7. #define LEDPORT P1
  8. sbit ds = P2^3;
  9. sbit beep = P2^7;
  10. bit ack = 0;
  11. void ds_reset()
  12. {
  13. ds = 1;       //总线拉高
  14. ds = 0;
  15. delay_us(200);
  16. delay_us(200);
  17. ds = 1;           //释放总线
  18. delay_us(30);
  19. if(0 == ds)       //检测是否被拉低
  20. {
  21. ack = 1;
  22. }
  23. else
  24. {
  25. ack = 0;
  26. }
  27. delay_us(200);
  28. delay_us(100);
  29. }
  30. void ds_send_byte(unsigned char byte)
  31. {
  32. unsigned char i;
  33. for(i = 0; i < 8; i++)
  34. {
  35. ds = 0;
  36. _nop_();
  37. _nop_();   //1us
  38. ds = byte & 0x01;     //最低位开始赋值
  39. byte >>= 1;
  40. delay_us(30);
  41. ds = 1;
  42. }
  43. delay_us(30);
  44. }
  45. bit ds_read_bit()
  46. {
  47. bit tmp;
  48. ds = 1;
  49. ds = 0;
  50. _nop_();
  51. _nop_();
  52. ds = 1;
  53. tmp = ds;
  54. delay_us(30);
  55. return tmp;
  56. }
  57. unsigned char ds_read_byte()
  58. {
  59. unsigned char i,j,k;
  60. for(i = 0; i < 8; i++)
  61. {
  62. j = ds_read_bit();
  63. k = (j << 7) | (k >> 1);
  64. }
  65. return k;
  66. }
  67. void main()
  68. {
  69. unsigned char a;
  70. unsigned int b;
  71. unsigned char i;
  72. unsigned int temp;
  73. unsigned char num = 0x7f;
  74. unsigned char disbuf[20];
  75. float wendu;
  76. lcd_init();
  77. uart_init();
  78. while(1)
  79. {
  80. ds_reset();
  81. ds_send_byte(0xcc);
  82. ds_send_byte(0x44);
  83. ds_reset();
  84. ds_send_byte(0xcc);
  85. ds_send_byte(0xbe);
  86. a = ds_read_byte();
  87. b = ds_read_byte();
  88. temp = (b << 8) | a;
  89. wendu = (float)temp * 0.0625;
  90. sprintf(disbuf,"%6.2f",wendu);
  91. lcd1602_dis_str(4,0,"WELCOME!");
  92. lcd1602_dis_str(1,1,"wendu:");
  93. lcd1602_dis_str(7,1,disbuf);
  94. lcd_dis_self();
  95. lcd_dis_char(14,1,'C');
  96. if(wendu > 30)
  97. {
  98. LEDPORT = _crol_(num,1);
  99. num = LEDPORT;
  100. delay_us(50);
  101. for(i = 0; i < 100; i++)
  102. {
  103. beep = ~beep;
  104. delay_us(100);
  105. }
  106. }
  107. TI = 1;    //发送中断标志位
  108. printf("temperature is : %f\n",wendu);
  109. }
  110. }

温度传感器检测温度报警装置相关推荐

  1. 毕设一:老年人摔倒检测及报警装置

    我的毕设:老年人摔倒检测及报警装置 小白上路 任务要求 基本思路 基本实施方案 论文摘要 硬件原理图 APP界面 小白上路 哈哈哈,毕业了3个月的我已然逐渐融入公司的生活,现在想总结一下我大学里的毕业 ...

  2. 毕设四:老年人摔倒检测及报警装置

    毕设四:老年人摔倒检测及报警装置 最近工作比较忙,刚转正,没有记录完自己的毕设,今天空闲,想再说说,并把论文以及一些工具上传.记得我前面说过,我这个毕设的GPS模块还是挺坑人的,在室内定位都没有信号, ...

  3. 毕设二:老年人摔倒检测及报警装置

    毕设二:老年人摔倒检测及报警装置 在上一篇文章中说了大致的思路,在这里补充一些在调试过程中遇到的问题,由于当时水平有限,对于STM32理解的还不是很透彻,代码都是东拼西凑的移植,规范性不是很好,后面会 ...

  4. 【001】基于51单片机的DS18B20温度检测与报警装置的proteus仿真设计

    一.设计资料内容(私信获取) 1. 包含proteus仿真一份: 2. keil源代码一份: 3. 包含基于51单片机的DS18B20温度监测与报警的proteus仿真设计课程报告一份: 4. 包含基 ...

  5. 基于arduino的一套农业智能检测与报警装置

    [本文为笔者第一篇blog,对于排版与代码部分细节处理不到位,请海涵] 项目介绍 笔者利用"arduino创客主板"制作了一套可以实时监测农业大棚室内温度.湿度.光照强度.火焰相关 ...

  6. 毕设三:老年人摔倒检测及报警装置

    接着说 周末到了,咱再接着说说哈哈哈哈- 上一集咱们说到在腾讯云服务器上运行workerman-master文件下的port-6610文件.下一步就测试看看咱们的通讯是否正常,也就是说我们向腾讯云服务 ...

  7. 毕设五:老年人摔倒检测及报警装置

    好久没写了,最近有同学私信我说,APP的制作过程,有一说一我忘得也差不多了,翻翻以前的代码,还有一个副本,下面大概回忆一下制作过程,给同学们一个大概的流程. Android Studio 我使用的是这 ...

  8. 【单片机】温度感应报警装置的设计与制作(说明书)

    前   言 这是本人在大学期间的<单片机控制技术实训>课程中,所作的结课作业项目,该项目是制作一个温度感应形式的装置,而这种类似的装置,在生活中很常见,很多公共场合也有相关的装置,并且也有 ...

  9. ADC0809检测报警c语言,51单片机ADC0809+AD590温度检测、报警程序

    #include "reg52.h"//头文件 #include "intrins.h" #define uchar unsigned char//宏定义 #d ...

最新文章

  1. php运行cpu利用率低,PHP-如何减低php程序的cpu使用率?
  2. ECS应用管理最佳实践
  3. mysql 左连接 例子_mysql左连接自连接例子
  4. java焦点图_javascript焦点图(能够自己主动切换 )
  5. Parameter 对象
  6. GetLastError函数使用及返回代码对照
  7. SOA架构设计经验分享—架构、职责、数据一致性
  8. 数字图像处理实验5图像复原
  9. jQuery-input输入框下拉提示层
  10. 都说如果朋友都是有钱人,你也会更容易发财
  11. textarea的maxlength属性兼容解决方案
  12. 文献格式 ShareLaTeX and Overleaf
  13. 数据结构二叉树算法c语言实现,数据结构与算法 :AVL平衡二叉树C语言实现
  14. 清明节偷偷训练“熊猫烧香”,结果我的电脑为熊猫“献身了”!
  15. css实现多余图片隐藏
  16. 【国庆特辑】43份元宇宙报告
  17. 认识计算机教案流程图,流程图教案信息技术.doc
  18. Mixed Precision Training混合精度训练笔记及框架代码
  19. GreenHills基本操作:通过 R寄存器和上下文变量 定位异常
  20. 简易Android专注模式的实现

热门文章

  1. 分布模型的均值与方差
  2. python write函数参数_Python函数-函数参数、返回值
  3. 程序算法编程学习网站
  4. 周立功: 我的25年嵌入式生涯——非常诚恳之谈
  5. MCU_AT24C02存储芯片
  6. 熟练掌握R语言的Meta分析全流程和不确定性分析,并结合机器学习等方法讲解Meta分析在文献大数据的延伸应用
  7. Ubuntu16.04下Opencv3.4.5的卸载与带cuda安装
  8. 教你如何解决网络所面临的安全问题?
  9. 一篇搞懂python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)
  10. 生成一维码条码码,扫码查询相关条码信息