//水量检测程序
//2019.5.20
#include <reg52.h>
//显示函数
#include <display.h>
//宏定义
#define uint unsigned int
#define uchar unsigned char
#define Data_ADC0809 P1
//管脚声明
sbit LED_water= P2^1;
sbit baojing= P2^5;
sbit DQ = P2^0;
sbit fs=P3^4;
//ADC0809
sbit ST=P3^3;
sbit EOC=P3^6;
sbit OE=P3^2;
//按键
sbit Key1=P2^6;
sbit Key2=P2^7;
sbit Key3=P3^7;
signed char w; //温度值全局变量
uint c; //温度值全局变量
bit bdata flag=0;
//水量变量
uchar temp;
uchar yushe_wendu=50;
uchar yushe_water=100;
//按钮模式|
uchar Mode=0;
//函数声明
extern uchar ADC0809();
extern void Key();
void delay(uint z)
{
uint i,j;
for(i=0;i<z;i++)
for(j=0;j<121;j++);
}
/*****延时子程序*****/
void Delay_DS18B20(int num)
{
while(num--) ;
}
/*****读一个字节*****/
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;
}
}
//ADC0809读取信息
uchar ADC0809()
{
uchar temp_=0x00;
//初始化高阻太
OE=0;
//转化初始化
ST=0;
//开始转换
ST=1;
ST=0;
//外部中断等待AD转换结束
while(EOC==0)
//读取转换的AD值
OE=1;
temp_=Data_ADC0809;
OE=0;
return temp_;
}
void Key()
{
//模式选择
if(Key1==0)
{
while(Key1==0);
if(Mode>=2) Mode=0;
else
{
write_com(0x38);//屏幕初始化
write_com(0x0d);//打开显示 无光标 光标闪烁
write_com(0x06);//当读或写一个字符是指针后一一位
Mode++;
switch(Mode)
{
case 1:
{
write_com(0x80+12);//位置
break;
}
case 2:
{
write_com(0x38);//屏幕初始化
write_com(0x0c);//打开显示 无光标 无光标闪烁
Mode=0;
break;
}
}
}
}
if(Key2==0&&Mode!=0)
{
while(Key2==0);
switch(Mode)
{
case 1:
{
yushe_water++;
if(yushe_water>=255)
yushe_water=255;
write_com(0x80+13);
write_data(0x30+yushe_water/100);
write_data(0x30+yushe_water%100/10);
write_data(0x30+yushe_water%10);
break;
}
}
}
if(Key3==0&&Mode!=0)
{
while(Key3==0);
switch(Mode)
{
case 1:
{
yushe_water--;
if(yushe_water<=0)
yushe_water=0;
write_com(0x80+13);
write_data(0x30+yushe_water/100);
write_data(0x30+yushe_water%100/10);
write_data(0x30+yushe_water%10);
break;
}
}
}
delay(200);
write_com(0x38);//屏幕初始化
write_com(0x0c);//打开显示 无光标 无光标闪烁
}
void main()
{
Init1602(); //1602屏幕初始化函数
fs=0; //水阀开启
while(1)
{
temp=ADC0809(); //读取水量
Key(); //按键扫描
if(Mode==0) //判断是否为检测模式
{
Display_1602(yushe_wendu,yushe_water,c,temp); //屏幕显示
if(temp>=yushe_water) //判断是否超出阈值
{
LED_water=0; //指示灯亮,蜂鸣器报警
baojing=0;
fs=1; //水阀关闭
}
else
{
LED_water=1;
}
if(temp<yushe_water) //指示灯熄灭,不报警
{
baojing=1;
fs=0;
}
}
}
}
基于51单片机水量检测(c代码+proteus仿真)
4星 · 超过85%的资源 需积分: 39 98 浏览量
2020-05-12
17:50:54
上传
评论 22
收藏 125KB RAR 举报
努力改掉拖延症的小白
- 粉丝: 3536
- 资源: 24
最新资源
- Semantic Color Palette 语义调色板Unity游戏开发插件资源unitypackage
- Low Poly Nature:Lush and Diverse Environments低聚自然郁郁Unity低多边形模型资源
- voc数据集是什么-我们如何使用voc数据集
- Edgar Pro-Procedural Level Generator程序关卡生成器Unity开发插件unitypackage
- 宝藏软件m3u8下载器\m3u8DL-CLI
- 三次样条插值的介绍-什么是三次样条插值原理
- http的一些相关介绍-对于我们来说什么是http
- 全卷积网络基于voc2012数据集简单pytorch实现
- pycharm的一些介绍-用于更好的学习python
- 基于C++的程序设计大赛天梯赛L2答案(天梯赛)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈