医工互联

 找回密码
 注册[Register]

手机动态码快速登录

手机号快速登录

微信登录

微信扫一扫,快速登录

QQ登录

只需一步,快速开始

查看: 272|回复: 0
收起左侧

基于51单片机的灭菌箱【温度,压力,上位机】(仿真)

[复制链接]

  离线 

发表于 2024-3-31 07:14:38 | 显示全部楼层 |阅读模式
灭菌室里面的温度由数字温度传感器测量,温度被数字温度传感器检测后的信号直接转换成为数字量,通过接口进入单片机;同理,压力值由电压式压力传感器测量,压力传感器采集到信号后会输出为电压量,电压模拟量经A/D转换后变成数字信号,通过端口进入单片机。温度和电压数字量经过控制芯片处理后一方面通过LED液晶显示屏显示,另一方面与设定进行比较,为后面软件部分的PID控制提供数据,压力设定为开环控制,若压力超出设定值将会报警:蜂鸣器启动,同时排气阀开启,放出多余蒸汽,使压力降低。温度控制是由调节蒸汽阀门的开度来实现,控制量经D/A转换为模拟量输出,功率放大后控制蒸汽阀的开口。工作人员可以通过按键盘来控制系统的温度的升降与电压的升降。
可实现功能:
①温度和压力信号的检测转换
②温度和压力的控制
③LED显示和报警功能
基于51单片机的灭菌箱【温度,压力,上位机】(仿真)9996 作者:忠信 帖子ID:41748 51单片机,灭菌箱,温度传感器,压力传感器,控制芯片
                               
登录/注册后可看大图

基于51单片机的灭菌箱【温度,压力,上位机】(仿真)1940 作者:忠信 帖子ID:41748 51单片机,灭菌箱,温度传感器,压力传感器,控制芯片
                               
登录/注册后可看大图
 
基于51单片机的灭菌箱【温度,压力,上位机】(仿真)4347 作者:忠信 帖子ID:41748 51单片机,灭菌箱,温度传感器,压力传感器,控制芯片
                               
登录/注册后可看大图
 
  1. #include"Ds18b20.h"
  2. float ds18b20_temp=0;
  3. /*******************************************************************************
  4. * 函 数 名         : Delay1ms
  5. * 函数功能                   : 延时函数
  6. * 输    入         : 无
  7. * 输    出         : 无
  8. *******************************************************************************/
  9. void Delay1ms(uint y)
  10. {
  11.         uint x;
  12.         for( ; y>0; y--)
  13.         {
  14.                 for(x=110; x>0; x--);
  15.         }
  16. }
  17. /*******************************************************************************
  18. * 函 数 名         : Ds18b20Init
  19. * 函数功能                   : 初始化
  20. * 输    入         : 无
  21. * 输    出         : 初始化成功返回1,失败返回0
  22. *******************************************************************************/
  23. uchar Ds18b20Init()
  24. {
  25.         uchar i;
  26.         DSPORT = 0;                         //将总线拉低480us~960us
  27.         i = 100;       
  28.         while(i--);//延时642us
  29.         DSPORT = 1;                        //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低
  30.         i = 0;
  31.         while(DSPORT)        //等待DS18B20拉低总线
  32.         {
  33.                 Delay1ms(1);
  34.                 i++;
  35.                 if(i>5)//等待>5MS
  36.                 {
  37.                         return 0;//初始化失败
  38.                 }
  39.        
  40.         }
  41.         return 1;//初始化成功
  42. }
  43. /*******************************************************************************
  44. * 函 数 名         : Ds18b20WriteByte
  45. * 函数功能                   : 向18B20写入一个字节
  46. * 输    入         : 无
  47. * 输    出         : 无
  48. *******************************************************************************/
  49. void Ds18b20WriteByte(uchar dat)
  50. {
  51.         uint i, j;
  52.         for(j=0; j<8; j++)
  53.         {
  54.                 DSPORT = 0;                       //每写入一位数据之前先把总线拉低1us
  55.                 i++;
  56.                 DSPORT = dat & 0x01;  //然后写入一个数据,从最低位开始
  57.                 i=6;
  58.                 while(i--); //延时68us,持续时间最少60us
  59.                 DSPORT = 1;        //然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值
  60.                 dat >>= 1;
  61.         }
  62. }
  63. /*******************************************************************************
  64. * 函 数 名         : Ds18b20ReadByte
  65. * 函数功能                   : 读取一个字节
  66. * 输    入         : 无
  67. * 输    出         : 无
  68. *******************************************************************************/
  69. uchar Ds18b20ReadByte()
  70. {
  71.         uchar byte, bi;
  72.         uint i, j;       
  73.         for(j=8; j>0; j--)
  74.         {
  75.                 DSPORT = 0;//先将总线拉低1us
  76.                 i++;
  77.                 DSPORT = 1;//然后释放总线
  78.                 i++;
  79.                 i++;//延时6us等待数据稳定
  80.                 bi = DSPORT;         //读取数据,从最低位开始读取
  81.                 /*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/
  82.                 byte = (byte >> 1) | (bi << 7);                                                  
  83.                 i = 4;                //读取完之后等待48us再接着读取下一个数
  84.                 while(i--);
  85.         }                               
  86.         return byte;
  87. }
  88. /*******************************************************************************
  89. * 函 数 名         : Ds18b20ChangTemp
  90. * 函数功能                   : 让18b20开始转换温度
  91. * 输    入         : 无
  92. * 输    出         : 无
  93. *******************************************************************************/
  94. void  Ds18b20ChangTemp()
  95. {
  96.         Ds18b20Init();
  97.         Delay1ms(1);
  98.         Ds18b20WriteByte(0xcc);                //跳过ROM操作命令                 
  99.         Ds18b20WriteByte(0x44);            //温度转换命令
  100.         //Delay1ms(100);        //等待转换成功,而如果你是一直刷着的话,就不用这个延时了
  101.    
  102. }
  103. /*******************************************************************************
  104. * 函 数 名         : Ds18b20ReadTempCom
  105. * 函数功能                   : 发送读取温度命令
  106. * 输    入         : 无
  107. * 输    出         : 无
  108. *******************************************************************************/
  109. void  Ds18b20ReadTempCom()
  110. {       
  111.         Ds18b20Init();
  112.         Delay1ms(1);
  113.         Ds18b20WriteByte(0xcc);         //跳过ROM操作命令
  114.         Ds18b20WriteByte(0xbe);         //发送读取温度命令
  115. }
  116. /*******************************************************************************
  117. * 函 数 名         : Ds18b20ReadTemp
  118. * 函数功能                   : 读取温度
  119. * 输    入         : 无
  120. * 输    出         : 无
  121. *******************************************************************************/
  122. void Ds18b20ReadTemp()
  123. {
  124.         uchar temp = 0;
  125.         uchar tmh, tml;
  126.         Ds18b20ChangTemp();                                 //先写入转换命令
  127.         Ds18b20ReadTempCom();                        //然后等待转换完后发送读取温度命令
  128.         tml = Ds18b20ReadByte();                //读取温度值共16位,先读低字节
  129.         tmh = Ds18b20ReadByte();                //再读高字节
  130.         temp = tmh;
  131.         temp <<= 4;
  132.         temp += (tml>>4);
  133.         if(temp>127)
  134.         {       
  135.                 temp--;
  136.                 temp=~temp;
  137.                 temp=temp & 0x7f;
  138.                 ds18b20_temp=temp;
  139.                 ds18b20_temp=-ds18b20_temp;
  140.         }
  141.         else
  142.                 ds18b20_temp=temp;
  143.         ds18b20_temp=ds18b20_temp+(tml & 0x0f)*9/15;
  144. }
复制代码
 资料借鉴于此纷传
回复

使用道具 举报

提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!
您需要登录后才可以回帖 登录 | 注册[Register] 手机动态码快速登录 微信登录

本版积分规则

发布主题 快速回复 收藏帖子 返回列表 客服中心 搜索
简体中文 繁體中文 English 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

QQ|RSS订阅|小黑屋|处罚记录|手机版|联系我们|Archiver|医工互联 |粤ICP备2021178090号 |网站地图

GMT+8, 2024-10-18 16:52 , Processed in 0.270508 second(s), 59 queries .

Powered by Discuz!

Copyright © 2001-2023, Discuz! Team.

快速回复 返回顶部 返回列表