版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
绪论课题研究背景与现状我国是世界上人口最多的国家之一,而我国的用水量也排再世界用水量的前几,所以我国正面临着淡水资源短缺的重要问题,解决水资源短缺有两种方法,一种是通过宣传节约用水,加强环境保护,来保障水资源安全,减少人为浪费,二是通过加强管理手段,来实现淡水资源的合理分配和淡水资源的平衡供给,所以为了解决我国水资源的短缺问题,早在在二十一世纪初党和国家就提出了要建设一个完善的供水系统,而由于在当时技术手段的限制,我国居民的自来水供给检测统计,都是通过查水表的方式来进行用水量的统计的,而这种传统的抄表计费手段太过繁琐,而且由于全程都是人为操作,不仅浪费大量的人力物力,而且存在太多的可操作性,一旦出现差错,很难追究到问题所在。但是随着科技的进步和发展,尤其是电子技术的进步,已经开始出现各类新型的检测计费模式,不仅简便而且公正公平,如IC卡识别的方法,这种方式尤其是校园已经开始广泛应用,打卡取水,用多少取多少,取水简单快捷,也减少了大量的浪费,本设计作为一款基于51单片机和RFID技术的新型IC卡取水计费系统,具有自动计费计量,显示报警,自动控制的优点,解决了传统抄表计费的繁琐方式,而且系统管理较为方便,具有较好的设计意义。供水计费装置的发展经历很多个阶段,首先在上个世纪就广泛应用的传统机械计费水表,其通过水的转动带动水表转动来达到计费的目的,而这种水表精度低,事故率高,一旦装上,很难进行更改,而且没有无线通信功能,对于供水人员来说,无论是计费统计,还是维修管理都极其繁琐,随着科技的发展,为了方便供水管理,国外开始出现智能电子水表,其具有远程通信功能,可以将计费计量数据进行传输,方便管理者进行统计管理,而近些年开始广泛应用的IC卡取水系统,也是智能水表的一种新型检测方式,虽然国内的供水计费系统起步较晚,但是发展较快,我国各地的供水管理者都在进行技术革新,如上海自来水厂,已经开始使用新型智能网络供水管理系统,所有供水设备全部联网,统一管理控制,用户取水自动扣费,取得了很好的使用效果。设计内容针对用水问题,本文设计了一种完善的供水系统,本文利用STC89C52单片机控制器、RFID-RC522模块、水流量模块、按键、LCD1602液晶、蜂鸣器、继电器、电磁阀、指示灯设计了一款自动IC供水系统,该系统是以STC89C52单片机为系统的核心控制器,实现了IC卡识别进行自动供水,具有自动计费计量,显示报警,自动控制的优点,相比于以往的抄表计费方式,本文设计的供水系统不仅计费效率高,而且节约了大量的人力物力,避免了以往抄表计费的繁琐方式。系统设计本次设计的自动IC供水系统主要有以下几个部分组成:STC89C52单片机控制器、RFID-RC522模块、水流量模块、按键、LCD1602液晶、蜂鸣器、继电器、电磁阀、指示灯以及电源。其中STC89C52单片机为系统的核心控制器,通过水流量模块来实现用水量的统计,利用RFID-RC522模块进行用水的控制和数据记录进行扣费。LCD1602液晶来显示信息,显示水流量和IC计费信息等,蜂鸣器进行声音提示,继电器实现对电磁阀的开合控制,保证供水功能正常。系统模块图如图2-1所示。图2-1整体的设计框图单片机选型方案一:分析本次设计需要实现的功能,发现STC89C52单片机可以满足要求。“STC89C52单片机是Intel推出的一款MCS-51系列的基本产品,是8位单片机,STC89C52单片机是基于MCS-51系列的指令系统和结构,可以完全兼容MCS-51的。STC89C52单片机采用了CMOS的高密技术,具有低功耗的特点[1]”。与传统的89C51单片机相比,STC89C52单片机是一款增强型单片机。方案二:还可以选择选择PIC系列单片机,这是一家非常具有实力的半导体公司,PIC单片机的抗干扰性被许多的电子行业所看中,早期的PIC单片机是由汇编语言开发,汇编指令比较适合做底层开发,这种精简指令集现在在开发中运用慢慢变少。但是PIC单片机价格偏高,和其他的单片机相比,性价比较低。比较两个方案,两个单片机都可以满足本次设计的需求,可以实现自动供水的功能,考虑开发难度和芯片的价格还是选择的是利用STC89C52最为本次的控制核心。显示器的选型方案一:“选择使用LCD1602液晶,LCD1602是一种字符型液晶显示模块。可以显示16*2个字符[2]”。LCD1602的驱动程序也更为简单,可以直接控制单片机将相应的数字、英文等字符通过数据口发送至液晶控制IC,这种显示屏的价格便宜,深受电子开发人员的喜爱。但是LCD1602显示屏只能显示一些字符,并不能更新和加载字库。虽然显示的内容比较单一。但是可以靠数字和英文字母表达想要显示的结果,因此选用LCD1602液晶屏作为该设计的显示器件。方案二:选用四位数码管来进行时间和分数的显示数码管显示的原理简单,每个数码管的内部都是有LED组成,将单个数码管的段选对应的LED灯分别为a,b,c,d,e,f,g,dp,将这些LED灯对应连接在一起,公共极则相互独立。在对数码管控制时分别控制不同的位选线来控制单个数码管的显示。以很快的速度进行刷新显示,可达到四个数码管同时显示的效果。另外数码管的成本也很低,数码管种类繁多,有很多选择。但是数码管显示的内容比较单一,不能准确的显示出要表达的信息。对比这两个方案,发现虽然数码管成本低,但是为了更好的显示出需要表达的信息,所以最终选择了第一个方案。硬件系统设计本设计中所用的到的硬件主要STC89C52单片机、RFID-RC522模块、水流量模块、按键、LCD1602液晶、蜂鸣器、继电器、以及电源。这个模块的正常工作,是保证整体系统的顺利运行的前提。每各模块都起到了不同的作用,保证系统的完整性。下面对各个硬件电路进行详细的说明。STC89C52介绍单片机就是单片微型计算机,单片机就是利用外围电路(包括各种外围传感器)收集外界非电信号,通过中央处理器(CPU)进行信号处理,并输出相应执行指令。“STC89C52单片机作为一个一种低功耗、高性能CMOS8位微控制器,具有以8k字节Flash,内置4KBEEPROM,MAX810复位电路,看门狗定时器,512字节RAM,32位I/O口线,3个16位定时器/计数器,4个外部中断,丰富的全双工串行口[3]”。STC89C52芯片引脚如下图3-1所示。图3-1STC89C52单片机引脚图时钟电路时钟电路作为单片机的重要组成部分,一般是由晶振和电容组合而成。其工作原理主要为晶振提供时钟振荡给单片机,其中晶振常选择11.0592MHZ和12MHZ的无源晶振、电容的大小为20pf-40pf。晶振的两端分别与单片机的XTAL1和XTAL2引脚相连。单片机的时钟电路就是一个振荡器给单片机芯片一个时钟节拍,单片机执行指令需要根据时钟电路产生的节拍进行。单片机的时钟电路如图3-2所示。图3-2时钟电路复位电路复位电路是单片机最小系统中重要的一部分,外界输入电源通过限流电阻给电容充电,当电容两端电压逐渐接近电源电压VCC,低于电源电压VCC时供电芯片复位引脚出现近似低电平,相当于芯片对外复位,接近电源电压VCC时芯片复位引脚出现近似高电平,相当于芯片对外终止复位,这样一个复位周期完成。复位电路如下图3-3所示。图3-3复位电路IC卡识别电路设计本次自动供水系统中,对于RFID射频模块采用的是RFID-RC522,RFID-RC522作为读卡电路,成本低,设计简单。RFID-RC522模块供电为+3.3V,具有SPI接口,与单片机连接,可以通过SPI接口和单片机进行数据通信。RFID-RC522利用调制解调实现数据的准确读写,RFID-RC522的双向数据传输速率可以达到424kbit/s。RFID-RC522模块电路图如下图3-4所示。图3-4RFID-RC522模块电路图水阀控制电路本次IC自动供水系统的水阀开关是由继电器和电磁阀来实现,继电器实现了电磁阀供电的通断。继电器使用的是+5V直流继电器,由于单片机的IO口驱动能力有限,可以选择三极管来进行驱动。三极管共有三个引脚,分别为基极、集电极、发射机。使用一个1K的电阻对三级管的基极进行限流。基极通过电阻接单片机的P36引脚。当P36引脚为低电平时,三极管的集电极和发射机导通,从而是线圈通电吸合。当P36引脚为低高电平,继电器线圈失电断开。水阀控制电路如下图3-5所示。图3-5水阀控制电路图水流检测电路本次自动IC供水系统中具有水流量检测的功能,该功能是根据霍尔效应实现,水流传感器是由水流带动涡轮,从而产生脉冲实现。由于涡轮转动,在垂直于电流方向施加磁场,使金属薄片的两端出现电位差,从而产生霍尔效应。当电机转动带动小磁铁,每当经过霍尔元件就可以产生脉冲,单片机根据该脉冲就能实现转速的大小。霍尔传感器共有三个引脚,分别为VCC、GND和信号引脚,信号引脚接单片机的外部中断1引脚。电路如下图3-6所示。图3-6水流检测电路图显示电路设计LCD1602模块共有16个引脚,分别为供电的引脚VCC和GND,供电的电平范围为5V-3.3V,其内部自带负压电路,无需负压,D0到D8为LCD的数据传输接口,V0为LCD的驱动电压输入端,RS为一个指令还是数据的选择引脚,当将RS拉高时,LCD模块进入指令控制选择模式,RS引脚拉低时,LCD模块进入数据控制选择模式。R/W引脚是读写控制引脚,A、K引脚为背光电源的正负,可以用于调整背光亮度,在本设计中无需调节,所以直接接入VCC和GND供电即可。如下图3-7为LCD1602显示模块的引脚连接电路图:图3-7显示电路图蜂鸣器电路本次对于声音提示采用了蜂鸣器来实现,由于单片机的IO口输出电流较小,一般不采用单片机IO口直接驱动的方法。通常采用三极管进行驱动,本次系统中采用8550三极管,8550三级管的引脚为基极,发射极和集电极。使用一个2K的限流电阻和单片机的P24脚相连,来控制三级管的基极。三级管的发射极和电源相连,集电极和蜂鸣器正极相连,然后再将蜂鸣器的负极接地。如果三级管的基极为低,此时三级管为导通状态,蜂鸣器的正极就和电源接通。蜂鸣器通电就可以发出警报,来提示用户水量不足。如图3-9所示是蜂鸣器电路设计。图3-9蜂鸣器报警电路图软件系统设计开发环境简介本次系统的软件设计主要是对于程序的编写,程序的编写是在KEIL4软件平台进行,KEIL软件具有丰富的函数库,并且集成了各种调试的小工具。还能通过软件实现逻辑分析仪的使用,可以通过波形观察时序情况,为了设计提供了便捷的功能。本次系统在软件设计时,有一个重要的方式就是通过流程图表现出来程序的运行逻辑。KEIL4界面如下图4-1所示。图4-1程序编辑界面图系统运行程序流程图系统通电之后,对单片机的IO口引脚、定时器和串口等进行初始化。初始化时,其中各个模块也要进行初始状态的设置。当初始化完成后,系统会先进行按键扫描,判断是否有按键按下,如果有,则对按键作出相应的处理。再进行IC卡读取读取,当有IC靠近时,读取出IC卡里面的数据,IC卡满足用水条件,则继电器吸合,是电磁阀吸合,从而让水阀打开,开始供水,同时蜂鸣器进行声音提示,在用水器件LCD1602液晶对IC的数据和水流量等信息进行显示,系统的主程序工作流程图如下图4-2所示。图4-2系统运行流程图按键消抖子程序流程图本次设计的自动IC供水系统中,对于按键消抖问题,本次设计选择的是软件消抖,通过在程序中添加延时,达到按键消抖的目的。在系统上电运行后,首先进行按键扫描,判断是否有按键按下,如果检测到有按键按下先不进行处理,程序延时10ms,之后再次判断按键状态,如果仍检测到按键按下,确定按键按下,再进行对应的任务处理函数。按键子程序流程图如下图所示4-3所示。图4-3按键消抖处理流程图液晶显示程序本设计的自动IC供水系统使用LCD1602液晶来作为显示器,先调用初始化函数,初始化函数中进行的操作包括通过写数据子令函数设置光标的位置和移动方向,设置输入方式等基础的初始化操作,然后将地址指针指向00H进行清屏,再调用显示函数,设置数据写操作,同步地址,然后通过并行传输,完成想要显示数据的传输和显示,即可完成显示操作。液晶的程序流程如图4-4所示:图4-4LCD1602液晶的读写流程图硬件焊接在硬件电路设计和软件设计的工作完成后,就可以对实际电路进行焊接,在电路焊接的过程中为了减少后面调试的工作量和难度,所以要尽可能的减少前面焊接出现的错误。电路的焊接是电子设计人员的基本功。在焊接前对硬件电路进行最终的检查,确定没有问题后再进行电路焊接。焊接工作,不是将各个引脚焊接起来就行了,更重要的是要保证系统的稳定性。硬件实物图如下图5-1所示。硬件实物图如下图5-1所示硬件调试(1)电路的检查完成焊接工作后,进行硬件调试。焊接完成后不要着急给系统供电,先对焊接的电路连线进行检测,观察是否有线路连接错误,尤其注意不要出现电源反接和短路。同时还要观察是否有虚焊的情况。小心检查各个元气件,杜绝元器件没有焊接好的情况。(2)上电观察先调好电源所需要的电压值,然后给系统上电。在上电之后,如果电路出现了异常情况应该立即断电。如出现元器件发热、冒烟等,在找出问题之后再给电路上电。(3)电路调试调试过程可以借助万用表和示波器等工具来进行检测。可以用万用表检测出线路的导通的情况,先将万用表打到蜂鸣器档位,来检测电源的正极和负极是否有短路。再检测电源芯片的输入和输出端电压是否正常,确定电源芯片的正常工作。软件调试(1)软件部分调试软件在线调试时,点击停止运行时,会自动跳转到停止运行的那一条指令,重复几次操作,可以观察程序进入了错误中断。当程序实现所有功能后,就是对系统进行稳定性测试。进过长时间的运行,系统正常工作,则表示本次设计的实物制作完成。软件调试界面如下图5-2所示。图5-2程序调试界面图(2)实物演示在给系统上电后,LCD屏上显示如图5-3所示:上面一行显示为是IC卡的卡号,下面一行显示的是剩余的水量和IC卡内的剩余余额,当水量和余额都不为零时,此时用户可以使用IC卡取水。图5-3实物图当RFID-RC522电路模块读取到IC卡的数据时,LCD屏上显示如图5-4所示:上面一行为IC卡的卡号,下面一行显示的是剩余的水量和IC卡内的剩余余额,此时IC卡上的余额可以充值到水表里。用户可以通过按键取水,LCD屏上显示显示用户用水的计费。当水量不足时,继电器断开,水阀关闭,蜂鸣器开始鸣叫。图5-4实物图总结生活中用水问题一直备受人们关注,节约用水,减少水资源尤其是淡水资源的浪费,通过加强管理手段,实现水资源的合理分配和管理来实现水资源的供给平衡。针对水资源的合理利用,本次设计的自动IC供水系统研究完成了硬件电路的设计,软件设计、和实物的制作。本文的自动IC供水系统的芯片采用的是STC89C52芯片,其他硬件模块有RFID-RC522模块、水流量模块、按键、LCD1602液晶、蜂鸣器、继电器、以及电源。软件设计部分用KELI4进行编写,分为供水模块、按键消抖模块和LCD显示屏模块几个模块。供水模块编写的主要是当IC卡靠近时,实现继电器的吸合,从而是水阀打开,进行供水,实现基本的供水功能。按键消抖模块的编写主要功能是当系统检测到按键按下时,对其先不做处理,让其延时10ms,再判断其状态,实现一个简单的按键消抖功能。LCD显示屏模块主要实现了是当IC卡靠近RFID-RC522读卡电路模块时,单片机通过SPI接口读出IC卡的数据,在LCD屏上进行显示。本次设计基本实现了预期的功能,系统实现了自动供水的功能,当虽然本次设计完成了预期的所有功能,但是本次设计的系统也存在一定的问题。其中就包括电源供电的问题。本次的系统采用的是锂电池供电,本次的设计只是验证功能,并没有注重功耗的问题。为了保证系统长期稳定的工作,所以后期还需要对系统的功耗进行适当的改进。参考文献刘康,吴昕韬,张建青.基于单片机的IC卡寻回系统设计与实现[J].信息技术与信息化,2021(02):14-15.周喜,王会珍,赵娟萍.基于RFID技术的门禁管理系统设计[J].科学技术创新,2021(03):66-67.陈胡,李宏远,刘人菊,郝晓曦.自助式人体体征指标检测系统设计[J].新技术新工艺,2020(12):38-42.周碧茜,王青,范祥祥.基于射频识别技术的垃圾分类训练装置设计[J].湖州师范学院学报,2020,42(10):64-69.李涛.基于单片机和射频技术的机井双控系统设计[J].机电信息,2020(27):112-113.张驰,何佳咛,刘譞,何英昊.基于单片机的RFID主控系统设计及实现[J].电子测试,2019(23):28-30.赵瑞华,窦占广,王若鸣,刘冰.基于STM32和IC卡的智能储物柜的设计与开发[J].中外企业家,2019(32):113-114.叶冉.基于51单片机的高低位水箱供水电气控制系统设计[J].机电信息,2018(15):31-32.王晓东.恒压供水单片机控制系统的设计[J].数字技术与应用,2016(02):7-8.刘顺,苏红莲.基于单片机的变频恒压供水控制系统设计[J].四川水泥,2015(12):148.刘作鹏.基于单片机技术对家用无塔供水系统控制的改进设计方法研究[J].湖北成人教育学院学报,2015,21(06):93-96.吴宁,尚坡利.基于单片机的企业恒温恒压供水系统的设计[J].自动化与仪器仪表,2015(10):117-118.附录原理图:程序:/********************************************************************************************//IC卡智能水表//应用程序C////V2.012017-10-1//MCS-5111.0592MHZC语言//元件:STC89C52,RC522,LCD1602//功能:自动供水/显示计费/水量预警*********************************************************************************************/#include"reg52.h"#include"main.h"#include"mfrc522.h"#include<intrins.h>//函数处理头文件 #include<string.h>//字符串处理头文件#include<stdio.h>//输入输出函数头文件/********************************************************************************************///数值类别typedefsignedcharint8;//typedefunsignedcharuint8;//无符号8位整型变量typedefsignedintint16;//typedefunsignedintuint16;///********************************************************************************************///定义特殊寄存器sfrwdt_contr=0xe1; //定义看门狗地址sfrisp_data=0xe2; //ISP数据寄存器sfrisp_addrh=0xe3; //ISP地址高8位sfrisp_addrl=0xe4; //定义ISP地址低8位sfrisp_cmd=0xe5; //ISP命令模式寄存器sfrisp_trig=0xe6; //定义ISP命令触发寄存器sfrisp_contr=0xe7; //定义ISP控制模式寄存器unsignedcharcodedata1[16]={0xC8,0x00,0x00,0x00,0x37,0xFF,0xFF,0xFF,0xC8,0x00,0x00,0x00,0x01,0xFE,0x01,0xFE};//200//M1卡的某一块写为如下格式,则该块为钱包,可接收扣款和充值命令//4字节金额(低字节在前)+4字节金额取反+4字节金额+1字节块地址+1字节块地址取反+1字节块地址+1字节块地址取反unsignedchardata2[4]={0x00,0x00,0x00,0x01};//存值减值金额unsignedcharcodeDefaultKey[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};//密码unsignedcharTYPE_DATA[2];//类型unsignedcharID_DATA[4];//ID地址unsignedcharvalue_DATA[4];//卡里面的值 unsignedcharg_ucTempbuf[20];//unsignedcharcodedis0[]={"Total:"};unsignedcharcodedis1[]={""};unsignedcharcodedis2[]={"CardID:"};unsignedcharcodedis3[]={"Met:"};unsignedcharcodedis4[]={"Card:"};unsignedcharcodedis6[]={"0123456789ABCDEF"};unsignedinttt=0,keyfalg,falg_pro;unsignedcharmc;uint16tot=0,mon=0,card=0;uint8a=0,b=0,c=0,d=0;/********************************************************************************************///EEPROM驱动开始/**********************************************************************************函数名称:eepromEraseSector(uint16address)*功能:EEPROM擦除程序*入口参数:address*出口参数:无**********************************************************************************///擦除片内EEPROM的一个扇区//擦除只能以扇区为最小单位进行,没法只擦除一个字节//一个扇区是512个字节//本函数参数里面的地址落在哪个扇区,则该扇区内数据都将被擦除//例如:STC89C51RC片内EEPROM第一扇区开始地址为0x2000,结束地址为0x21ff//如果调用eepromEraseSector(0x2001),则第一扇区内数据都将被擦除//擦除成功后,该扇区内各字节都将变为0xffvoideepromEraseSector(uint16address){ uint8i; isp_addrl=address; isp_addrh=address>>8; isp_contr=0x01; isp_contr=isp_contr|0x81; isp_cmd=0x03;//送擦除扇区命令 isp_trig=0x46; isp_trig=0xb9;//触发寄存器 for(i=0;i<3;i++); isp_contr=0x00; isp_cmd=0x00; isp_trig=0x00; isp_addrl=0x0; isp_addrh=0x0; }/***********************************************************************************函数名称:eepromWrite(uint16address,uint8write_data)*功能:EEPROM写程序*入口参数:address,write_data*出口参数:无***********************************************************************************///注意:字节编程是指将eeprom的1写成1或0,将0写成0,而无法将0写成1voideepromWrite(uint16address,uint8write_data){ uint8i; isp_data=write_data; isp_addrl=address; isp_addrh=address>>8; isp_contr=0x01; isp_contr=isp_contr|0x81; isp_cmd=0x02;//送写数据命令 isp_trig=0x46; isp_trig=0xb9;//触发寄存器 for(i=0;i<3;i++); isp_contr=0x00; isp_cmd=0x00; isp_trig=0x00; isp_addrl=0x0; isp_addrh=0x0;}/************************************************************************************函数名称:eepromRead(uint16address)*功能:EEPROM读程序*入口参数:address*出口参数:z************************************************************************************///读取STC单片机内部EEPROM的一个字节//主要不同的STC单片机EEPROM起始地址不同//例如:STC89c52RC的片内EEPROM起始地址为0x2000uint8eepromRead(uint16address){ uint8i,z; isp_addrl=address; isp_addrh=address>>8; isp_contr=0x01; isp_contr=isp_contr|0x81; isp_cmd=0x01;//送读数据命令 isp_trig=0x46; isp_trig=0xb9;//触发寄存器 for(i=0;i<3;i++); isp_contr=0x00; isp_cmd=0x00; isp_trig=0x00; isp_addrl=0x0; isp_addrh=0x0; z=isp_data; return(z); }voidwreeprom(void){ a=tot/256; b=tot%256; c=mon/256; d=mon%256; eepromEraseSector(0x2000); eepromWrite(0x2000,a); eepromWrite(0x2001,b); eepromWrite(0x2002,c); eepromWrite(0x2003,d); eepromWrite(0x2020,0x00);}voideeprominit(void){ unsignedchartest; test=eepromRead(0x2020); while(test==0xff);}//中断程序/**********************************************************************************函数名称:int0_1_int()*功能:外部中断0/1初始化**********************************************************************************/voidint0_1_int(void){// IT0=1;//下降沿触发// EX0=1;//TF0中断开 IT1=1;//下降沿触发 EX1=1;//TF1中断开 EA=1;//开中断 } /**********************************************************************************函数名称:int1_fun()interrupt2*功能:外部中断1服务子程序*********************************************************************************/voidint1_fun()interrupt2{ mc++; if(mc>=10){ mc=0; if(mon>0){mon--;tot++;} wreeprom(); } } voidmain(){ unsignedcharstatus; 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); eepromWrite(0x2000,a); 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); 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); if(status==MI_OK){ status=PcdSelect(g_ucTempbuf); 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;//余额低于10时报警灯亮; }else{ qqbj=1; } if(mon<10&mon>0){ fmq=0; }else{ fmq=1; } if(falg_pro){ LCD1206b(); }else{ LCD1206a(); };//显示处理 }}///////////////////////////////////////////////////////////////////////系统初始化/////////////////////////////////////////////////////////////////////voidInitializeSystem(void){P0=0xFF;P1=0xFF;P2=0xFF;P3=0xFF; fmq=0; lcd_init(); //初始化LCD Delay(1); fmq=1;}voidDelay(unsignedinttime){unsignedinti,k;for(i=0;i<255;i++)for(k=0;k<time;k++)_nop_(); }////////////////////////显示处理函数////////////////////////////////bitlcd_bz() //测试LCD忙碌状态{ bitresult; rs=0; rw=1; ep=1; _nop_(); _nop_(); _nop_(); _nop_(); result=(bit)(P0&0x80); ep=0; returnresult;}lcd_wcmd(unsignedcharcmd){ while(lcd_bz()); rs=0; rw=0; ep=0; _nop_(); _nop_(); P0=cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0;}lcd_pos(unsignedcharpos){ //设定显示位置 lcd_wcmd(pos|0x80);}lcd_wdat(unsignedchardat) { //写入字符显示数据到LCD while(lcd_bz()); rs=1; rw=0; ep=0; P0=dat; _nop_(); _nop_(); _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0;}lcd_init(void) //LCD初始化设定{ lcd_wcmd(0x38);Delay(1); // lcd_wcmd(0x0c);Delay(1); // lcd_wcmd(0x06);Delay(1); // lcd_wcmd(0x01);Delay(1); //清除LCD的显示内容}LCD1206a(){ unsignedchari; TYPE_DATA[0]=0x04; lcd_pos(0x00); i=0; switch(TYPE_DATA[0]) { case0x04: lcd_wdat(dis0[0]); lcd_wdat(dis0[1]); lcd_wdat(dis0[2]); lcd_wdat(dis0[3]); lcd_wdat(dis0[4]); lcd_wdat(dis0[5]); break; case0x02: lcd_wdat(dis1[0]); break; case0x08: lcd_wdat(dis2[0]); break; case0x44: lcd_wdat(dis3[0]); break; } lcd_wdat(dis6[tot/10000]); lcd_wdat(dis6[tot%10000/1000]); lcd_wdat(dis6[tot%10000%1000/100]); lcd_wdat(dis6[tot%10000%1000%100/10]); lcd_wdat(dis6[tot%10000%1000%100%10]); lcd_wdat(dis1[0]); lcd_wdat(dis1[0]); lcd_wdat(dis1[0]); lcd_wdat(dis1[0]); lcd_wdat(dis1[0]); lcd_pos(0x40); lcd_wdat(dis3[0]); lcd_wdat(dis3[1]); lcd_wdat(dis3[2]); lcd_wdat(dis3[3]); lcd_wdat(dis6[mon%10000%1000/100]); lcd_wdat(dis6[mon%10000%1000%100/10]); lcd_wdat(dis6[mon%10000%1000%100%10]); lcd_wdat(dis4[0]); lcd_wdat(dis4[1]); lcd_wdat(dis4[2]); lcd_wdat(dis4[3]); lcd_wdat(dis4[4]); lcd_wdat(dis4[5]); lcd_wdat(dis6[card%10000%1000/100]); lcd_wdat(dis6[card%10000%1000%100/10]); lcd_wdat(dis6[card%10000%1000%100%10]);}LCD1206b(){ unsignedchari; TYPE_DATA[0]=0x04; lcd_pos(0x00); //设置显示位置为第一行的第0个字符 i=0; switch(TYPE_DATA[0]) { case0x04: lcd_wdat(dis2[0]); lcd_wdat(dis2[1]); lcd_wdat(dis2[2]); lcd_wdat(dis2[3]); lcd_wdat(dis2[4]); lcd_wdat(dis2[5]); lcd_wdat(dis2[6]); lcd_wdat(dis2[7]); break; lcd_wdat(dis2[6]); break; lcd_wdat(dis2[7]); break; case0x02: lcd_wdat(dis1[0]); break; case0x08: lcd_wdat(dis2[0]); break; case0x44: lcd_wdat(dis3[0]); break; } lcd_wdat(dis6[ID_DATA[0]%100/10]); lcd_wdat(dis6[ID_DATA[0]%10]); lcd_wdat(dis6[ID_DATA[1]%100/10]); lcd_wdat(dis6[ID_DATA[1]%10]); lcd_wdat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国银行对私培训课件
- 2026年医保基金监管条例考试题含答案
- 2025辽宁鞍山市台安兴水经营管理有限公司招聘46人笔试参考题库附带答案详解
- 2025山东威海市乳山鑫蜜客人力资源有限公司招聘书记员7人笔试参考题库附带答案详解
- 工程技术类生涯报告
- 电采暖炉培训课件
- 养老院老年人意外伤害预防与处理制度
- 办公室员工培训计划制定制度
- 2026年中信证券研究部实习生面试专业问题深度解析
- 2026年特警队员选拔心理测评模拟试题含答案
- 物流行业安全生产会议记录范文
- 横向课题可行性报告
- GB/T 44253-2024巡检机器人安全要求
- 电力电子技术(广东工业大学)智慧树知到期末考试答案章节答案2024年广东工业大学
- 汽车网络与新媒体营销课件
- DB32T3834-2020水利工程螺杆式启闭机检修技术规程
- 提高卧床患者踝泵运动的执行率
- 伤寒论条文(全398条)
- 资料3b SIG康美包无菌灌装流程及特征分段介绍
- 钳工技能训练(第4版)PPT完整全套教学课件
- 电力工程课程设计-某机床厂变电所设计
评论
0/150
提交评论