基于51单片机的IC卡智能水表设计

一.硬件方案

本设计是以STC89C52单片机为核心,实现IC卡的读写,控制液晶屏幕的显示、电磁阀的开闭,流量计脉冲的提取,同时具有记忆电路,完成水表信号的读、写处理,监控水表工作的功能。
主要由由51单片机(STC89C51/52、AT89C51/52均可兼容)+LCD1602液晶显示屏+电磁阀模块+继电器电路+流量计+蜂鸣器+按键电路+IC卡读写模块构成;如图:
在这里插入图片描述

二.设计功能

(1)用水管理功能:当用户刷有效的IC卡时,系统将剩余水量与购买水量相加,并且将余额数值存入到芯片以防丢失;当用户开始用水的时后,系统将剩余水量与使用的水量自动相减,并且存入到芯片以防丢失。
(2)自动供停水功能:当表内剩余水量为0时,自动关闭阀门;购水刷卡后,阀门开启。
(3)流量检测功能:通过流量传感器检测瞬时的水流量。
(4)显示功能:采用LCD显示,可以显示出用水总量、可用剩余水量、瞬时流量、IC卡号、卡内余量等信息。
(5)报警功能:当剩余水量减少到一定量时,声光报警并提示用户购水。
(6)模拟充值功能:为了演示方便,设置了为IC卡充值的功能。

三.设计原理图

(1)原理图主要采用AD软件进行设计,如图:
在这里插入图片描述

四.软件设计

(1)程序流程图
在这里插入图片描述

(2)主程序源码

void main( )
{    
     unsigned char status;
	 int0_1_int();
     InitializeSystem( );//初始化
     PcdReset();	    //复位RC522
     PcdAntennaOff(); //关闭天线
     PcdAntennaOn();  //开启天线

	a=eepromRead(0x2000);//从eeprom读
	b=eepromRead(0x2001);//从eeprom读
	c=eepromRead(0x2002);//从eeprom读
	d=eepromRead(0x2003);//wreeprom
	if (a==0xff&b==0xff&c==0xff&d==0xff) {
		a=0,b=0,c=0,d=0;
		eepromEraseSector (0x2000);//擦除eeprom
		eepromWrite(0x2000, a);//写入eeprom
		eepromWrite(0x2001, b);//写入eeprom
		eepromWrite(0x2002, c);//写入eeprom
		eepromWrite(0x2003, d);}//写入eeprom
	tot=a*256+b;
	mon=c*256+d;

	eeprominit();
	
     while ( 1 )
     { 

		if(key1==0){dcf=1;dcfzsd=1;fmq=0;kgbj=0;}else{fmq=1;kgbj=1;}//开盖检测到开启时关阀门、报警
		if(key4==0){tot=0;mon=0;wreeprom();}
        status = PcdRequest(PICC_REQALL, g_ucTempbuf); //返回卡片类型#define PICC_REQIDL 0x26 寻天线区内未进入休眠状态
		if (status != MI_OK){TYPE_DATA[0]=0;TYPE_DATA[1]=0;
							ID_DATA[0]=0;ID_DATA[1]=0;ID_DATA[2]=0;ID_DATA[3]=0;
							value_DATA[0]=0;	value_DATA[1]=0;	value_DATA[2]=0;	value_DATA[3]=0;
							falg_pro=0;
							card=0;}//读不到卡,显示清0;
        if (status == MI_OK){TYPE_DATA[0]=g_ucTempbuf[0];TYPE_DATA[1]=g_ucTempbuf[1];
							status = PcdAnticoll(g_ucTempbuf);       //防冲撞 ,返回卡片ID号 4字节
							if (status == MI_OK){status = PcdSelect(g_ucTempbuf);    //选定卡片  ,输入卡片ID号
										if (status == MI_OK){if(falg_pro==0){falg_pro=1;pro();}//声音提示标志
													ID_DATA[0]=g_ucTempbuf[0];
													ID_DATA[1]=g_ucTempbuf[1];
													ID_DATA[2]=g_ucTempbuf[2];
													ID_DATA[3]=g_ucTempbuf[3];
													                            //
													if (key2==0 ){init_k();pro();}//初始化卡
													
													if (key2!=0 & mon<900 & card>0){writek();}//写卡 
													readk(); //读卡
													PcdHalt();//命令卡片进入休眠状态	

													} 	  
												}
							}   
		if(key3==0){Delay(40);if (mon>0){mon--;tot++;}
		wreeprom();}//写入eeprom}
		if(mon>0&key1!=0){dcf=0;dcfzsd=0;}else{dcf=1;dcfzsd=1;}//有余额时开阀
		
		if(mon<10){qqbj=0;}else{qqbj=1;}//余额低于10时报警灯亮;
		if(mon<10&mon>0){fmq=0;}else{fmq=1;}

		if (falg_pro){LCD1206b();}else{LCD1206a();};//显示处理	

	}       
}

下载地址:https://pan.baidu.com/s/1cy4Hgwq2AWqysmAcG1x4VQ?pwd=vyst
提取码:vyst

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值