基于51单片机的智能鱼缸温度控制器protues仿真
硬件设计
(末尾附文件)
代码设计
#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仿真相关推荐
- 基于51单片机的智能鱼缸设计。 有原理图,程序,原文,可代做实物。 才用STC12C5A60S2,最新款国产51单片机
基于51单片机的智能鱼缸设计. 有原理图,程序,原文,可代做实物. 才用STC12C5A60S2,最新款国产51单片机. 本系统设计的主要是基于单片机为核心,设计一款集温度检测.恒温控制.步进电机控制 ...
- 基于51单片机的智能鱼缸设计
基于51单片机的智能鱼缸设计. 有原理图,程序,原文,可代做实物. 才用STC12C5A60S2,最新款国产51单片机. 本系统设计的主要是基于单片机为核心,设计一款集温度检测.恒温控制.步进电机控制 ...
- 基于51单片机PT100热电偶AD转换protues仿真设计
基于51单片机PT100热电偶AD转换protues仿真设计 (源码+仿真) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0023 这里写 ...
- 基于51单片机的脉搏测量仪protues仿真设计
目录 一.设计背景 二.实现功能 三.仿真演示 四.源程序 一.设计背景 在中医四诊(望﹑闻﹑问﹑切)中,脉诊占有非常重要的位置.脉诊是我国传统医学中最具特色的一项诊断方法,其历史悠久,内容丰富,是中 ...
- 基于51单片机的智能加湿器控制proteus仿真系统设计
本设计 51单片机智能加湿器控制系统proteus仿真(仿真+源码+原理图) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号C0043 资料下载链接( ...
- 124、基于51单片机的智能电表功率电量仿真系统设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 一.硬件 二.功能 三.电脑开发环境 四.Protues仿真 五.程序 六.原理图 七.资料包括 一.硬件 51单片机控制模块.A/D转换模块.显示 ...
- 基于51单片机的两路数字电压表Protues仿真设计
目录 一.设计背景 1.1.数字电压表的发展历程 1.2.课题的意义和目的 二.实现功能 三.仿真演示 四.部分程序展示 一.设计背景 1.1.数字电压表的发展历程 数字电压表简称DVM,它是采用数 ...
- 基于51单片机的智能路灯控制系统proteus仿真原理图PCB
功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前时间/环境光强/工作模式 2.支持路灯故障检测 3.工作时间内(17~24时),两个路灯同时点亮,24时以后,B路灯 ...
- 基于51单片机的智能水龙头控制系统proteus仿真原理图PCB
功能介绍: 0.本系统采用STC89C52作为单片机 1.液晶实时显示当前的设定温度/实际温度/水龙头状态和水流量 2.按键可开关水龙头,当温度低于设定温度时,启动加热控制继电器,给水加热, 当加热到 ...
最新文章
- ZedGraph的曲线的LineItem对象的Tag属性存储信息进而在鼠标悬浮时进行显示
- Git 中的对象模型和文件的详细视图 —— Git 学习笔记 13
- 点击button时候传递一个参数实现局部刷星_Tkinter的一个小小的规则,如果不了解,可能不会解决掉这个问题...
- 在八十年代末,比尔·盖茨和史蒂夫·巴尔默
- halcon/c++接口基础 之 构造函数与Halcon算子
- centos 安装trace_前期的准备工作-MacOS Mojave 10.14.3 下安装CentOS 7及Bochs 002
- python web 并发 性能_Python Web Server的性能测试
- Ubuntu学习日记--Lesson1:Linux基础和常用命令
- OpenStack互操作性认证 为何有UnitedStack?
- FFmpeg实现多段小视频合成
- Android ASCII编码转换成相对应字符
- 利用InVEST模型的生境质量模块计算生境质量
- 计算机基础第四章excel,计算机基础第4次作业 第四章 Excel知识题
- 信息收集(一)之whois查询
- 沉淀+树脂吸附工艺为铅酸电池废水处理提供新思路
- AKM的AK09918调试驱动过
- 技术专栏 | 为什么要基于模型设计?
- webshell提权宝典
- Bert算法模型ppt分享
- 看到一篇好的文章计算机专业的学习心得