做电影网站放抢先版,wordpress社交类主题,上海企业建设网站服务,高邮企业网站建设公司哪家便宜目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象 一、主要功能
基于51单片机 采用滑动变阻器连接ADC0832数模转换器模拟角度传感器#xff0c;水位传感器#xff1b; 采样DS18B20温度传感器检测温度
通过LCD1602显示#xff0c;第一行显示温度、水位、角度…
目录
一、主要功能
二、硬件资源
三、程序编程
四、实现现象 一、主要功能
基于51单片机 采用滑动变阻器连接ADC0832数模转换器模拟角度传感器水位传感器 采样DS18B20温度传感器检测温度
通过LCD1602显示第一行显示温度、水位、角度、指定温度 两个按键负责L298N驱动电机的正反转 按键按下不动电机正转松开停止第二个按键按下电机反转松开停止
辅助热源按键按下后对应的LED灯亮起此时两个按键负责辅热温度的增减一次调整10度 温度超过阈值蜂鸣器启动
手动上水按键可以启动进水阀继电器和通气阀继电器
自动上水通过水位判断水位低于阈值后辅热对应的LED灯关掉进水阀和通气阀打开 水位高于阈值后打开排水阀和通气阀
然后如果加热到达阈值和水位到达阈值蜂鸣器报警2秒。
二、硬件资源
基于KEIL5编写C代码PROTEUS8.15进行仿真全部资源在页尾提供安装包。 三、程序编程
#include public.h
#include intrins.h //定义头文件
#include stdio.h //定义头文件
#include lcd1602.h
#include ds18b20.h
#include stdio.h
#include i2c.h
#define uchar unsigned char //定义变量
#define uint unsigned int //定义变量char buff[15];
char buff1[3];unsigned char readTem 0 ;//定义读时间标志
unsigned char readADCFlag 0 ; //读取标志
unsigned long time_20ms0; //定时器计数sbit IN1 P1^0; //进水阀
sbit IN2 P1^1;//排水阀
sbit KEY1P1^2;
sbit KEY2P1^3;
sbit KEY3P1^4;
sbit KEY4P2^2;
sbit IN3P1^5; //通气阀
sbit IN4P1^6; //LED灯
sbit beepP1^7;
sbit key5P3^3;
sbit key6P3^4;
sbit out1P3^5;
sbit out2P3^6;sbit CSP3^0; //adc0832引脚
sbit CLKP3^1; //adc0832引脚
sbit DIOP3^2; //adc0832引脚void Init_Timer0(void); //函数声明
float Lv0.0; //光照采集电压
float Lval 0; //光照值
static int sdflag0;
float u;uchar get_AD_Res() //ADC0832启动读取函数
{uchar i, data10, data20; //赋值变量CS0; //CS赋值低电平CLK0;DIO1;_nop_(); //赋值变量 并且等待CLK1;_nop_(); //赋值变量 并且等待CLK0;DIO1;_nop_(); //赋值变量 并且等待CLK1;_nop_(); //赋值变量 并且等待CLK0;DIO0;_nop_(); //赋值变量 并且等待CLK1;_nop_(); //赋值变量 并且等待CLK0;DIO1;_nop_(); //赋值变量 并且等待for(i0; i8; i) //循环{CLK1;_nop_(); //赋值变量 并且等待CLK0;_nop_(); //赋值变量 并且等待data1(data11)|(uchar)DIO;//赋值变量 并且等待 }for(i0; i8; i) //循环{data2data2|(uchar)DIOi;//赋值变量 并且等待CLK1;_nop_(); //赋值变量 并且等待CLK0;_nop_(); //赋值变量 并且等待}CS1; //赋值高电平return(data1 data2)?data1:0; //返回值
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{ u8 i0;int temp_yz60;float temp_value;char temp_buf[16];int flag0;int one0;unsigned char midval; ds18b20_init();//初始化DS18B20Init_Timer0();lcd1602_init();out1 0;out2 0;while(1){uget_AD_Res(); //读取ADC0832值if(u80){u80;}else if(u10){u10;}temp_valueds18b20_read_temperture();//保留温度值小数后一位if(KEY20){delay_ms(20);{if(KEY20){temp_yztemp_yz10;while(KEY20);}}}if(KEY30){delay_ms(20);{if(KEY30){temp_yztemp_yz-10;while(KEY30);}}}if(KEY1){IN41; //控制LED灯}if(KEY40){sdflag;if(sdflag1){sdflag 0;}while(KEY40);}if(key5){out1 0;}else{out1 1;}if(key6){out2 0;} else{out2 1;}if(temp_value0)//负温度{temp_value-temp_value;}else if(temp_value0temp_value100){sprintf(temp_buf,Temp:%2.1f C %d,temp_value,temp_yz);lcd1602_show_string(0,0,temp_buf);if(KEY10){if(temp_valuetemp_yzLval10){flag0;IN40;}else if(Lval10||temp_valuetemp_yz){IN41;}if(temp_valuetemp_yz Lval80){if(flag0){beep0;IN41;delay_ms(2000);beep1;flag1;}}}}if(readADCFlag 1) //定时读取adc{midvalReadADC(3); //转换的结果在下次才能读出Lv(float)midval/255.0*5.0; Lval Lv*20;delay_ms(10); //延时有助于稳定sprintf(buff,SW:%3.2fCM %f,Lval,u);//打印电压电流值lcd1602_show_string(0,1,buff);//显示if(Lval10) //液位小于10{one0; IN1IN30; //打开进水阀和通气阀}else if(Lval80){one 1;}if(one1){if(sdflag 0){IN11;IN20;IN30;}if(sdflag 1){IN10;IN20;IN30;}}else if(one 0){if(KEY41)IN21;}readADCFlag 0 ;}delay_ms(1); }
}void Init_Timer0(void)
{TMOD | 0x01; //使用模式116位定时器使用|符号可以在使用多个定时器时不受影响 TH0(65536-20000)/256; //重新赋值 20msTL0(65536-20000)%256;EA1; //总中断打开ET01; //定时器中断打开TR01; //定时器开关打开
}void Timer0_isr(void) interrupt 1
{TH0(65536-20000)/256; //重新赋值 20msTL0(65536-20000)%256;time_20ms;if(time_20ms % 20 0) //定时读取adc采集{readADCFlag 1;}if(time_20ms % 40 0) //定时读取温度{readTem 1; //读取温度 标志}
}
四、实现现象
具体动态效果看B站演示视频 基于单片机的角度、水位、温度、辅助热源、电机仿真 全部资料源程序、仿真文件、安装包、演示视频
百度网盘下载资料https://pan.baidu.com/s/1CHGuhkCkXYeMc5NHkZt8jg?pwdan2x