硬件设计

(末尾附文件)

代码设计

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char     //宏定义
#define LCD1602 P0
sbit SET=P3^1;             //定义调整键
sbit DEC=P3^2;             //定义减少键
sbit ADD=P3^3;             //定义增加键
sbit BUZZ=P3^6;                //定义蜂鸣器
sbit ALAM=P1^2;                //定义灯光报警
sbit ALAM1=P1^4;
sbit DQ=P3^7;              //定义DS18B20总线I/O
sbit RS = P2^7;
sbit EN = P2^6;
bit shanshuo_st;                //闪烁间隔标志
bit beep_st;                    //蜂鸣器间隔标志
uchar x=0;                     //计数器uchar code tab1[]={"Now Tem:   .  C "};
uchar code tab2[]={"TH:   C  TL:   C"};
uint c;
uchar Mode=0;              //状态标志
signed char TH=40;         //上限报警温度,默认值为40
signed char TL=10;         //下限报警温度,默认值为10
//============================================================================================
//====================================DS18B20=================================================
//============================================================================================
/*****延时子程序*****/
void Delay_DS18B20(int num)
{while(num--) ;
}
void delay(uint xms)//延时函数,有参函数
{uint x,y;for(x=xms;x>0;x--)for(y=110;y>0;y--);
}
/*****初始化DS18B20*****/
void Init_DS18B20(void)
{unsigned char x=0;DQ = 1;         //DQ复位Delay_DS18B20(8);    //稍做延时DQ = 0;         //单片机将DQ拉低Delay_DS18B20(80);   //精确延时,大于480usDQ = 1;         //拉高总线Delay_DS18B20(14);x = DQ;           //稍做延时后,如果x=0则初始化成功,x=1则初始化失败Delay_DS18B20(20);
}
/*****读一个字节*****/
unsigned char ReadOneChar(void)
{unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i--){DQ = 0;     // 给脉冲信号dat>>=1;DQ = 1;     // 给脉冲信号if(DQ)dat|=0x80;Delay_DS18B20(4);}return(dat);
}
/*****写一个字节*****/
void WriteOneChar(unsigned char dat)
{unsigned char i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;Delay_DS18B20(5);DQ = 1;dat>>=1;}
}
/*****读取温度*****/
unsigned int ReadTemperature(void)
{unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC);  //跳过读序号列号的操作WriteOneChar(0x44);  //启动温度转换Init_DS18B20();WriteOneChar(0xCC);  //跳过读序号列号的操作WriteOneChar(0xBE);  //读取温度寄存器a=ReadOneChar();     //读低8位b=ReadOneChar();    //读高8位t=b;t<<=8;t=t|a;tt=t*0.0625;// t= tt*10+0.5;     //放大10倍输出并四舍五入t= tt*10+0.5; return(t);
}/*****读取温度*****/
void check_wendu(void)
{c=ReadTemperature()-5;            //获取温度值并减去DS18B20的温漂误差if(c>1200)c=1200;
}/********液晶写入指令函数与写入数据函数,以后可调用**************/void write_1602com(uchar com)//****液晶写入指令函数****
{RS=0;//数据/指令选择置为指令
//  rw=0; //读写选择置为写LCD1602=com;//送入数据delay(1);EN=1;//拉高使能端,为制造有效的下降沿做准备delay(1);EN=0;//en由高变低,产生下降沿,液晶执行命令
}void write_1602dat(uchar dat)//***液晶写入数据函数****
{RS=1;//数据/指令选择置为数据
//  rw=0; //读写选择置为写LCD1602=dat;//送入数据delay(1);EN=1; //en置高电平,为制造下降沿做准备delay(1);EN=0; //en由高变低,产生下降沿,液晶执行命令
}void lcd_init()//***液晶初始化函数****
{uchar a;write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据write_1602com(0x0c);//开显示不显示光标write_1602com(0x06);//整屏不移动,光标自动右移write_1602com(0x01);//清显示write_1602com(0x80);//日历显示固定符号从第一行第1个位置之后开始显示for(a=0;a<16;a++){write_1602dat(tab1[a]);//向液晶屏写日历显示的固定符号部分delay(3);}write_1602com(0x80+0x40);//时间显示固定符号写入位置,从第2个位置后开始显示for(a=0;a<16;a++){write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号delay(3);}}void display()
{if(Mode==0){write_1602com(0x80+8);write_1602dat(c/1000+0x30);write_1602dat((c%1000)/100+0x30);write_1602dat(((c%1000)%100)/10+0x30);write_1602com(0x80+12);write_1602dat(((c%1000)%100)%10+0x30);write_1602com(0x80+13);write_1602dat(0xdf);write_1602com(0x80+0x40+3);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602dat(0xdf);write_1602com(0x80+0x40+12);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602dat(0xdf);           }
}
//=====================================================================================/*****初始化定时器0*****/
void InitTimer(void)
{TMOD=0x1;TH0=0x3c;TL0=0xb0;     //50ms(晶振12M)EA=1;      //全局中断开关TR0=1;ET0=1;      //开启定时器0
}void KEY()
{//功能键if(SET==0){BUZZ=0;delay(10);if(SET==0){Mode++;if(Mode==3)Mode=0;BUZZ=1;}while(SET==0){if(Mode==0){//   write_1602com(0x80+0x40+6);write_1602com(0x0c);}  else if(Mode==1){write_1602com(0x80+0x40+4);write_1602com(0x0f);}   else{write_1602com(0x80+0x40+13);write_1602com(0x0f);}                            }}//增加if(ADD==0&&Mode==1){BUZZ=0;delay(10);if(ADD==0)    {TH++;if(TH>=99)  TH=99;write_1602com(0x80+0x40+3);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x80+0x40+4); BUZZ=1;}while(ADD==0);}//减少if(DEC==0&&Mode==1){BUZZ=0;delay(10);if(DEC==0){TH--;if(TH==TL)  TH=TL+1;write_1602com(0x80+0x40+3);write_1602dat(TH/10+0x30);write_1602dat(TH%10+0x30);write_1602com(0x80+0x40+4);  BUZZ=1;}while(DEC==0);}if(ADD==0&&Mode==2){BUZZ=0;delay(10);if(ADD==0)    {TL++;if(TL==TH)    TL=TH-1;write_1602com(0x80+0x40+12);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x80+0x40+13); BUZZ=1;}while(ADD==0);}//减少if(DEC==0&&Mode==2){BUZZ=0;delay(10);if(DEC==0){TL--;if(TL<=0) TL=0;write_1602com(0x80+0x40+12);write_1602dat(TL/10+0x30);write_1602dat(TL%10+0x30);write_1602com(0x80+0x40+13);    BUZZ=1;}while(DEC==0);       }
}

链接:https://pan.baidu.com/s/1JacnmfgVZpl1V-MLRH64Yg
提取码:6gan

基于51单片机的智能鱼缸温度控制器protues仿真相关推荐

  1. 基于51单片机的智能鱼缸设计。 有原理图,程序,原文,可代做实物。 才用STC12C5A60S2,最新款国产51单片机

    基于51单片机的智能鱼缸设计. 有原理图,程序,原文,可代做实物. 才用STC12C5A60S2,最新款国产51单片机. 本系统设计的主要是基于单片机为核心,设计一款集温度检测.恒温控制.步进电机控制 ...

  2. 基于51单片机的智能鱼缸设计

    基于51单片机的智能鱼缸设计. 有原理图,程序,原文,可代做实物. 才用STC12C5A60S2,最新款国产51单片机. 本系统设计的主要是基于单片机为核心,设计一款集温度检测.恒温控制.步进电机控制 ...

  3. 基于51单片机PT100热电偶AD转换protues仿真设计

    基于51单片机PT100热电偶AD转换protues仿真设计 (源码+仿真) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0023 这里写 ...

  4. 基于51单片机的脉搏测量仪protues仿真设计

    目录 一.设计背景 二.实现功能 三.仿真演示 四.源程序 一.设计背景 在中医四诊(望﹑闻﹑问﹑切)中,脉诊占有非常重要的位置.脉诊是我国传统医学中最具特色的一项诊断方法,其历史悠久,内容丰富,是中 ...

  5. 基于51单片机的智能加湿器控制proteus仿真系统设计

    本设计 51单片机智能加湿器控制系统proteus仿真(仿真+源码+原理图) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号C0043 资料下载链接( ...

  6. 124、基于51单片机的智能电表功率电量仿真系统设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 一.硬件 二.功能 三.电脑开发环境 四.Protues仿真 五.程序 六.原理图 七.资料包括 一.硬件 51单片机控制模块.A/D转换模块.显示 ...

  7. 基于51单片机的两路数字电压表Protues仿真设计

    目录 一.设计背景 1.1.数字电压表的发展历程 1.2.课题的意义和目的 二.实现功能 三.仿真演示 四.部分程序展示 一.设计背景 1.1.数字电压表的发展历程  数字电压表简称DVM,它是采用数 ...

  8. 基于51单片机的智能路灯控制系统proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前时间/环境光强/工作模式 2.支持路灯故障检测 3.工作时间内(17~24时),两个路灯同时点亮,24时以后,B路灯 ...

  9. 基于51单片机的智能水龙头控制系统proteus仿真原理图PCB

    功能介绍: 0.本系统采用STC89C52作为单片机 1.液晶实时显示当前的设定温度/实际温度/水龙头状态和水流量 2.按键可开关水龙头,当温度低于设定温度时,启动加热控制继电器,给水加热, 当加热到 ...

最新文章

  1. ZedGraph的曲线的LineItem对象的Tag属性存储信息进而在鼠标悬浮时进行显示
  2. Git 中的对象模型和文件的详细视图 —— Git 学习笔记 13
  3. 点击button时候传递一个参数实现局部刷星_Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题...
  4. 在八十年代末,比尔·盖茨和史蒂夫·巴尔默
  5. halcon/c++接口基础 之 构造函数与Halcon算子
  6. centos 安装trace_前期的准备工作-MacOS Mojave 10.14.3 下安装CentOS 7及Bochs 002
  7. python web 并发 性能_Python Web Server的性能测试
  8. Ubuntu学习日记--Lesson1:Linux基础和常用命令
  9. OpenStack互操作性认证 为何有UnitedStack?
  10. FFmpeg实现多段小视频合成
  11. Android ASCII编码转换成相对应字符
  12. 利用InVEST模型的生境质量模块计算生境质量
  13. 计算机基础第四章excel,计算机基础第4次作业 第四章 Excel知识题
  14. 信息收集(一)之whois查询
  15. 沉淀+树脂吸附工艺为铅酸电池废水处理提供新思路
  16. AKM的AK09918调试驱动过
  17. 技术专栏 | 为什么要基于模型设计?
  18. webshell提权宝典
  19. Bert算法模型ppt分享
  20. 看到一篇好的文章计算机专业的学习心得

热门文章

  1. 复选框、选项按钮、列表方框、下拉式列表的使用与介绍
  2. Lucene 7.5.0 索引文件之fdxfdt
  3. 经典供货保密协议模板
  4. 垃圾回收及涉及的算法
  5. SCL语言中的文件操作如何进行?
  6. 苹果iOS内购三步曲:App内退款、历史订单查询、绑定用户防掉单!--- WWDC21
  7. Django==2.2学习笔记,ubantu
  8. 基于Frangi滤波的视网膜静脉血管检测算法matlab仿真
  9. 一个合格的初级程序员所应该具备的能力
  10. 教你如何用github创建自己的简历