/* 预处理区 */
#include <reg52.h> /* 加载"reg52.h"头文件 */
#include <math.h> /* 加载"math.h"头文件 */
/* 宏定义 */
#define unchar unsigned char /* 无符号字符型 */
#define unint unsigned int /* 无符号整型 */
#define N 10 /* 延时参数 */
/* 数组常量定义 */
unchar code row1[] = ">>Liquid Level<<"; /* 液晶输出的第一行显示编码 */
unchar code row2[] = { "0123456789" }; /* 液晶的0~9编码 */
unchar code tip_1[] = "Please lini cap"; /* 液晶输出行 */
unchar code tip_2[] = "then push'start'"; /* 液晶输出行 */
/* 位定义 */
sbit lcd_rs = P2 ^ 0; /* 液晶的数据命令选择端 */
sbit lcd_rw = P2 ^ 1; /* 液晶的读写选择端 */
sbit lcd_en = P2 ^ 2; /* 液晶的使能端 */
sbit show = P1 ^ 0; /* 开始按键 */
sbit clear = P1 ^ 1; /* 清屏按键 */
sbit led = P1 ^ 2; /* 电源灯 */
sbit JIN = P2 ^ 3; /*进水泵*/
sbit CHU = P2 ^ 4; /*出水泵*/
sbit alerm = P2 ^ 7;
/* 变量定义 */
unint flag = 0; /* 标志位 */
double count = 0; /* 计数 */
double final = 0; /* 高电平时间 */
double cx = 0; /* 电容数值 */
unint w1, w2, w3, w4, i; /* 变量定义 百位,十位,个位,十分位,循环计数位。 */
/* 自定义函数声明 */
void init(); /* 初始化函数 */
void delay( unint ); /* 延时函数 */
void write_com( unchar ); /* 液晶写指令 */
void write_data( unchar ); /* 液晶写数据 */
void firstline(); /* 液晶第一行显示 */
void display(); /* 电容大小输出函数 */
void tip(); /* 初始显示函数 */
void chose(); /* 判断按键函数 */
/* 主函数 */
void main()
{
alerm = 0;
JIN = 0;
CHU = 0;
init(); /* 初始化 */
tip(); /* 初始显示 */
firstline(); /* 显示 ">>oil mass<<" */
display(); /* 初始输出"000.0" */
while ( 1 ) /* 死循环 */
chose(); /*按键判断 */
}
/* 自定义函数定义区 */
void init() /* 初始化函数定义 */
{
lcd_rw = 0; /* 液晶读写选择端置0,默认只写不读 */
write_com( 0x38 ); /* 液晶设置16*2显示,5*7点阵,8位数据接口 */
write_com( 0x0c ); /* 液晶设置开显示,不显示光标 */
write_com( 0x06 ); /* 液晶写一个字符后地址指针加一 */
write_com( 0x01 ); /* 液晶显示清0,数据指针清0 */
EX0 = 1; /* 开启外部中断0 */
IT0 = 1; /* 外部中断0采用边沿触发,下降沿有效 */
PX0 = 1; /* 外部中断0设高优先级 */
TMOD = 0x01; /* 定时器0工作方式1 */
TH0 = 0; /* 装初值0 */
TL0 = 0;
ET0 = 1; /* 开启定时器中断 */
TR0 = 0; /* 关闭定时器0 */
EA = 1; /* 开启总中断 */
led = 0; /* 开电源指示灯 */
}
void delay( unint a ) /* 延迟函数定义 */
{
unint b; /* 定义变量 */
for (; a > 0; a-- ) /* 外层循环,由用户定义 */
for ( b = 0; b < 10; b++ )
;
/* 内层循环,固定10次 */
}
void write_com( unchar data1 ) /* 液晶写命令函数 */
{
lcd_rs = 0; /*选择写命令模式 */
delay( N ); /*稍作延时 */
lcd_en = 1; /* 使能端置给高脉冲 */
P0 = data1; /* 将要写的命令字送到数据总线上 */
delay( N ); /*稍作延时以待数据稳定 */
lcd_en = 0; /* 将使能端置0以完成高脉冲 */
}
void write_data( unchar data2 ) /* 液晶数据函数 */
{
lcd_rs = 1; /*选择写数据模式 */
delay( N ); /*稍作延时 */
lcd_en = 1; /* 时能端给高脉冲 */
P0 = data2; /* 将要写的数据字送到数据总线上 */
delay( N ); /*稍作延时以待数据稳定 */
lcd_en = 0; /* 将使能端置0以完成高脉冲 */
}
void firstline() /* 液晶显示第一行 */
{
write_com( 0x80 ); /* 定位液晶第一行 */
for ( i = 0; i < 16; i++ ) /* 循环选择光标位 */
write_data( row1[i] ); /* 输出字符 */
}
void display() /* 电容大小输出函数 */
{
write_com( 0x80 + 0x40 ); /* 定位液晶第二行 */
write_data( ' ' ); /* 显示"空格" */
write_data( ' ' ); /* 显示"空格" */
write_data( ' ' ); /* 显示"空格" */
write_data( ' ' ); /* 显示"空格" */
write_data( row2[w1] );
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
通过液位传感器进行检测,实时监测水位大小。当超过设定范围时则进行报警,并通过进液泵和出液泵控制水位位置。分别有设定手动控制和自动控制,并有电源电路。包含的电路有显示电路、按键电路,显示电路,电机电路,传感器电路,声光报警电路,电源电路。 文件中含有源程序、peoteus仿真、原理图等
资源推荐
资源详情
资源评论
收起资源包目录
程序.zip (25个子文件)
程序
pro 14KB
pro.uvproj 14KB
程序.c 13KB
pro.lnp 39B
pro.hex 8KB
pro.uvgui.82705 91KB
程序.OBJ 14KB
pro_uvopt.bak 54KB
pro.uvopt 5KB
pro.M51 17KB
pro.plg 236B
程序.LST 20KB
仿真
仿真(包含电源).pdsprj.LEOD.82705.workspace 1KB
Last Loaded 电源.DBK 127KB
仿真(包含电源).pdsprj.DESKTOP-FN1053R.HELLO.workspace 2KB
电源.DSN 127KB
仿真.PWI 792B
Project Backups
仿真(包含电源) [Autosaved].pdsprj 38KB
仿真(包含电源).PWI 792B
Last Loaded 仿真(包含电源).pdsbak 33KB
电源.pdsprj.LEOD.82705.workspace 1KB
电源.pdsprj.DESKTOP-FN1053R.HELLO.workspace 328B
仿真(包含电源).DSN 201KB
Last Loaded 仿真(包含电源).DBK 201KB
Last Loaded 仿真.DBK 167KB
共 25 条
- 1
资源评论
- 云深无痕3412023-06-14资源很受用,资源主总结的很全面,内容与描述一致,解决了我当下的问题。
LEODWL
- 粉丝: 2w+
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功