pt100+51单片机的温控系统程序+仿真图 还带压力显示的

使用pt100测温度,经过放大器放大后的电压值乘以236就是实际的温度值0.42V对应100度,0V对应0度,经过ad运算显示出来,其他滤掉,就只显示0-100度,0-100对应输出0-5v的电压使用DA,功能,ad和da使用同个芯片,就是实现0-100显示,温度变化的同时da输出0-5v。
第二个就是压力传感器输出芯片ad输入0-5v,对应压力6-8pad,显示出来。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

单片机源程序如下:

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define NOP() _nop_()
  6. #define Delay5us() {_nop_();_nop_();_nop_();_nop_();_nop_();}
  7. #define LCD_LINE_ONE 1
  8. #define LCD_LINE_TWO 2
  9. sbit LCD_RS = P2^0 ;
  10. sbit LCD_RW = P2^1 ;
  11. sbit LCD_EN = P2^2 ;
  12. sbit SCL = P1^1;
  13. sbit SDA = P1^2;
  14. sbit BEEP = P1^0;
  15. uchar temp = 40;
  16. uchar pres = 40;
  17. uint Voltage[]={'0','0','0'};                                                //AD的LCD显示值
  18. unsigned char LCD_Line_1[] = {"TEMP:             "};//TEMP-是温度值
  19. unsigned char LCD_Line_2[] = {"PRES:             "};//PRES-是压力值
  20. extern void Convert_To_Voltage(uint val);                        //函数声明
  21. uchar IIC_ERROR;                                                                        //IIC错误标志
  22. void Delay(uint ms)                                //延时函数
  23. {
  24. uchar i;
  25. while(ms--)
  26. {
  27. for(i=0;i<120;i++);
  28. }
  29. }
  30. bit LCD_Busy_Check()                        //检测忙信号
  31. {
  32. bit Result;
  33. LCD_RS = 0;
  34. LCD_RW = 1;
  35. LCD_EN = 1;
  36. Delay5us();
  37. Result = (bit)(P0&0x80);
  38. LCD_EN = 0;
  39. return Result;
  40. }
  41. void LCD_Write_Command(uchar cmd)//LCD写命令
  42. {
  43. while(LCD_Busy_Check());
  44. LCD_RS = 0;
  45. LCD_RW = 0;
  46. LCD_EN = 0;
  47. _nop_();
  48. _nop_();
  49. P0 = cmd;
  50. Delay5us();
  51. LCD_EN = 1;
  52. Delay5us();
  53. LCD_EN = 0;
  54. }
  55. void LCD_Write_Data(uchar dat)//LCD写数据
  56. {
  57. while(LCD_Busy_Check());
  58. LCD_RS = 1;
  59. LCD_RW = 0;
  60. LCD_EN = 0;
  61. P0 = dat;
  62. Delay5us();
  63. LCD_EN = 1;
  64. Delay5us();
  65. LCD_EN = 0;
  66. }
  67. void LCD_Set_Position(uchar pos)                                //LCD显示位置设置
  68. {
  69. if(pos == LCD_LINE_ONE)
  70. LCD_Write_Command(0x80);
  71. else
  72. LCD_Write_Command(0xc0);
  73. }
  74. void LCD_Display_A_Line(uchar Line_Addr,uchar s[])//LCD显示行
  75. {
  76. uchar i;
  77. LCD_Set_Position(Line_Addr);
  78. for(i=0;i<16;i++)
  79. {
  80. LCD_Write_Data(s[i]);
  81. }
  82. }
  83. void LCD_Dispay(void)                                                        //LCD实时显示
  84. {
  85. Convert_To_Voltage(temp*5);
  86. LCD_Line_1[6]= Voltage[2];
  87. LCD_Line_1[7]= Voltage[1];
  88. LCD_Line_1[8]= '.';
  89. LCD_Line_1[9]= Voltage[0];
  90. LCD_Line_1[11]= 'C';
  91. LCD_Line_1[12]= 'e';
  92. LCD_Line_1[13]= 'n';
  93. LCD_Line_1[14]= 't';
  94. LCD_Display_A_Line(LCD_LINE_ONE,LCD_Line_1);//温度显示
  95. Convert_To_Voltage(pres);
  96. LCD_Line_2[6]= Voltage[2]+6;
  97. LCD_Line_2[7]= '.';
  98. LCD_Line_2[8]= Voltage[1];
  99. LCD_Line_2[9]= Voltage[0];
  100. LCD_Line_2[11]= 'p';
  101. LCD_Line_2[12]= 'a';
  102. LCD_Display_A_Line(LCD_LINE_TWO,LCD_Line_2);//压力显示
  103. }
  104. void LCD_Initialise()                                                        //LCD初始化
  105. {
  106. LCD_Write_Command(0x38);Delay(5);
  107. LCD_Write_Command(0x0c);Delay(5);
  108. LCD_Write_Command(0x06);Delay(5);
  109. LCD_Write_Command(0x01);Delay(5);
  110. LCD_Display_A_Line(1,LCD_Line_1);
  111. LCD_Display_A_Line(2,LCD_Line_2);
  112. }
  113. /********************************PCF8591部分************************************/
  114. void Convert_To_Voltage(uint val)//电压换算成温度或压力
  115. {
  116. uint Tmp;
  117. Tmp = val;
  118. Voltage[2] = Tmp/100+'0';
  119. Tmp = Tmp%100*10;
  120. Voltage[1] = Tmp/100+'0';
  121. Tmp = Tmp%100*10;
  122. Voltage[0] = Tmp/100+'0';
  123. }
  124. /*****************IIC初始化*****************/
  125. void delay()
  126. {;;}
  127. void start()//停止
  128. {
  129. SDA=1;
  130. delay();
  131. SCL=1;
  132. delay();
  133. SDA=0;
  134. delay();
  135. }
  136. void stop()      //启动
  137. {
  138. SDA=0;
  139. delay();
  140. SCL=1;
  141. delay();
  142. SDA=1;
  143. delay();
  144. }
  145. void respons()//应答信号
  146. {
  147. uchar i;
  148. SCL=1;
  149. delay();
  150. while((SDA==1)&&(i<250))
  151. i++;
  152. SCL=0;
  153. delay();
  154. }
  155. void init()      //初始化PCF8591接口
  156. {
  157. SDA=1;
  158. delay();
  159. SCL=1;
  160. delay();
  161. }
  162. uchar read_byte()//对PCF8591读一个字节数据
  163. {
  164. uchar i,k;
  165. SCL=0;
  166. delay();
  167. SDA=1;
  168. delay();
  169. for(i=0;i<8;i++)
  170. {
  171. SCL=1;
  172. delay();
  173. k=(k<<1)|SDA;
  174. SCL=0;
  175. delay();
  176. }
  177. return k;
  178. }
  179. void write_byte(uchar date)  //对PCF8591写一个字节数据
  180. {
  181. uchar i,temp1;
  182. temp1=date;
  183. for(i=0;i<8;i++)
  184. {
  185. temp1=temp1<<1;
  186. SCL=0;
  187. delay();
  188. SDA=CY;
  189. delay();
  190. SCL=1;
  191. delay();
  192. }
  193. SCL=0;
  194. delay();
  195. SDA=1;
  196. delay();
  197. }
  198. void write_add(uchar control,uchar date)//输出电压
  199. {
  200. start();
  201. write_byte(0x90);
  202. respons();
  203. write_byte(control);
  204. respons();
  205. write_byte(date);
  206. respons();
  207. stop();
  208. }
  209. uchar read_add(uchar control)//读取AD转换值
  210. {
  211. uchar date;
  212. start();
  213. write_byte(0x90);
  214. respons();
  215. write_byte(control);
  216. respons();
  217. start();
  218. write_byte(0x90+1);
  219. respons();
  220. date=read_byte();
  221. stop();
  222. return date;
  223. }
  224. void main()
  225. ……………………

复制代码

附件资料下载:

U创论坛下载-温控系统.rar

点击下方链接跳转过去下载
文件到原文下载,原文出自:https://bbs.usoftchina.com/thread-202540-1-1.html

pt100+51单片机的温控系统程序+仿真图 还带压力显示的相关推荐

  1. 基于51单片机的温控系统

    基于51单片机的温控系统 本文是基于STC89C52单片机的温度控制系统,主要由主控模块.显示模块及外围电路几个部分组成. 通过DS18B20检测外部温度,通过LCD1602显示,按键可调节上下限.当 ...

  2. 【020】基于51单片机智能路灯系统Proteus仿真与实物设计

    一.资料内容 (1).基于51单片机的智能路灯系统proteus仿真设计一份: (2).基于51单片机的智能路灯系统proteus仿真设计keli源代码一份: (3).基于51单片机的智能路灯系统pr ...

  3. 基于51单片机智能加湿器(程序+仿真+全套资料)

    采用51单片机作为主控CPU;可以采集当前的温湿度,并且LCD1602显示,可以通过按键设置温湿度的上下阈值,当超过此设置阈值,蜂鸣器进行报警提醒,并且继电器启动对应的功能,比如低于温度设置的最低值, ...

  4. 基于51单片机的时钟系统

     这一次带来的项目是课程设计级别的基于51单片机的时钟系统,本次的项目共有两种,一种是基础功能时钟,上电后自动从00-00-00开始计时,另一种加上了调时功能,上电后自动从00-00-00开始,当需要 ...

  5. S0011基于51单片机DS18B20温控风扇仿真设计

    基于51单片机DS18B20温控风扇仿真设计 (仿真+原理图+源码+设计报告) 原理图:Altium Designer 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程 ...

  6. 51单片机七人多数表决器仿真设计( proteus仿真+程序+报告+讲解视频)

    51单片机七人多数表决器仿真设计( proteus仿真+程序+报告+讲解视频) 仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0033 51 ...

  7. 基于51单片机的智能门禁控制系统(仿真+源码+全套资料)

    资料编号:119  功能讲解: 采用51单片机作为CPU控制,继电器驱动门锁的打开与关闭,采用按键模拟指纹开锁,以及内部开锁相关信号,当指纹正确门锁可以正常打开,指示灯亮绿灯,如果指纹错误,门锁无法打 ...

  8. 基于51单片机篮球计分系统

    目录 一.项目功能概述 二.仿真 三.程序 四.论文 五.资料清单 资料下载地址:基于51单片机篮球计分系统 一.项目功能概述 液晶显示比赛时间.甲队和乙队的得分: 甲  甲队和乙队的得分分别有加1分 ...

  9. 【课设分享】基于51单片机的恒温控制器系统

    文章目录 恒温控制器系统概述 仿真软件 系统设计 电路设计 软件代码编写 代码下载 恒温控制器系统概述 该恒温控制器系统包含以下几个功能: 可按键设定温度 可显示当前温度和用户设定温度 有升温.降温模 ...

最新文章

  1. zookeeper 网关_多图,5000 字分享,API 网关如何实现配置动态更新?
  2. UIMenuController的使用,对UILabel拷贝以及定制菜单
  3. 哈佛博士教你如何摆脱「尬聊」
  4. ASM 磁盘、目录的管理
  5. php操作mysql数据库的扩展有哪些_8.PHP操作MySQL数据库(Mysqli扩展)
  6. mkswap,swapon, swapoff命令:创建交换分区
  7. 利用Kinect将投影变得可直接用手操控
  8. python代码规范方面的书_你写的Python代码规范吗?
  9. iOS UIDatePicker设置为中文的方法
  10. static_cast与dynamic_cast转换
  11. 设计模式(8)装饰模式
  12. 推荐系统学习(一)--电影推荐系统搭建
  13. 【Quant】80+面试,5个offer,Quant大神总结分享各家quant面试题
  14. 并行计算、分布式计算、网格计算讲解
  15. React 360 全景VR交互项目实战
  16. linux 网络慢 dns,Linux DNS客户端解析域名慢解决
  17. 09.利用U盘PE系统破解Windows7、XP密码
  18. Linux使用grep查找文件内容
  19. 大一计算机基础excel文档,大一计算机应用基础办公自动化软件深入Excel复习用PPT课件.ppt...
  20. linux系统下的的nohup命令

热门文章

  1. dosbox 自动运行_如何使用DOSBox在新计算机上运行90年代的老旧游戏
  2. android 开发英语单词统计
  3. 高效能技术领导者,不仅是首席技术官,更是首席情绪官
  4. 计算机图形剪裁程序说明,计算机图形学实验报告实验2裁剪算法实验
  5. xampp 403 禁止访问 问题解决
  6. Allegro PCB Design GXL (legacy) - 导出 PCB 中元件的坐标文件
  7. LDA + SVM 文本分类
  8. 小米笔记本桌面没有计算机,没有4K屏幕,只有3.5K,小米笔记本真好用吗?
  9. 价值1K的微信二维码活码源码
  10. Nand Flash 通过调整阈值的Retry方法简单描述