基于RFID的智能挂锁的设计与实现_第1页
基于RFID的智能挂锁的设计与实现_第2页
基于RFID的智能挂锁的设计与实现_第3页
基于RFID的智能挂锁的设计与实现_第4页
基于RFID的智能挂锁的设计与实现_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要物联网时代家居智能化是大趋势,锁更是不可缺少的一部分。密码锁具有,便捷、安全性高、忘记带钥匙也能开锁等优点。此设计是一个基于RFID的射频智能锁。本设计源于笔者日常生活中经常忘记带钥匙,通过市场调查蓝牙锁后,发现蓝牙锁往往需要,先连接蓝牙,再开锁,其间过程需要2至3分钟,虽然这些蓝牙锁可以实现不带钥匙也能开门,但是并不节省时间,于是想设计一款可以更加快速开锁的智能锁。本设计由硬件和软件两部分组成,主要采用了RFID技术和红外遥控技术。本设计中硬件实现部分由STC89C52单片机系统、4*4矩阵键盘、LCD1602液晶显示模块、RC522读卡模块等组成;软件部分使用C语言进行编程。可以实现通过管理员密码,读写卡片、对RFID卡进行管理。本系统有多种开锁方式,可以使用RFID卡片开锁,红外遥控开锁,蓝牙遥控开锁。关键词:RFID;单片机;智能锁AbstractIntheeraofInternetofthings,homeintelligentisthegeneraltrend,andlockisanindispensablepart.Thisdesignpasswordlockhastheadvantagesofconvenience,highsecurity,forgettingtotakethekey,etc.ThisdesignisaRFIDBasedRFsmartlock.ThisdesignoriginatesfromthefactthatIoftenforgettotakethekeyinmydailylife.Aftermarketinvestigation,IfoundthattheBluetoothlockoftenneedstobeconnectedfirstandthenunlocked.Theprocesstakes2to3minutes.AlthoughtheseBluetoothlockscanopenthedoorwithoutthekey,itdoesnotsavetime,soIwanttodesignasmartlockthatcanunlockthedoormorequickly.Thisdesigniscomposedofhardwareandsoftware,mainlyusingRFIDtechnologyandinfraredremotecontroltechnology.Inthisdesign,thehardwarepartiscomposedofSTC89C52singlechipmicrocomputersystem,4*4matrixkeyboard,LCD1602liquidcrystaldisplaymodule,rc522cardreadingmodule,andthesoftwarepartisprogrammedwithClanguage.ItcanreadandwritethecardandmanagetheRFIDcardthroughtheadministratorpassword.Thesystemhasavarietyofwaystounlock,RFIDcardcanbeusedtounlock,infraredremotecontrolunlock,Bluetoothremotecontrolunlock.Keywords:RFID;singlechipmicrocomputer;intelligentlock

目录第一章绪论 11.1选题意义与目的 11.2选题背景与现状 21.3本文结构 2第二章智能锁开发技术 42.1开发工具 42.1.1软件开发工具 42.1.2硬件制作工具 42.2技术介绍 42.2.1RFID 42.2.2红外遥控 52.2.3单片机C语言 6第三章智能锁方案设计 73.1智能锁总体方案设计 73.2硬件设计 73.2.1STC89C52RC单片机介绍 73.2.2LCD1602液晶介绍 83.2.3RC522射频模块介绍 93.2.4HC-05蓝牙模块介绍 103.2.5红外一体接收头介绍 103.2.6智能锁原理图 113.3软件设计 113.3.1液晶显示部分代码 123.3.2射频模块代码 133.3.3主函数 173.3.4重置密码 203.3.5扫描按键函数 233.4本章小结 27第四章智能锁功能实现 294.1RFID智能锁硬件制作 294.1.1焊接 294.1.2程序烧录 294.2密码开锁 304.3RFID卡片开锁 334.4红外遥控开锁 364.5蓝牙开锁 364.6本章小结 37结论 38参考文献 39致谢 40第一章绪论1.1选题意义与目的随着时光洪流滚滚,科技蓬勃发展,人类进入第四次工业革命。在第四次工业革命中,计算机科学无疑是其中不可缺少的重要部分。计算机科学可能乍一听离我们的日常生活很远,其实不然。人工智能、大数据、智能家居早已悄然走进你我的生活,走进千家万户。在我们的日常生活中,智能音响、智能电视、智能手机早已不是什么新鲜事,本课题源自我本身生活中发现的小小不便。锁在我们生活中是不可缺少的重要部分,然而,在生活中忘带钥匙是一件会迟到却不会缺席的尴尬事。根据我的调查以及亲身体验,目前市面上的蓝牙电子锁,在开锁前总要先将蓝牙设备与安卓设备进行配对连接,这一个过程动辄两三分钟,每每使我焦急万分。我认为这样的智能蓝牙锁不够便捷。电子技术、通信技术、计算机技术飞速发展,特别是互联网和多媒体通讯技术的蓬勃发展,人们对互联网、多媒体通信的需求成倍数爆发增长,人们开始不满足于如今的电子产品,开始追求更加先进、更加智能的产品。多年来人们用数据线进行有线连接,比如一台计算机就是由主机,键盘,显示器等通过线缆连接而成,当你想将电脑与手机连接在一起,将电脑与网络连接在一起,当你想接入计算机的设备越来越多,用以连接的线缆也就越多。线缆多就导致了必然的乱,这种情况下利用线缆的信息传输已经无法满足人们的需求了,人们开始变“懒”了。“懒”也是一种动力,由于懒得出力,人们驯化了牲畜,由于懒得挑水,人们建造了水利设施,现如今,人们懒得携带、管理这些越来越多的电子产品的线缆,人们开始创造、寻找让这些线缆消失的方法。既然不想“有线”,那就只好寻求“无线”技术啦。RFID技术就是一种可以进行无线传输信息的技术,它是一种可以在短距离内保证可靠的接收和信息安全的无线通信技术。RFID技术在许多方面都有优势,例如更新的实时性、存储信息量、使用寿命、工作效率、安全性等方面。本次毕业设计的选题,便是这样一个基于RFID的智能锁,本设计集成了多种智能锁的特点,可实现密码开锁,红外遥控开锁,RFID接触式卡片开锁,蓝牙遥控开锁。1.2选题背景与现状在国内,锁具行业的年销售额约有四百多亿,一年大概生产约20亿把锁。我们不仅是生产大国,对锁也有很大的需求,但是和许多大洋彼岸某发达国家相比,我们市场上大部分仍是按键电子锁,卡片钥匙式电子锁已经属于“高端”锁具。国内市场缺乏这一类“高端”锁具,却不代表没有人想要购买这种锁,而在国内市场上买不到的人们就只好出国购买。这种市场现象导致了国人研发的电子智能锁的知名率和购买率都不尽人意,在国内市场,电子锁仅占民用锁不到2%的市场,不过相信随着国家的快速发展,带领人们全面建成小康社会,人们的消费观念会逐渐改变,这种在普通家庭看来“高端”的锁具也会渐渐走向大众。如今正处于人们对这种锁好奇到需求的阶段,本设计中这种集合了多种开锁方式,基于RFID技术开发的智能锁就十分恰如其分了。不使用钥匙,而是使用输入密码的方式来控制锁的开关,这种开锁方式的锁就是电子密码锁。在如今人们的日常生活中,人们也逐渐意识到智能锁的方便、快捷,希望我们不仅是科技与这些主流国家达到了同一水平,也希望我们的人民对使用科技带来的便捷的水平也达到一致。在跟随智能化浪潮的今天,对智能锁的市场需求一日比一日高,现在智能锁已经成为锁具行业的发展潮流。但是在智能锁的实际使用体验中,还是存在些许问题。我曾体验过多种蓝牙锁、但是这种蓝牙锁有着十分明显的弊端,每次开锁都需要先连接上蓝牙然后再进行开锁动作,连接蓝牙这个过程需要两至三分钟,这使得一个本身为了便捷而设计的锁,失去了它的本来意义。所以我觉得,在当前背景下,设计一款这样更实用、更便捷的锁,能让我们的生活更便利。1.3本文结构根据内容可以将本文分为四个章节,下面介绍各个章节的大致内容:第一章首先引出了本设计的选题意义与目的,物联网与智能锁的发展,RFID技术的特点,然后介绍了选题背景与现状。最后给出了本文的结构。然后第二章先是介绍了本设计开发时使用的工具,例如软件部分开发时使用了Keil5进行编程编译工作,随后原理图的绘制使用了AltiumDesigner;然后介绍了硬件制作时所使用的工具。随即介绍在本设计中使用的主要技术,首先是RFID即无线射频识别技术,然后介绍了红外遥控技术,最后介绍了本设计中使用的编程语言——C语言。第三章介绍了智能锁的总体设计方案,即是主要需要实现的功能,然后分别展示了功能实现部分的代码,然后介绍了在硬件部分的设计以及硬件部分中主要的元器件的原理和使用方法,然后展示了硬件设计的原理图。最后展示了软件程序部分的设计思路以及主要实现代码。第四章首先介绍了如何制作硬件部分,此部分分为焊接和程序烧录两部分;最后展示了本设计实现的功能。第二章智能锁开发技术2.1开发工具2.1.1软件开发工具本设计中软件开发部分,使用了Keil5和AltiumDesigner。Keil5是单片机C语言开发软件;AltiumDesigner是原理图设计软件。这两个软件都有十分强大的功能,是电子产品开发过程中必不可少的软件。2.1.2硬件制作工具在智能锁硬件焊接制作时所需工具有:电子剪钳、电烙铁、焊锡、OK线,吸焊器等。2.2技术介绍2.2.1RFIDRFID即无线射频识别技术通过无线电波不接触快速信息交换和存储技术,通过无线通信结合数据访问技术,然后连接数据库系统,加以实现非接触式的双向通信,从而达到了识别的目的,用于数据交换,串联起一个极其复杂的系统[1]。射频识别技术依据其标签的供电方式可分为三类,即无源RFID,有源RFID,与半有源RFID[2],具体如表2-1。表2-1三种RFID产品比较无源RFID有源RFID半有源RFID通信原理电子标签通过接受射频识别阅读器传输来的微波信号,以及通过电磁感应线圈获取能量来对自身短暂供电主动向射频识别阅读器发送信号先利用低频信号精确定位,再利用高频信号快速传输数据供电方式无供电外接电源供电仅对标签中保持数据的部分进行供电感应范围识别距离较短识别距离较远,可在百米外识别根据阅读器的密度不同,感应范围不同产品大小可到厘米级或更小体积较大多部件应用范围公交卡、二代身份证、食堂餐卡等高速公路ETC在一个高频信号所能所覆盖的大范围中,在不同位置安置多个低频阅读器用于激活半有源RFID产品根据这三种RFID产品的特性,可以得出半有源RFID产品不适合电子智能锁的应用,再对有源RFID卡与无源RFID卡的性能比较如表2-2[3]。在这两者进行比较后可以得到最适合智能锁的RFID产品是无源RFID卡片。表2-2有源RFID卡与无源RFID卡的性能比较有源RFID卡无源RFID卡电池一次性电池,无法更换。无非常温度下工作不能能使用寿命使用寿命受到卡使用情况限制,实际使用情况会造成卡寿命不稳定,理想使用寿命为7~10年,但因每卡每天使用的次数及环境不同,实际中,有些卡只能用几个月,有些卡可以使用5年以上,无法控制。系统一致性很好,无源卡的使用年限可以保证10年以上,无需维护。物理特征卡的尺寸大,稍厚,稍重外型小巧,轻,薄,安装方便,适用各种情况使用防拆标签外露无法做到标签防拆功能容易做到标签防拆功能成本较高较低读写距离读写距离比较远可达12米读写距离比较近几十厘米以内读取速度快慢2.2.2红外遥控红外遥控早已经不是什么新鲜玩意,但是红外遥控是一种无线通讯技术,并且可做到不接触控制,这种技术抗干扰能力强,信息传输可靠,不仅功耗低,成本低,还有容易实现等优点,该技术具有抗干扰能力强、信息传输可靠、不仅功耗低、成本低,而且易于实现等优点。它被广泛应用于许多电子设备,尤其是家用电器。几乎所有的遥控设备都使用红外遥感技术。近年来,它也被扩展到电脑和电脑的手机系统中,人们可以通过智能手机遥控家用电器。在一般的红外遥控系统中,主要由发射和接收两部分组成。2.2.3单片机C语言单片机C语言源于C语言,是在C语言基础上发展出来的,在单片机上使用的语言。为了让单片机读懂,需要将编写好的程序进行编译,编译成HEX文件后才能烧录进单片机中。2.3本章小结在本章中,介绍了RFID智能锁开发制作时使用的工具。并对主要使用到的技术:例如RFID技术、红外遥控技术进行了深入的介绍。通过本章可以了解到本设计使用的开发软件是keil5以及AD,主要开发语言是C语言,主要使用到的无线通信技术是RFID技术红外遥控技术。第三章智能锁方案设计3.1智能锁总体方案设计在进行智能锁的开发前,首先要明确目标,本设计的出发点是为了设计一个,有多种开锁方式且使用RFID技术的电子智能锁。所以我的目标有以下几点:(1)RFID接触卡片开锁,实现卡片管理,且通过将卡片写入手机的形式,达成将钥匙“装进手机”的目标。(2)红外遥控开锁(3)蓝牙连接开锁(4)提高电子智能锁运行的稳定性。(5)管理员模式,可以修改密码,增加卡片,删除卡片。3.2硬件设计在本设计中的硬件部分由STC89C52RC单片机、LCD1602液晶模块、RC522射频模块、HC-05蓝牙模块、红外一体接收头等组成。其中RC522射频模块负责读取RFID卡片,并与单片机进行信息交互。而HC-05蓝牙模块负责单片机与智能手机之间的通信。设计先由矩阵键盘输入密码以控制单片机引脚电平来达到开锁关锁。除了通过矩阵键盘输入密码外还有多种开锁方式,比如通过RC522射频模块预先写入RFID卡片,通过使用射频模块读取RFID卡片来进行开锁;或者通过HC-05蓝牙模块与安卓设备连接,通过安卓设备进行遥控开锁;又或者使用红外遥控器,以及通过使用红外遥控器远程输入密码开锁。3.2.1STC89C52单片机介绍STC89C52属于CMOS8位微控制器,其具有8K字节系统可编程Flash存储器。还有具有EEPROM功能,令其在掉电后也不丢失数据。它是是许多嵌入式控制应用系统的选择,STC89C52引脚如下图3-1。图3-1STC89C52RC引脚3.2.2LCD1602液晶介绍液晶显示器普遍出现在日常家用电器中,在制作电子产品时液晶显示模块也是十分常见,在本设计中,将采用LCD1602液晶模块,这个模块是属于字符型液晶显示模块,以一种点阵式的LCD,1602则代表它的显示容量为16×2个字符。在单片机系统中输出元器件选择晶液显示器是因为其显示质量好。液晶显示器在输出时,在点阵中的每一个点得到是否亮起的信号后维持发光,直到收到下一次信号,而阴极射线管显示器则是不断刷新每个亮点会不断闪烁,造成画面不连续,容易让人眼花,阅读效果不好,所以并没有液晶显示器的显示质量好。LCD1602的DDRAM(DisplayDataRAM)就是研究显示信息数据RAM,用来进行寄存待显示的字符识别代码。共80个字节,其地址及相应画面如图3-2所示。图3-2数据地址和屏幕对应的关系DDRAM其实就是电脑的显存,如果我们平时想要在电脑屏幕上显示一句话,很简单只需要使用键盘输入就行,和电脑一样,想在LCD1602上输出字符也需要有输入设备,但是LCD1602总共只有80个字节的显存,所以也不是每一个写在显存上的字符都可以显示出来。LCD1602各引脚借口说明如表3-1:表3-1LCD1602引脚编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极LCD1602液晶模块内部预先写入了11条控制指令,其读写操作皆由对指令编程来实现如表3-2所示:表3-2控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容3.2.3RC522射频模块介绍该模块是用MFRC522芯片为主体设计出的无源RFID读卡集成电路,将复杂电路集成为一个完整模块,集成后仅需8个脚即可连接控制,配合单片机进行开发,是本设计开发首选,而且可以保证模块读卡稳定、读卡感应距离远。因为无源RFID卡片自身没有电源,而只有一个谐振电路,所以需要读卡装置向RFID卡发射电磁波,而这个电磁波的频率需要和RFID卡的频率相同,这样RFID卡内的谐振电路才会产生共振。共振才使得RFID卡片内部电容有电荷,有电荷后才能用这个电荷为RFID卡内的电路提供电压,实现将卡内数据发出或读取读写器的数据。RC522射频模块原理如3-3图所示。图3-3RC522射频模块原理图3.2.4HC-05蓝牙模块介绍在本设计中使用HC-05蓝牙模块与智能手机通信,在分类上它属于串口蓝牙模块。使用它十分方便,几乎无需了解蓝牙部分原理,只需要了解串口如何使用就可以通过此模块使用蓝牙在单片机与智能机之间通信。各引脚接口说明如表3-3:表3-3HC-05蓝牙模块引脚编号引脚名引脚说明1RXD接收端2TXD发送端3AT设置工作模式4VCC模块供电正极5GND模块供电负极3.2.5红外一体接收头介绍红外一体接收头是红外遥控系统中的接收部分,它的最主要功能就是将接收到的光信号转换成电流信号再转换成遥控码,让单片机得到读得懂的数据,从而可以达到相应的功能。如图3-4红外发射及接收示意图展示了红外遥控的过程图3-4红外发射及接收示意图3.2.6智能锁原理图本设计原理图如图3-5使用AltiumDesigner绘制。图3-5智能锁原理图3.3软件设计按下自锁开关开机后单片机系统开始运行,首先初始化中断系统、初始化LCD1602液晶显示、初始化RC522射频模块、初始化EEPROM芯片、调用刷卡识别函数,然后判断锁定标志是否为1,如是1代表三次输入密码错误,则开启锁定报警功能;如锁定标志不为1,则关闭锁定报警模块,判定锁定标志后调用扫描按键函数,判定是否输入正确密码解除锁定报警或是输入功能按键执行相应操作。图3-6主要程序流程3.3.1液晶显示部分代码本部分是液晶显示部分控制代码,通过本部分代码定义了对液晶显示屏的基本操作,例如液晶显示屏显示的位置以及写入指令和数据的方法。#defineyi0x80//第一行的初始位置#defineer0x80+40//第二行初始位置voiddelay(uintxms)//延时函数{ uintx,y; for(x=xms;x>0;x--) for(y=110;y>0;y--);}voidwrite_1602com(ucharcom)//写入指令{ lcd1602_rs=0;//数据/指令选择置为指令 lcd1602_rw=0;//读写选择置为写 P0=com;//送入数据 delay(1); lcd1602_en=1; delay(1); lcd1602_en=0;}voidwrite_1602dat(uchardat)//写数据{ lcd1602_rs=1;//数据/指令选择置为数据 lcd1602_rw=0;//读写选择置为写 P0=dat;//送入数据 delay(1); lcd1602_en=1; delay(1); lcd1602_en=0;}voidlcd_init(){//初始化 write_1602com(0x38);//设置液晶工作模式 write_1602com(0x01);//清显示 write_1602com(0x0c);//开显示不显示光标 write_1602com(0x06);//整屏不移动,光标自动右移}3.3.2射频模块代码通过本部分代码对射频模块进行控制,如果输入管理员密码就进入管理员模式,这个模式下可以对卡片进行删除、保存等操作。进入此模式后按A键进行卡位切换,预先设置了6个空卡位,切换到空卡位上后可以按C键存储卡片;切换到已存储的卡位上按B键可以删除卡片。else {//如果通过矩阵键盘输入管理员密码131420进入管理员模式 if((InputData[0]==1)&&(InputData[1]==3)&&(InputData[2]==1)&&(InputData[3]==4)&&(InputData[4]==2)&&(InputData[5]==0)) { TwoAlam(); Delay400Ms(); TwoAlam(); N=0; chushihua=1; }voiddisplay_id(unsignedcharxdata*SrcBuf){ charxdata*pDisplayChar; unsignedcharxdataTmp,i; pDisplayChar=DisplayBuf; for(i=0;i<4;i++) { Tmp=((*SrcBuf)>>4)&0x0F; if((Tmp>=0)&&(Tmp<=9) ) { *pDisplayChar++='0'+Tmp; } else { *pDisplayChar++='A'+Tmp-10; } Tmp=(*SrcBuf)&0x0F; if((Tmp>=0)&&(Tmp<=9) ) { *pDisplayChar++='0'+Tmp; } else { *pDisplayChar++='A'+Tmp-10; } SrcBuf++; } *pDisplayChar++='\0';//向1602写入数据 if(chushihua==1) {write_1602com(0xc0); write_1602dat('I'); write_1602dat('D'); write_1602dat(current_id+0x30); write_1602dat(':'); write_1602dat(DisplayBuf[0]); write_1602dat(DisplayBuf[1]); write_1602dat(DisplayBuf[2]); write_1602dat(DisplayBuf[3]); write_1602dat(DisplayBuf[4]); write_1602dat(DisplayBuf[5]); write_1602dat(DisplayBuf[6]); write_1602dat(DisplayBuf[7]); write_1602dat(''); write_1602dat('');write_1602dat('');write_1602dat('');write_1602dat(''); }}voiddisplay_no_id(){write_1602com(0xc0); write_1602dat('I'); write_1602dat('D'); write_1602dat(current_id+0x30); write_1602dat(':'); write_1602dat(DisplayBuf_c[0]); write_1602dat(DisplayBuf_c[1]); write_1602dat(DisplayBuf_c[2]); write_1602dat(DisplayBuf_c[3]); write_1602dat(DisplayBuf_c[4]); write_1602dat(DisplayBuf_c[5]); write_1602dat(DisplayBuf_c[6]); write_1602dat(DisplayBuf_c[7]); write_1602dat(''); write_1602dat('');write_1602dat('');write_1602dat('');write_1602dat('');}voidctrl(void){ucharj,i; if(PcdRequest(PICC_REQIDL,&CardRevBuf[0])!=MI_OK)//寻天线区内未进入休眠状态的卡,返回卡片类型2字节 { if(PcdRequest(PICC_REQIDL,&CardRevBuf[0])!=MI_OK)//寻天线区内未进入休眠状态的卡,返回卡片类型2字节 { if(chushihua==1) { read_eeprom_j(current_id); display_no_id(); } return; } } if(PcdAnticoll(&CardRevBuf[2])!=MI_OK)//防重复,返回卡的序列号4字节 { if(chushihua==1) { read_eeprom_j(current_id); display_no_id(); } return; } if(PcdSelect(&CardRevBuf[2])!=MI_OK)//选卡 { if(chushihua==1) { read_eeprom_j(current_id); display_no_id(); } return; } display_id(&CardRevBuf[2]); if(CorrectCont==0&&pass==0) { for(j=0;j<6;j++) { read_eeprom_j(j); if(DisplayBuf[0]==DisplayBuf_c[0]&&DisplayBuf[1]==DisplayBuf_c[1]&&DisplayBuf[2]==DisplayBuf_c[2]&&DisplayBuf[3]==DisplayBuf_c[3]&&DisplayBuf[4]==DisplayBuf_c[4]&&DisplayBuf[5]==DisplayBuf_c[5]) { CorrectCont=1; write_1602com(er); for(j=0;j<16;j++) { write_1602dat(LockOpen[j]); } TwoAlam(); //操作成功提示音 ErrorCont=0; KEY=0; //开锁 pass=1; //置正确标志位 TR0=1; //开启定时 for(j=0;j<6;j++) //将输入清除 { InputData[i]=0; } return; } } }}3.3.3主函数此部分代码为主函数代码,对LCD1602进行初始化、对RC-522射频模块进行初始化、对eeprom进行初始化。然后设置共六个功能键的功能,还设置了蜂鸣器响的模式。voidmain(){ unsignedcharKEY,NUM; unsignedchari,j; P1=0xFF; EA=1; TMOD=0x21; IT1=1; EX1=1; TH0=0;//T0赋初值 TL0=0; TR0=0;//t0开始计时 TH1=0Xfd; TL1=0Xfd; //9600 ET1=0; TR1=1; SM0=0; //设置串口的工作模式 SM1=1; //方式1 REN=1; //允许串口接收数据 ES=1; //串口中断应许 Delay400Ms(); //启动等待,等LCM讲入工作状态 lcd_init(); //LCD初始化 write_1602com(yi);//日历显示固定符号从第一行第0个位置之后开始显示 init_rc522();//射频模块初始化 init_eeprom();//eeprom初始化 read_eeprom(); for(i=0;i<16;i++) { write_1602dat(name[i]);//向液晶屏写日历显示的固定符号部分 } write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示 for(i=0;i<16;i++) { write_1602dat(start_line[i]);//写显示时间固定符号,两个冒号 } write_1602com(er+9); //设置光标位置 write_1602com(0x0f); //设置光标为闪烁 Delay5Ms();//延时片刻(可不要) N=0;//初始化数据输入位数 while(1) { ctrl(); if(key_disable==1) Alam_KeyUnable(); else ALAM=1;//关报警 KEY=keynum(); if(KEY!=0||IrOK==1) { if(key_disable==1) { second=0; } else { NUM=coding(Im[2],KEY); { switch(NUM) {//按键功能 case('A'):if(chushihua==1)//A键在管理卡片模式切换卡位 { current_id++; if(current_id>5) current_id=0; } break; case('B'): if(chushihua==1)//B键在管理卡片模式删除卡片 write_eeprom_jj(current_id) ; break; case('C'):if(chushihua==1)//C键在管理卡片模式存储卡片 write_eeprom_j(current_id) ; break; case('D'):chushihua=0;ResetPassword(); break;//D键在管理模式中重置密码 case('*'):chushihua=0;Cancel(); break;//*取消当前输入 case('#'):chushihua=0;Ensure(); break; //#确认键 default: { chushihua=0; //DisplayListChar(0,1,Input); write_1602com(er); for(i=0;i<16;i++) { write_1602dat(Input[i]); } operation=0; if(N<6) //判断输入密码,小于等于6位进行保存 { OneAlam(); //按键提示音 //DisplayOneChar(6+N,1,'*'); for(j=0;j<=N;j++) { write_1602com(0x80+46+j); write_1602dat('*'); } InputData[N]=NUM; N++; } else //输入密码位数大于6后,忽略输入 { N=6; break; } } } } } } }}3.3.4重置密码通过键盘扫描按键D键可以进行密码重置。具体操作是在开机后按D键,连续输入两次密码,中间不关锁,此时液晶屏上会显示“SetNewWordEnable”。然后可以输入新密码,输入后按D键,液晶屏上出现“inputagain”重复以上动作一次,新密码设置成功。voidResetPassword(){ unsignedchari; unsignedcharj; if(pass==0) { pass=0; DisplayChar(); ThreeAlam(); } else { if(ReInputEn==1) { if(N==6) { ReInputCont++; if(ReInputCont==2) { for(i=0;i<6;) { if(TempPassword[i]==InputData[i]) //将两次输入的新密码作对比 i++; else { //DisplayListChar(0,1,Error); write_1602com(er); for(j=0;j<16;j++) { write_1602dat(Error1[j]); } ThreeAlam(); //错误提示 pass=0; ReInputEn=0; //关闭重置功能, ReInputCont=0; DisplayChar(); break; } } if(i==6) { //DisplayListChar(0,1,ResetOK); write_1602com(er); for(j=0;j<16;j++) { write_1602dat(ResetOK[j]); } TwoAlam(); //操作成功提示write_eeprom(); ReInputEn=0; } ReInputCont=0; CorrectCont=0; } else { OneAlam(); //DisplayListChar(0,1,again); //显示再次输入一次 write_1602com(0x80+40); for(j=0;j<16;j++) { write_1602dat(again[j]); } for(i=0;i<6;i++) { TempPassword[i]=InputData[i]; //将第一次输入的数据暂存起来 } } N=0; //输入数据位数计数器清零 } } }}3.3.5扫描按键函数本段包括了按键输入检测,然后返回按键数值,将输入密码显示时用“*”代替。unsignedcharkeynum(){ unsignedcharrow,col,i; if(flag_REC==1) // { flag_REC=0; if(buff[0]=='O'&&buff[1]=='N') switch(buff[2]) { case'1': return(0x11); break; case'2': return(0x21); break; case'3': return(0x41); break; case'4': return(0x12); break; case'5': return(0x22); break; case'6': return(0x42); break; case'7': return(0x14); break; case'8': return(0x24); break; case'9': return(0x44); break; case'A': return(0x84); break; case'B': return(0x18); break; case'C': return(0x48); break; case'D': return(0x88); break; case'E': return(0x28); break; } } P1=0xf0; if((P1&0xf0)!=0xf0) { Delay5Ms();Delay5Ms(); if((P1&0xf0)==0xf0) { row=P1^0xf0;//确定行线 i=0; P1=a[i]; while(i<4) { if((P1&0xf0)==0xf0) { col=~(P1&0xff); //确定列线 break; } else { i++; P1=a[i]; } } } else { return0; } while((P1&0xf0)==0xf0); return(row|col); //行线与列线组合后返回 } elsereturn0; }//蜂鸣器响一声,输入提示voidOneAlam(){ ALAM=0; Delay5Ms();ALAM=1;}//两声提示,操作成功voidTwoAlam(){ ALAM=0; Delay5Ms();ALAM=1;Delay5Ms(); ALAM=0; Delay5Ms();ALAM=1;}//三声提示,密码错误voidThreeAlam(){ ALAM=0; Delay5Ms();ALAM=1;Delay5Ms(); ALAM=0; Delay5Ms();ALAM=1;Delay5Ms(); ALAM=0; Delay5Ms();ALAM=1;}//输入位数显示,用“*”代替真实数字voidDisplayOne(){ write_1602com(yi+5+N); write_1602dat('*');}3.3.6取消键此部分代码设置了取消键的功能。voidCancel(){ unsignedchari; unsignedcharj; //DisplayListChar(0,1,start_line); write_1602com(er); for(j=0;j<16;j++) { write_1602dat(start_line[j]); } TwoAlam(); //提示音 for(i=0;i<6;i++) { InputData[i]=0; } KEY=1; //关闭锁 ALAM=1; //报警关 operation=0; //操作标志位清零 pass=0; //密码正确标志清零 ReInputEn=0; //重置输入充许标志清零// ErrorCont=0; //密码错误输入次数清零 CorrectCont=0; //密码正确输入次数清零 ReInputCont=0; //重置密码输入次数清零 s3_keydown=0; key_disable=0; N=0; //输入位数计数器清零}3.4本章小结在本章中介绍了本设计中主要的元器件,以及主要程序设计的思路。对本设计的原理图进行了展示,然后展示了液晶显示部分的代码,通过此部分代码定义了对液晶显示屏的基本操作,例如液晶显示屏显示的位置以及写入指令和数据的方法。然后展示了射频模块的代码,通过此部分代码对射频模块进行控制,对卡片进行删除、保存等操作。然后展示了主函数部分代码,此部分代码对LCD1602进行初始化、对RC-522射频模块进行初始化、对eeprom进行初始化。然后设置共六个功能键的功能,还设置了蜂鸣器响的模式。接下来展示了重置密码功能部分的代码,此代码通过键盘扫描按键D键可以进行密码重置。然后展示了扫描按键函数部分代码,此部分代码包括了按键输入检测,然后返回按键数值,将输入密码显示时用“*”代替。最后展示了取消键部分的代码,此部分代码设置了取消键的功能。通过本章可以了解到本设计住主要部分由STC89C52单片机、LCD1602、RC522射频模块、HC-05蓝牙模块、红外一体接收头组成,并且介绍了这些元器件,通过这些模块来实现主要功能;还对代码进行了介绍。第四章智能锁功能实现4.1RFID智能锁硬件制作4.1.1焊接在焊接中,需准备所需元器件,根据原理图将元器件焊接。在焊接中需注意观察元器件不要焊错脚;锡点要适中,不要过大或过小;注意不要让OK线内的铜线露出来以免相邻线路接触导致短路;电烙铁不要停留过长时间,以免元器件过热导致损坏;焊接时应尽量注意美观。将元器件焊接到覆铜洞洞板上。焊接完成如图4-1。图4-1焊接完成4.1.2程序烧录将rfidlock.uvproj进行编译,编译成功如图4-2,编译后得到rfidlock.hex文件。图4-2编译完成图编译完成后得到HEX格式文件,将其使用下载器和下载软件烧录到STC89C52RC单片机中。图4-3单片机下载器4.2密码开锁密码开锁功能是该电子锁的最基础功能,通过矩阵键盘输入密码进行开锁,通过输入管理员密码,进行更改密码等操作,为了使开锁结果更为直观,在本设计中,我用一个发光二极管来代替了电磁锁,即是说,发光二极管亮,便代表开锁成功。如图4-4为智能锁未通电时及发光二极管位置。图4-4智能锁未通电如图4-5按下自锁开关为智能锁通电,进入待输入密码状态。图4-5智能锁通电如图4-3通过矩阵键盘输入正确密码,发光二极管亮起,继电器吸合,开锁成功,液晶屏显示“open”。图4-6密码锁开启按D键重置密码,重复输入两次原密码,液晶屏显示“SetNewWordEnable”,如图4-7.图4-7设置新密码输入新密码后按D键,液晶屏上显示“inputagain”,重复以上动作,液晶屏显示“ResetPasswordOk”,新密码设置完成。图4-8密码设置完成4.3RFID卡片开锁为演示方便,准备了两种外观不同的RFID卡片,如图4-9。(1) 开锁图右边的白卡已经写入到智能锁中,图左边的蓝卡未写入。所以此时可以用白卡开锁,而蓝卡不行如图4-10与图4-11。开锁时将RFID卡片放至智能锁右侧RC522读卡模块上。图4-9RFID卡片图4-10白卡开锁图4-11蓝卡无法开锁(2) 添加卡片.通过输入管理密码进入卡片管理模式,输入密码后可以看到有六个卡位,为ID0-ID5,按A键可以切换卡位,如图4-12,ID2为空,把蓝卡放在RC522模块上按C键将卡片存入卡位中,如图4-13。图4-12ID2图4-13写入ID2(3) 删除卡片图4-9中白卡预先写入在ID3中,进入管理模式,切换到ID3按B键删除卡片,如图4-14,删除后白卡不能开锁,如图4-15.图4-14ID3图4-15白卡无法开锁4.4红外遥控开锁通用红外遥控系统由发射和接收两大部分组成,本设计中,发射部分上的键位如图4-16标注,数字键与矩阵键盘相同,通过使用发射器输入密码即可开锁,与密码开锁部分相同,在此不多展示。图4-16红外发射器4.5蓝牙开锁本设计中,智能锁通过HC-05蓝牙模块与安卓设备连接,连接后,通过安卓APP输入密码即可开锁,与密码开锁部分相同,在此不多展示。安卓设备连接智能锁如图4-17。图4-17蓝牙连接成功4.6本章小结在本章中主要介绍了RFID智能锁硬件部分制作,以及展示了本设计的各个功能的实现,包括了如何使用密码开锁、RFID卡片开锁、红外遥控开锁、蓝牙开锁这些开锁功能的实现;以及RFID卡片的管理、密码修改功能。 结论通过几个月的努力,学习了很多单片机开发的知识。在一开始选题时,我还没意识到这是多么大的一个挑战,不仅是知识储备上的挑战,更是自我管理、自我学习、自我监督能力的挑战。纸上得来终觉浅,终究是要亲自动手做了才知道有多难,在此对这几个月以来的开发学习进行一个总结。虽然所做的项目并没做到自己最开始预期的效果,当然作为一个悲观主义者,在项目开始时,我就做过最坏的打算。在刚开始开发时需要前期自学许多知识,曾一度悔恨为啥自己给自己挖坑,但是事已至此覆水难收,虽然这是一个难题,但也是对我的挑战。在项目开发其中,我有过犯过许多错误,比如在焊接过程中,由于自己没有看清楚元器件,导致我一个10KΩ的排阻焊接反了,后续虽然使用吸焊器将排阻拆下来,但是由于焊接锡点粘住了铜座,导致铜座也被锡焊器一起吸了下来。没有铜座,让接下来的焊接十分困难、无论点多少锡都没有办法焊在洞洞板上,最后智能在电烙铁低温状态时焊接,其过程十分令人心烦。然而心烦没有任何帮助,在有了这次教训以后、焊接中没再出过什么大问题。还有在烧录程序过程中,刚开始时我在单片机上焊了接口进行烧录,刚开始使用了一个串口转usb的模块尝试烧录程序,但是多次烧录失败,我检查了焊点并没问题,实在找不到原因我才打算更换另一种烧录方式。然后我使用了一个成品烧录下载板,才成功烧录。但是祸不单行,由于设计中使用了排针和母座可以将主要元器件进行插拔方便调试,在STC烧录完成后将它插进母座时掰断了一个引脚,当时没有多余的元器件,但是引脚断就无法插进母座的卡口中,好在只有一个引脚断了,于是灵机一动,将断了的引脚上焊上了一节从别的元器件上剪下来的引脚才总算解决了。积沙成塔,一点一滴小小的错误解决完堆积成一个沙丘,当我犯过各种各样的错误后才能不犯错误、少犯错误,每一次失败都是为后来做铺垫,我不会气馁,下一次也会抱着这种心态继续努力,只要成功了,我的付出就是值得的。参考文献[1]李成渊.射频识别技术的应用与发展研究[J].无线互联科技,2016(20):146-148.[2]陆锌渤.浅析射频识别技术[J].中国新通信,2018,20(1):67-68.[3]RFID行业前沿资讯.RFID工作原理(图)及标签分类(按供电方式)[OL],/s/blog_6857047c0101cg5t.html,2013.[4]李洪明.漫谈红外遥控[J].电子世界,2000(01):53.[5]吴媛媛,叶茂森.红外遥控技术浅析[J].广西轻工业,2009(01):72-73.[6]谭浩强.C程序设计(第四版):清华大学出版社,2010年:7-10致谢几个月来,在毕业设计的选题、开题、开发等等过程中,终于感受到了大学终于要结束了,这是我作为学生完成的最后一样作业,虽然不够完美,但已经是我能交出的最好的答卷。在几个月里的时间里,很感谢刘翠莲导师对我的指导,特别是在开题报告的撰写内容与格式的指导上,以及中期报告的完成乃至最后的论文的确定都提供了莫大的帮助。非常感谢刘老师这几个月来的辛勤付出,每次学校的通知安排总是第一时间告知我们,献上感激之情与尊敬之意。也辛苦导师不厌其烦的为我审批、订正。也要感谢老师容忍我总是“拖后腿”,跟不上其他同学的进度。同时也要感谢我电子工程专业的同学,在开发过程中为我提供的指导与帮助。为我牺牲自己的学习时间,拖慢了自己的论文进度,在此向她致谢。

ExcelXP的八则快速输入技巧如果我们在用ExcelXP处理庞大的数据信息时,不注意讲究技巧和方法的话,很可能会花费很大的精力。因此如何巧用ExcelXP,来快速输入信息就成为各个ExcelXP用户非常关心的话题,笔者向大家介绍几则这方面的小技巧。1、快速输入大量含小数点的数字如果我们需要在ExcelXP工作表中输入大量的带有小数位的数字时,按照普通的输入方法,我们可能按照数字原样大小直接输入,例如现在要在单元格中输入0.05这个数字时,我们会把“0.05”原样输入到表格中。不过如果需要输入若干个带有小数点的数字时,我们再按照上面的方法输入的话,每次输入数字时都需要重复输入小数点,这样工作量会变大,输入效率会降低。其实,我们可以使用ExcelXP中的小数点自动定位功能,让所有数字的小数点自动定位,从而快速提高输入速度。在使用小数点自动定位功能时,我们可以先在ExcelXP的编辑界面中,用鼠标依次单击“工具”/“选项”/“编辑”标签,在弹出的对话框中选中“自动设置小数点”复选框,然后在“位数”微调编辑框中键入需要显示在小数点右面的位数就可以了。以后我们再输入带有小数点的数字时,直接输入数字,而小数点将在回车键后自动进行定位。例如,我们要在某单元格中键入0.06的话,可以在上面的设置中,让“位数”选项为2,然后直接在指定单元格中输入6,回车以后,该单元格的数字自动变为“0.06”,怎么样简单吧?2、快速录入文本文件中的内容现在您手边假如有一些以纯文本格式储存的文件,如果此时您需要将这些数据制作成ExcelXP的工作表,那该怎么办呢?重新输入一遍,大概只有头脑有毛病的人才会这样做;将菜单上的数据一个个复制/粘贴到工作表中,也需花很多时间。没关系!您只要在ExcelXP中巧妙使用其中的文本文件导入功能,就可以大大减轻需要重新输入或者需要不断复制、粘贴的巨大工作量了。使用该功能时,您只要在ExcelXP编辑区中,依次用鼠标单击菜单栏中的“数据/获取外部数据/导入文本文件”命令,然后在导入文本会话窗口选择要导入的文本文件,再按下“导入”钮以后,程序会弹出一个文本导入向导对话框,您只要按照向导的提示进行操作,就可以把以文本格式的数据转换成工作表的格式了。3、快速输入大量相同数据如果你希望在不同的单元格中输入大量相同的数据信息,那么你不必逐个单元格一个一个地输入,那样需要花费好长时间,而且还比较容易出错。你可以通过下面的操作方法在多个相邻或不相邻的单元格中快速填充同一个数据,具体方法为:首先同时选中需要填充数据的单元格。若某些单元格不相邻,可在按住Ctrl键的同时,点击鼠标左键,逐个选中;其次输入要填充的某个数据。按住Ctrl键的同时,按回车键,则刚才选中的所有单元格同时填入该数据。4、快速进行中英文输入法切换一张工作表常常会既包含有数字信息,又包含有文字信息,要录入这样一种工作表就需要我们不断地在中英文之间反复切换输入法,非常麻烦,为了方便操作,我们可以用以下方法实现自动切换:首先用鼠标选中需要输入中文的单元格区域,然后在输入法菜单中选择一个合适的中文输入法;接着打开“有效数据”对话框,选中“IME模式”标签,在“模式”框中选择打开,单击“确定”按钮;然后再选中输入数字的单元格区域,在“有效数据”对话框中,单击“IME模式”选项卡,在“模式”框中选择关闭(英文模式);最后单击“确定”按钮,这样用鼠标分别在刚才设定的两列中选中单元格,五笔和英文输入方式就可以相互切换了。5、快速删除工作表中空行删除ExcelXP工作表中的空行,一般的方法是需要将空行都找出来,然后逐行删除,但这样做操作量非常大,很不方便。那么如何才能减轻删除工作表中空行的工作量呢?您可以使用下面的操作方法来进行删除:首先打开要删除空行的工作表,在打开的工作表中用鼠标单击菜单栏中的“插入”菜单项,并从下拉菜单中选择“列”,从而插入一新的列X,在X列中顺序填入整数;然后根据其他任何一列将表中的行排序,使所有空行都集中到表的底部。删去所有空行中X列的数据,以X列重新排序,然后删去X列。按照这样的删除方法,无论工作表中包含多少空行,您就可以很快地删除了。6、快速对不同单元格中字号进行调整在使用ExcelXP编辑文件时,常常需要将某一列的宽度固定,但由于该列各单元格中的字符数目不等,致使有的单元格中的内容不能完全显示在屏幕上,为了让这些单元格中的数据都显示在屏幕上,就不得不对这些单元格重新定义较小的字号。如果依次对这些单元格中的字号调整的话,工作量将会变得很大。其实,您可以采用下面的方法来减轻字号调整的工作量:首先新建或打开一个工作簿,并选中需要ExcelXP根据单元格的宽度调整字号的单元格区域;其次单击用鼠标依次单击菜单栏中的“格式”/“单元格”/“对齐”标签,在“文本控制”下选中“缩小字体填充”复选框,并单击“确定”按钮;此后,当你在这些单元格中输入数据时,如果输入的数据长度超过了单元格的宽度,ExcelXP能够自动缩小字符的大小把数据调整到与列宽一致,以使数据全部显示在单元格中。如果你对这些单元格的列宽进行了更改,则字符可自动增大或缩小字号,以适应新的单元格列宽,但是对这些单元格原设置的字体字号大小则保持不变。7、快速输入多个重复数据在使用ExcelXP工作表的过程中,我们经常要输入大量重复的数据,如果依次输入,无疑工作量是巨大的。现在我们可以借助ExcelXP的“宏”功能,来记录首次输入需要重复输入的数据的命令和过程,然后将这些命令和过程赋值到一个组合键或工具栏的按钮上,当按下组合键时,计算机就会重复所记录的操作。使用宏功能时,我们可以按照以下步骤进行操作:首先打开工作表,在工作表中选中要进行操作的单元格;接着再用鼠标单击菜单栏中的“工具”菜单项,并从弹出的下拉菜单中选择“宏”子菜单项,并从随后弹出的下级菜单中选择“录制新宏”命令;设定好宏后,我们就可以对指定的单元格,进行各种操作,程序将自动对所进行的各方面操作记录复制。8、快速处理多个工作表有时我们需要在ExcelXP中打开多个工作表来进行编辑,但无论打开多少工作表,在某一时刻我们只能对一个工作表进行编辑,编辑好了以后再依次编辑下一个工作表,如果真是这样操作的话,我们倒没有这个必要同时打开多个工作表了,因为我们同时打开多个工作表的目的就是要减轻处理多个工作表的工作量的,那么我们该如何实现这样的操作呢?您可采用以下方法:首先按住“Shift"键或“Ctrl"键并配以鼠标操作,在工作簿底部选择多个彼此相邻或不相邻的工作表标签,然后就可以对其实行多方面的批量处理;接着在选中的工作表标签上按右键弹出快捷菜单,进行插入和删除多个工作表的操作;然后在“文件”菜单中选择“页面设置……”,将选中的多个工作表设成相同的页面模式;再通过“编辑”菜单中的有关选项,在多个工作表范围内进行查找、替换、定位操作;通过“格式”菜单中的有关选项,将选中的多个工作表的行、列、单元格设成相同的样式以及进行一次性全部隐藏操作;接着在“工具”菜单中选择“选项……”,在弹出的菜单中选择“视窗”和“编辑”按钮,将选中的工作表设成相同的视窗样式和单元格编辑属性;最后选中上述工作表集合中任何一个工作表,并在其上完成我们所需要的表格,则其它工作表在相同的位置也同时生成了格式完全相同的表格。高效办公Excel排序方法"集中营"排序是数据处理中的经常性工作,Excel排序有序数计算(类似成绩统计中的名次)和数据重排两类。本文以几个车间的产值和名称为例,介绍Excel2000/XP的数据排序方法。一、数值排序1.RANK函数RANK函数是Excel计算序数的主要工具,它的语法为:RANK(number,ref,order),其中number为参与计算的数字或含有数字的单元格,ref是对参与计算的数字单元格区域的绝对引用,order是用来说明排序方式的数字(如果order为零或省略,则以降序方式给出结果,反之按升序方式)。例如图1中E2、E3、E4单元格存放一季度的总产值,计算各车间产值排名的方法是:在F2单元格内输入公式“=RANK(E2,$E$2:$E$4)”,敲回车即可计算出铸造车间的产值排名是2。再将F2中的公式复制到剪贴板,选中F3、F4单元格按Ctrl+V,就能计算出其余两个车间的产值排名为3和1。如果B1单元格中输入的公式为“=RANK(E2,$E$2:$E$4,1)”,则计算出的序数按升序方式排列,即2、1和3。需要注意的是:相同数值用RANK函数计算得到的序数(名次)相同,但会导致后续数字的序数空缺。假如上例中F2单元格存放的数值与F3相同,则按本法计算出的排名分别是3、3和1(降序时)。2.COUNTIF函数COUNTIF函数可以统计某一区域中符合条件的单元格数目,它的语法为COUNTIF(range,criteria)。其中range为参与统计的单元格区域,criteria是以数字、表达式或文本形式定义的条件。其中数字可以直接写入,表达式和文本必须加引号。仍以图1为例,F2单元格内输入的公式为“=COUNTIF($E$2:$E$4,">"&E2)+1”。计算各车间产值排名的方法同上,结果也完全相同,2、1和3。此公式的计算过程是这样的:首先根据E2单元格内的数值,在连接符&的作用下产生一个逻辑表达式,即“>176.7”、“>167.3”等。COUNTIF函数计算出引用区域内符合条件的单元格数量,该结果加一即可得到该数值的名次。很显然,利用上述方法得到的是降序排列的名次,对重复数据计算得到的结果与RANK3.IF函数Excel自身带有排序功能,可使数据以降序或升序方式重新排列。如果将它与IF函数结合,可以计算出没有空缺的排名。以图1中E2、E3、E4单元格的产值排序为例,具体做法是:选中E2单元格,根据排序需要,单击Excel工具栏中的“降序排序”或“升序排序”按钮,即可使工作表中的所有数据按要求重新排列。假如数据是按产值由大到小(降序)排列的,而您又想赋予每个车间从1到n(n为自然数)的排名。可以在G2单元格中输入1,然后在G3单元格中输入公式“=IF(E3=E2,G3,G3+1)”,只要将公式复制到G4等单元格,就可以计算出其他车间的产值排名。二、文本排序选举等场合需要按姓氏笔划为文本排序,Excel提供了比较好的解决办法。如果您要将图1数据表按车间名称的笔划排序,可以使用以下方法:选中排序关键字所在列(或行)的首个单元格(如图1中的A1),单击Excel“数据”菜单下的“排序”命令,再单击其中的“选项”按钮。选中“排序选项”对话框“方法”下的“笔画排序”,再根据数据排列方向选择“按行排序”或“按列排序”,“确定”后回到“排序”对话框(图2)。如果您的数据带有标题行(如图1中的“单位”之类),则应选中“有标题行”(反之不选),然后打开“主要关键字”下拉列表,选择其中的“单位”,选中排序方式(“升序”或“降序”)后“确定”,表中的所有数据就会据此重新排列。此法稍加变通即可用于“第一名”、“第二名”等文本排序,请读者自行摸索。三、自定义排序如果您要求Excel按照“金工车间”、“铸造车间”和“维修车间”的特定顺序重排工作表数据,前面介绍的几种方法就无能为力了。这类问题可以用定义排序规则的方法解决:首先单击Excel“工具”菜单下的“选项”命令,打开“选项”对话框中的“自定义序列”选项卡(图3)。选中左边“自定义序列”下的“新序列”,光标就会在右边的“输入序列”框内闪动,您就可以输入“金工车间”、“铸造车间”等自定义序列了,输入的每个序列之间要用英文逗号分隔,或者每输入一个序列就敲回车。如果序列已经存在于工作表中,可以选中序列所在的单元格区域单击“导入”,这些序列就会被自动加入“输入序列”框。无论采用以上哪种方法,单击“添加”按钮即可将序列放入“自定义序列”中备用(图3)。使用排序规则排序的具体方法与笔划排序很相似,只是您要打开“排序选项”对话框中的“自定义排序次序”下拉列表,选中前面定义的排序规则,其他选项保持不动。回到“排序”对话框后根据需要选择“升序”或“降序”,“确定”后即可完成数据的自定义排序。需要说明的是:显示在“自定义序列”选项卡中的序列(如一、二、三等),均可按以上方法参与排序,请读者注意Excel提供的自定义序列类型。谈谈Excel输入的技巧在Excel工作表的单元格中,可以使用两种最基本的数据格式:常数和公式。常数是指文字、数字、日期和时间等数据,还可以包括逻辑值和错误值,每种数据都有它特定的格式和输入方法,为了使用户对输入数据有一个明确的认识,有必要来介绍一下在Excel中输入各种类型数据的方法和技巧。一、输入文本Excel单元格中的文本包括任何中西文文字或字母以及数字、空格和非数字字符的组合,每个单元格中最多可容纳32000个字符数。虽然在Excel中输入文本和在其它应用程序中没有什么本质区别,但是还是有一些差异,比如我们在Word、PowerPoint的表格中,当在单元格中输入文本后,按回车键表示一个段落的结束,光标会自动移到本单元格中下一段落的开头,在Excel的单元格中输入文本时,按一下回车键却表示结束当前单元格的输入,光标会自动移到当前单元格的下一个单元格,出现这种情况时,如果你是想在单元格中分行,则必须在单元格中输入硬回车,即按住Alt键的同时按回车键。二、输入分数几乎在所有的文档中,分数格式通常用一道斜杠来分界分子与分母,其格式为“分子/分母”,在Excel中日期的输入方法也是用斜杠来区分年月日的,比如在单元格中输入“1/2”,按回车键则显示“1月2日”,为了避免将输入的分数与日期混淆,我们在单元格中输入分数时,要在分数前输入“0”(零)以示区别,并且在“0”和分子之间要有一个空格隔开,比如我们在输入1/2时,则应该输入“01/2”。如果在单元格中输入“81/2”,则在单元格中显示“81/2”,而在编辑栏中显示“三、输入负数在单元格中输入负数时,可在负数前输入“-”作标识,也可将数字置在()括号内来标识,比如在单元格中输入“(88)”,按一下回车键,则会自动显示为“-88”。四、输入小数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论