89 基于单片机洗衣机耗水量监测系统【毕设课设】

 

/*      预处理区    */
#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    add     = P1 ^ 7;
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,total = 0;                                                            /* 水量数值 */
unint	w1, w2, w3, w4, i;                                                      /* 变量定义 百位,十位,个位,十分位,循环计数位。 */
unint   z1,z2,z3,z4,z5;

/*  自定义函数声明   */
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( 'D' ); 
	write_data( ':' ); 
	write_data( row2[w1] );                                                 /* 显示水量大小"百位" */
	write_data( row2[w2] );                                                 /* 显示水量大小"个位" */
	write_data( row2[w3] );                                                 /* 显示水量大小"十位" */
	write_data( '.' );                                                      /* 显示"小数点" */
	write_data( row2[w4] );                                                 /* 显示水量大小"十位" */
	write_data( ' ' );  
	write_data( 'T' ); 
	write_data( ':' ); 
	write_data( row2[z1] );                                                 /* 显示水量大小*/
	write_data( row2[z2] );                                                 /* 显示水量大小 */
	write_data( row2[z3] );                                                 /* 显示水量大小*/
	write_data( row2[z4] );                                                 /* 显示水量大小 */
	write_data( '.' );
	write_data( row2[z5] );                                                 /* 显示水量大小 */
	write_data( 'L' ); 
}

资料下载地址

 资料下载地址

https://pan.baidu.com/s/11lEFhGovzeg3ysh1OCZYIA?pwd=8888

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值