论文-拨号式楼宇对讲系统软件部分_第1页
论文-拨号式楼宇对讲系统软件部分_第2页
论文-拨号式楼宇对讲系统软件部分_第3页
论文-拨号式楼宇对讲系统软件部分_第4页
论文-拨号式楼宇对讲系统软件部分_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

摘要楼宇对讲系统是采用小区联网式系统,在各住宅门口及住户家中安装可视对讲系统,以实现对访客验明身份及与住户对讲,住户可遥控开启住宅门,从而有效地防止非法人员进人住宅楼内。只有住户通过钥匙或者分机控制楼道或者住户密码才能开启门锁进入小区内。本课题主要讨论的是以AT89S52单片机为主机与分机AT89C2051通过RS485串行传输协议进行通信,通过C语言设计系统软件,并用软件控制各个功能模块。主机主要接收键盘输入的数据,通过数据总线方式发送到LCD上显示,以及相关提示信息,通过判断主机接收到的是输入房号还是住户密码来进行不同的操作。使用RS485总线向分机发送数据进行呼叫,并由分机反馈的数据决定主机工作状态;分机则通过接收的数据决定是否开启闹铃功能,并实现语音通话,开门锁等动作。在基本楼宇对讲功能实现的基础上,本系统还适当加入了一些容错功能和密码开锁功能。例如分机在未经呼叫的情况下不能开启语音和控制门锁,在呼叫中不能在同一主机上呼叫其他分机,输入不存在房号时显示错误信息等。本论文研究的是拨号式楼宇对讲系统,该形式的对讲系统具有容量大,操作方便等优点。适合高层,多住户居民建筑使用。关键词AT89S52;AT89C2051;C语言;RS485串行传输;LCD;语音通话;密码开锁ABSTRACTBUILDINGTALKBACKSYSTEMISNETWORKEDWITHDISTRICTBUILDINGTALKBACKSYSTEM,INFRONTOFTHEHOUSEANDHOMEOFTHEHOUSEHOLDTOINSTALLVIDEOTALKBACKSYSTEM,INORDERTOACHIEVEVISITORSANDHOUSEHOLDERSOFIDENTIFICATIONANDINTERCOM,HOUSEHOLDERREMOTECONTROLTOOPENTHEDOORTOEFFECTIVELYPREVENTTHEILLEGALVISITORSINSIDETHERESIDENTIALBUILDINGONLYPEOPLEINTHECORRIDORTHROUGHUSINGTHECONTROLKEYORCALLINGEXTENSIONORINPUTINGPASSWORDTOOPENTHEDOORINTOTHEHOUSEHOLDSANDTHEDISTRICTTHEMAINDISCUSSIONTOPICISAT89S52MICROCONTROLLERASTHEHOSTANDAT89C2051ASTHEEXTENSIONSTHROUGHRS485SERIALPROTOCOLTOCOMMUNICATE,THROUGHTHECLANGUAGEDESIGNSYSTEMSOFTWARE,ANDUSETHESOFTWAREFORCONTROLINGTHEOPERATIONOFTHEVARIOUSFUNCTIONALBLOCKSHOSTRECEIVINGDATATHATINPUTFROMKEYBOARD,SENTINGTOTHELCDTHROUGHTHEDATABUS,ANDGETINGRELATEDPROMPTINFORMATION,JUDGINGTHEHOSTRECEIVEDTHEROOMNUMBERORPASSWORDFORDIFFERENTOPERATIONUSINGTHERS485BUSTOSENDDATATOTHEEXTENSIONANDCALLINGTHEHOUSEHOLDER,DECIDINGHOSTSWORKINGCONDITIONBYTHEDATARECEIVEDFROMEXTENSIONEXTENSIONTHROUGHTHERECEIVEDDATATODECIDEWHETHERTOOPENTHEALARMFUNCTIONANDVOICECALLS,OPENLOCKSANDOTHERACTIVITIESTOACHIEVETHEBASICBUILDINGTALKBACKFUNCTIONONTHEBASISOFTHESYSTEMISALSOJOINANUMBEROFFEATURES,FOREXAMPLEFAULTTOLERANCEANDOPENINGTHEDOORUSETHEPASSWORD,ANDEXTENSIONCANNOTOPENTHETALKINGFUNCTIONANDCONTROLTHEHOSTOPENTHEDOORWHENITISNOTCALLEDBYTHEHOST,WHENTHEHOSTTALKINGWITHTHEEXTENSIONTHESAMEHOSTCANNOTCALLOTHEREXTENSIONS,WHILEENTERTHEWRONGROOMNUMBERTHELCDDISPLAYERRORINFORMATIONINTHISISSUE,THESUBJECTISADIALUPTYPEBUILDINGTALKBACKSYSTEM,THISTALKBACKSYSTEMHASTHEADVANTAGEOFLARGECAPACITYANDCONVENIENTOPERATIONSUITABLEFORHIGHANDMULTIDWELLINGBUILDINGUSEKEYWORDSAT89S52AT89C2051CLANGUAGERS485SERIALPROTOCOLTOCOMMUNICATELCDVOICECALLSOPENTHEDOORUSETHEPASSWORD目录摘要IABSTRACTII绪论11系统原理及组成311系统设计指导思想312系统组成及工作原理3121系统结构图3122系统硬件组成及工作原理5123系统控制器端口分配介绍62系统软件设计721主机软件设计7211主程序设计8212键盘程序设计10213显示子程序设计1221424C02存储子程序设计17215主机串口设计2422分机软件设计27221分机主程序设计28222闹铃子程序设计29223语音控制子程序29224开门控制子程序30225分机中断服务程序303系统软件调试3231主机程序调试32311键盘调试32312LCD1602显示调试32313串行口通信调试3332分机程序调试33结束语34致谢35参考文献36绪论智能化住宅小区的建设是21世纪房地产业发展的必然趋势之一。一个完善的智能化安全社区,必须具有便捷、舒适、高档的生活环境,并确保每一个住户的生命财产的安全,基于此本课题主要研究了小区可视对讲系统的设计及施工,以期对提高小区安全管理、方便住户起到积极的作用。起初的楼宇对讲系统功能是非常单一的,只有在楼底下访客按一个按钮呼叫住户,然后住户给访客开启门,这样一个简单的对讲功能,经过几年的发展,随着扁平CRT技术的成熟和CRT成本的下降,黑白可视对讲在高档社区开始普及。楼宇对讲产品进人了第二个高速发展期,大型社区联网及综合性智能楼宇对讲设备开始涌现。这些是属于报警系统可以是独立存在的,但是从降低成本和便于统一安装维护的角度出发,很快这些报警功能和楼宇对讲系统就整合在一起了。实现了联网报警功能,把小区里面每一个单元的单元机通过电脑连接起来,连接管理机,管理员就可以通过拨叫方式通知住户,住户在家里面可以通过一个紧急报警按钮与管理员进行通话,这个联网功能的实现,可以说是楼宇小区智能系统一个重要的一步。在可视系统当中文字信息逐渐也叠加到楼宇对讲系统。楼宇对讲系统技术不断发展,主流产品由可视对讲逐渐替代非可视对讲,显示画面由黑白转变为彩色,由普通的CRT显像管转变为更轻薄的LCD显示屏。但大多数此类产品都为直按式设计,容量受到限制,一般只能容纳2030户左右。随着国土资源的减少,居民用地相对紧张,高层楼宇是未来居民楼的发展趋势。按照一般情况计算一栋30层,每层4户的商住楼,一共是120户,直按式楼宇对讲系统已不适用。拨号式楼宇对讲系统则能够解决这一问题,从一般的设计角度来看,此设计方式最高容量可高达900户之多。众多楼宇系统生产厂商为了节省生产成本与产品开发周期,在楼宇对讲系统容错功能上有所忽视。以前市场上销售的楼宇对讲系统大部分都存在未经呼叫即可开启语音或控制门锁等问题。如果多个分机都开通语音对讲则会产生强烈的信号干扰,形成噪音由主机的语音模块播出,严重影响居民日常生活。还有,当儿童不知情的情况下,对分机进行错误操作,开启楼道门锁,此时发生意外的可能性将大大提高,危及居民的生命和财产安全。随着社会科技的进步和经济的发展,住宅社区在满足场所和空间要求的同时,建立一个数字化,功能综合化和网络化的楼宇对讲系统也逐渐体现在当今房产市场的需求当中。传统的楼宇对讲系统主要是基于模拟信号的,存在着线材使用成本高,视频信号分布带宽低,不利于远距离传输信号等缺点。现在已经是数字化时代,基于互联网技术、宽带技术的设计系统能够很好地克服模拟缺点,实现功能的综合化。而且数码式系统因接线简单,可控户数多而在要求较高的场合广泛应用,系统主机从早期采用标准数字电路控制过渡到现在基本上均采用单片机控制,目前一般均能完成键盘处理、对讲、电控开锁等功能的控制,但是实际应用中可能会遇到需要每户一个可修改的开锁密码;一般要增加机型或修改设计才能实现。本系统介绍一种可编程、高性能的楼宇对讲系统,可以很好地解决这个问题。目前芯片产业的飞速发展使得一些功能更强大,运行速度更快的芯片的价格快速滑落。这些都为设计高性价比的楼宇对讲系统提供了一个很好的契机。本文克服传统模拟系统的不足,设计出了一款数字化的,具有集成度高,体积小等特点的楼宇对讲系统。随着网络技术的飞速发展,小区安防系统的管理也在向网络化方向前进。楼宇对讲系统为了顺应这一需求,也逐渐在系统功能中加入了各种网络连接方式,譬如以太网接口等。早期的8位单片机已经无法满足这一需求,先进高性能的单片机开始被应用在这一系统中,甚至出现了楼宇对讲系统的专门芯片,无需人力重新编写控制程序,直接按照芯片的功能引脚搭建硬件,就能够成为一套完整的产品。随着集成电路技术的飞速发展,高集成化芯片已经问世,届时我们还可以将楼宇对讲系统作为系统芯片中的一个功能模块融入一个更大的高智能化安防系统中,成为整个系统中的一部分而不再独立存在,并与其他安防系统协同工作,使整个系统更加完善,功能更人性化,为人们带来先进的高智能化的生活享受。楼宇对讲系统从普通对讲,发展到黑白可视对讲、彩色可视对讲,目前,功能更趋向于多样化和综合化,与侦烟感知器、瓦斯侦测器、防盗报警器、红外、门磁探头等结合,从而发挥防盗、报警、紧急求助等综合功能。本课题探讨的主要是拨号式楼宇对讲系统的设计开发,功能局限于拨号呼叫与双向对讲,住户密码控制开锁,可视技术不在本论文中进行讨论,只作为简单类型的代表性产品进行研究。1系统原理及组成11系统设计指导思想对讲系统是小区智能化的核心之一,在设计中应遵循以下原则1访客在各单元门口经过相应住户确认后,由住户为其开启单元门方可进入住户进入单元经过门禁系统识别身份,由住户通过分机按动开门键让来访者进入。2通过对讲联网系统,使住户与住户、住户与小区管理部门建立一条内部通讯的通道。3考虑到在整个小区的建设过程中,是整体设计、分期开发建设,小区的安防系统相应的也是总体设计,各系统独立分段施工,整体建成后联网运行。4系统的可靠性,可扩充性和系统可维护性是本系统能否真正实用的关键所在。系统的可靠性包括系统设备的可靠性,信号传输的可靠性,抗人为故障的能力。系统可扩充性包括系统能否逐步扩充用户数量,系统主机容量,传输距离,系统编码能力,内部通信的通话通道数量。系统可维护性是指当系统出现故障时,在最短的时间内找出故障部位,并在不影响整个系统正常使用的情况下更换设备,尽可能不影响其他用户的使用。并确保在发生设备故障、线路故障时不会影响整个系统的运行。5合理的性能价格比,以及系统网络能与小区综合布线融为一体从而减少重复布线和施工成本。12系统组成及工作原理121系统结构图图1楼宇对讲系统结构图1是本文描述的楼宇对讲系统结构图。楼宇对讲系统是家居安防系统的重要组成部分,一个典型的对讲系统是由门口机、用户分机、不间断电源、管理主机和电控门锁等基本部件组成,可以实现楼宇住户与外来人员的对讲管理,以及住宅大厦和社区的集中管理。门口机采用单串口的AT89S52单片机作为主控CPU,每个门口机通过RS485串行总线连接一个管理主机和多个用户分机,读卡器的刷卡信息同样通过串行通信方式发送到主控CPU。利用单片机的外部中断口和定时计数器对AT89S52进行串口扩展,实现门口机与管理主机、用户分机双向串行通信,以及密码开锁单向串行通信的使用需求。图2,图3分别描述主机系统框图和分机系统框图图2主机系统框图图3分机系统框图AT89S52LCD1602显示34按键RS485通信电磁锁器24C02存储光电耦合器继电器RJ45功放功放扬声器语音输出MIC语音输入AT89C2051按键叮咚门铃RS485通信RJ45模拟开关CD4066功放功放扬声器语音输出MIC语音输入122系统硬件组成及工作原理1系统硬件主要组成部分包括单片机、E2PROM外存储器、比较器、键盘及LCD显示器、接口电路、音频放大电路、分机等。主机是楼宇对讲系统的控制核心部分,每一户分机的传输信号以及电锁控制信号等都通过主机的控制,它的电路板采用减振安装,并进行防潮处理,抗振防潮能力极强,并带有夜间照明装置,外形美观、大方。分机是一种对讲话机,一般都是与主机进行对讲,但现在的户户通楼宇对讲系统则与主机配合成一套内部电话系统可以完成系统内个用户的电话联系,使用更加方便,它分为可视分机,非可视分机。具有电锁控制功能和监视功能,一般安装在用户家里的门口处,主要方便住户与来访者对讲交谈。UPS电源它的功能主要是保持楼宇对讲系统不掉电。正常情况下,处于充电的状态。当停电的时候,UPS电源就处于给系统供电的状态。现在楼宇对讲系统,厂家一般不用UPS电池,主要是可视系统耗电太大,一般的小容量UPS电池保证不了使用时间电控锁它的内部结构主要由电磁机构组成。用户只要按下分机上的电锁键就能使电磁线圈通电,从而使电磁机构带动连杆动作,就能控制大门的打开。闭门器它是一种特殊的自动闭门连杆机构。它具有调节器,可以调节加速度和作用力度,使用方便、灵活。2系统简介及工作原理系统的主要操作方式是访客通过主机输入需要呼叫的房间号码,按下确认后主机开始呼叫相应房号的分机,此时分机开始闹铃,通知住户有新访客到来。当住户按下分机的应答键后开始与主机进行语音对讲,对访客情况进行了解,同意访客进入则按下开门键,通知主机开门。如果禁止该人入内,则等待2分钟语音通话结束,主机与分机都自动返回等待状态。系统中设计有容错功能,例如用户输入不存在的房间号码后按下确认键,显示模块会显示ERR输入错误信息。在分机未经呼叫情况下,分机按键不会实现相应功能。单片机在复位后进入正常工作状态后不断扫描键盘,接收到键盘房号编码模式,把房号转换为串行信号,并通过外围电路传输给分机的比较器74LS688中与预设的编码进行比较,若相等则输出控制信号,驱动相应的电子开关打开音频及视频电路,此时单片机通过比较器的状态判断分机是否存在,是否短路,是否开路或空号。如果分机存在,单片机送出振铃信号,分机振铃,如果短路或开路,则发出相应的提示音后关机复位、单片机在振铃期间,不断检测比较器的状态,判断分机是否择机接听,如在设定的时间内无人接听,则自动关机复位;如在设定的时间内分机摘机接听,则单片机停止送出振铃信号,并打开通话电路,在通话时间内,单片机又检测比较器状态,等待开锁指令,收到开锁指令后输出开锁驱动信号,电锁执行开锁动作。这样,就完成了一次工作过程。键盘输入除了房号外,还有密码开锁及更改密码功能,单片机可根据键盘输入的按键判断应该执行什么功能,首先输入的是3位房号或四位房号;若房号之后输入的为号,表示呼叫该房号住户,若输入的是号,表示房号之后是密码;若密码之后还是为则执行密码开锁命令,若为表示密码开锁。表示功能的确认。123系统控制器端口分配介绍1其中主机的AT89S52各个I/O口分配情况如下1键盘扫描电路接P1口,使用P10P16。其中P10到P13连接的是键盘中的行线,P14到P16连接的是键盘中的列线。2显示采用LCD1602,P20P27接数据口,RS接P37,WR接P36,E接P35。3门锁控制继电器的接通与切断是通过P17引脚置高电位或者低电位来控制通断。当P17置1时,继电器接通,置0时继电器断开。4AT89C51的串行口是TTL电平设计,传输距离非常有限。一般楼房都基本在4080米之间。为了能够实现远距离数据通信,串口数据传输设计使用RS485接口标准。将TTL电平信号转变为差模信号进行传输。RS485串行接口不仅传输距离高达1000多米,而且抗干扰能力很强。SN75176上的RXD接P30,TXD接P31,RE与DE一起接到P34为1时发送门打开,接收门关闭;为0时接收门打开,发送门关闭。5用户密码存储芯片24C02的SDA接P33,SCL接P32。6语音放大部分使用LM386作为简单的语音放大。2分机主要控制叮咚芯片的启动与停止控制,接听和开门按键产生的外部中断响应,语音模拟开关的控制,RS485数据信号的接收与发送。1叮咚芯片的启动只需要给芯片的1脚和2脚。这里使用2051的P37引脚控制闹铃芯片的启动。2P32、P33是AT89C2051中INT0与INT1两个外部中断的输入口。这两个引脚分别接应答按键与开门按键。3P10作为控制模拟开关通断状态的控制端,连接到模拟开关芯片上的5、13引脚上,同时控制两路语音模拟信号的通与断。2系统软件设计系统中为了使得各硬件之间能够正常通信,正确运行,有效地完成呼叫、闹铃、开门等基本功能,除了要有合理的硬件设计外,高质量的软件支持也是必不可少的。一个单片机系统的执行效率,工作稳定性与其软件的设计密切相关,软件设计的好与坏直接影响系统的整体运行效果。本设计的程序由两大部分组成,一是主机程序,二是分机程序。主机的程序主要功能是实现对键盘的扫描查询,LCD显示,主机呼叫分机的数据传送,当主机接收到分机发送回来的反馈信息后执行开门或者返回等待状态等一系列的操作。分机程序主要控制的是闹铃以及模拟开关的状态设置,即语音通话和闹铃、等待状态的切换,还有数据的接收与发送处理。本设计中,各种功能都是通过调用子程序来实现。各个中断服务程序都非常短小,功能不同是通过一些标志位供主程序进行判断,跳转。这样的设计是因为在使用中断的程序中,中断服务程序如果过长,执行时间太久,会影响到其他中断服务的运行,造成系统反应迟钝等不良现象,所以我们在设计程序时尽量避免CPU长时间停留在中断服务程序的运算中。使用中断也可以有效的提高系统的工作效率。21主机软件设计主机的主要功能上面已经详细介绍了,这里主要介绍软件的设计方法及设计流程。主机的控制核心是AT89S52;AT89S52提供以下功能8K字节FLASH闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信,片内振荡器及时钟电路。同时,AT89S52可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。引脚定义LCD1602RSP37RWP36ENP3524C02SDAP33/模拟I2C数据传送位/SCLP32/模拟I2C时钟控制位/RS485RTP34OPENP17KEYCODE1/在按号键前纪录房号(用于修改该房号密码)/KEYCODE2/纪录原始密码/KEYCODE/纪录24C02中读取的数据/ROOM/转换后的分机地址(房号)/K20/按键标志位,用于识别号按键次数/K10/纪录按键值/211主程序设计主程序主要是完成各模块的综合操作,完成主机的整体功能。主程序的功能主要是对内存进行分配,对各个中断源,定时器等工作方式的初始化。初始化完成后则开始对需要判断的标志位进行循环判断,等待中断。当标志位发生改变时则调用相应的子程序,子程序运行结束后又重新返回循环判断等待。在主程序中要用到一个串口中断,主要是用于主机接收到数据后响应此中断,并调用接收数据比较子程序。中断源入口设置好后,程序要对各个数据缓冲区清空。将用户的密码存储在24C02中,输入房号加密码,如果与24C02中存储的相同,打开门锁。如果输入房号加原密码匹配并得到新密码存储到24C02中覆盖旧密码,显示密码修改成功。主机接收开锁命令,发送呼叫通话命令。获得按键值,并判断按键值的作用,是直接呼叫用户、密码开锁还是修改密码。并完成各模块的初始化,包括LCD1602初始化,串口初始化,24C02初始化。当来访者呼叫住户时将房号地址通过串口发送出去,等待与地址相同的分机发回的数据。判断是否开锁。等待过程中加入按键扫描,当等待过程中接受到时,主程序返回,重新等待来访者。主程序流程图如图4。图4主程序流程图开始LCD1602初始化串口初始化LCD清屏,开闪烁24C02初始化按键扫描,读取按键值是否按键是键K20键K21KEYCODE1K1,清空K1,K2否是显示房号KEYCODE1键K22KEYCODE2K1是KEYCODE2KEYCODE串口发送KEYCODE1(房号)LABE1读取24C02中KEYCODE1的密码KEYCODELCD显示KEYCODE10X50SBUF0X55SBUF等待REC1是否OPEN1显示SUCCESS延时5SOPEN0LCD清屏OPEN0显示ERRORKEYCODE2KEYCODE将KEYCODE3存储到24C02KEYCODE1位置中修改密码成功显示SUCCESS显示ERROR是否否是LABE1否OPEN0退出是KEY为否是212键盘程序设计键盘查询程序的运行结果将决定程序运行的下一个方向,决定主机的不同操作,所以此程序段在主机程序中显得尤为重要。由于键盘通常进行排列成矩阵格式,因此可以用硬件或软件方法对行、列分别进行扫描查找按动的键。常用的方法有线反转法、扫描法等。扫描法识别按键分两步进行第一步,识别有无按键按下;第二步,若有键按下,识别出该键。具体办法如下识别键盘有无按键按下方法让所有列线均置为0电平,检查各行线是否有变化,如果有变化,则说明有键被按下,如果没有变化,则说明无键被按下。识别具体按键的方法逐列置零电平,其余各列置为高电平,检查各行线电平的变化,如果某行电平由高电平变为低电平,则可确定此行此列交叉点处的按键被按下。扫描法要逐列扫描查询,若被按下的键处于最后一列时,要经过多次扫描才能最后获得此按键的行列值。线反转法则很简练,无论被按键处于第一列或是最后一列,均只需两步便能获得按键的行列值。第一步将行线编程为输入线,列线编程为输出线,并使输出线输出为全零电平,则行线中电平由高到低所在行为按键所在行。第二步与第一步相反,将行线编程为输出线,列线编程为输入线,并使输出线输出为全零电平,则列线中电平由高到低所在行为按键所在列。综合一、二两步的结果,可确定按键所在行和列,从而识别所按的键。该方法的优点是非常简单适用。综上两种方法的介绍,选择线反转法。键盘是使用排成4行3列的12点阵;把这两组4位和3位的行列线分别连到主机单片机的控制引脚上(其中行线接在P10P13上,列线接在P14P16上)。点阵上的键一旦被按动,该点行列的信号就可以被接通。首先向行送全1,再对列送全0。结果行线上凡有键按下的位置,原来的1被列送来的0所代替,记录下相对应的行寄存器的3位信息。反过来,把列送全1,再对行送全0,于是对应列上有键按下的线便变为0,再把列上的信息送到另一寄存器并记录下来。把行列两次记录下的信息拼成1个16位数据,即可确定按下键的位置。如果16位数据中的0不止2个,则说明重键,可以再做一遍。从映射表和按键数值表中获取按键数值,首先按上述细节将行寄存器与列寄存器中的数据相加组成16位数与映射表中的数据比较得到第N个数据相等。再从按键数值表中获得第N个数据的值,即为设定的按键数值。图5按键程序流程图按键子程序入口行置高电平,列置低电平。即P10X0F读取P1口行值,是否有行值被拉低是行置低电平,列置高电平。即P10X70延时4MS去抖再读取行值存于KEYSCAN0中KEYSCAN0P1按键数值表CODEUCHARKEYVALUE1,2,3,4,5,6,7,8,9,10,0,11213显示子程序设计本设计中采用LCD1602带字库的液晶屏进行显示。1602字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,分为上下2行,每行显示16个字符。而本功能也是本设计系统中的核心部分,在设计、调试是都是通过本模块的显示来判断所需的功能是否实现。同时本模块的时隙,指令都有特别的要求。所以在下面做详细的介绍。如表1所示为1602的引脚。在连接到单片机是特别要注意数据口的顺序以便操作。表1管脚功能说明引脚符号功能说明1VSS一般接地2VDD接电源(5V)3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平1时进行读操作,低电平0时进行写操作。6EE或EN端为使能ENABLE端,下降沿使能。7DB0底4位三态、双向数据总线0位(最低位)8DB1底4位三态、双向数据总线1位续表19DB2底4位三态、双向数据总线2位10DB3底4位三态、双向数据总线3位11DB4高4位三态、双向数据总线4位12DB5高4位三态、双向数据总线5位13DB6高4位三态、双向数据总线6位14DB7高4位三态、双向数据总线7位(最高位)(也是BUSYFLANG)15BLA背光电源正极16BLK背光电源负极如表2所示为不同指令的设置。即1602的主要11条指令对应的命令字。表21602液晶显示器内部共有11条控制指令序号指令RSR/WDB7DB6DB5DB4DB3DB2DB1DB01清显示00000000012光标返回0000000013置输入模式00000001I/DS4显示开/关控制0000001DCB5光标获字符移位000001S/CR/L6功能设置00001DLNF7设置字符发生存储器地址0001字符发生存储器地址8设置数据存储器地址001显示数据存储器地址9读忙标志或地址01BF计数器地址10写数据到CGROM或10要写的数据内容DDRAM续表211从CGROM或DDRAM读数据11读出的数据内容1602液晶显示器的读写操作、屏幕和光标的操作都是通过指令编程来实现的,下面对表3中的一些包含不同位指令的说明指令3光标和显示模式设置。I/D为光标移动方向,高电平右移,低电平左移;S为屏幕上所有文字是否左移或者右移标志,高电平表示有效,低电平则无效。指令4显示开/关控制。D为控制整体显示的开与关设置,高电平表示开显示,低电平表示关显示;C为控制光标的开与关设置,高电平表示有光标,低电平表示无光标;B为控制光标是否闪烁设置,高电平闪烁,低电平不闪烁。指令5光标或字符移位。S/C为高电平时移动显示的文字,低电平时移动光标。指令6功能设置指令。D、L取高电平时为4位总线,低电平时为8位总线;N取低电平时为单行显示,高电平时双行显示;F为低电平时显示57的点阵字符,高电平时显示510的点阵字符。指令9读忙信号和光标地址。BF为忙标志位,高电平表示忙,此时显示器不能接收指令或者数据,如果为低电平表示不忙。图61602LCD的读操作时序图71602LCD的写操作时序1602LCD的读写操作时序分别如图6和图7所示,根据这两个图归纳出的基本操作时序表,见寄存器选择控制表3。如表3所示为引脚RS、RW不同的组合时对应的功能。表2寄存器选择控制表RSRW操作说明00写入指令寄存器(清除屏等)01读BUSYFLAG(DB7),以及读取位址计数器(DB0DB6)值10写入数据寄存器(显示各字型等)11从数据寄存器读取数据注关于EH脉冲开始时初始化E为0,然后置E为1,再清0。BUSYFLAG(DB7)在此位未被清除为0时,LCD将无法再处理其他的指令要求。注数据指针设置数据首地址为80H,所以数据地址为80H地址码027H,4067H。图81602的内部显示地址图9LCD1602显示流程图显示子程序入口定义开始显示地址向数据端口送要显示的字符数据确保在0127的CGROM字形码范围内显示。纪录显示字符数据的个数I延时确保显示的字形码大于0X32,将要显示的字符转换成ASCII码。09加0X30,大于9的加0X37判断I160/设置定时器1工作方式2SCON0X50/串口工作方式1PCON0X00TL10XFDTH10XFD/8位自动重装TR11/定时器启动EA1ES1/串口中断允许图20串口初始化流程图(2)RS485串口数据发送与分机地址生成算法通信作为本设计中的核心技术,是多机系统协同工作能否稳定的决定性因素。因此RS485串行通信的使用显得尤为重要。RS485总线将TTL电平信号调制为差模信号发送出去,提高了传输速率,加强了抗干扰能力。RS485是以双向半双工的方式实现双机通信。在AT89S52发送或接收数据前,首先将SN75176的发送门或者接收门打开。在主机中的RT端(P34)1时发送门打开,接收门关闭;RT端0时接收门打开,发送门关闭。在双机通信时一定要保证发送端的发送门打开,接收端的接收门打开。如此才能稳定,准确地收到数据。在本设计中,多机通信是重点。多机通信是在双机通信基础上扩展出多个下位机,使用总线进行数据传送。多机通信与双机通信的区别在于,每个分机都具备一个分机地址。只有通过这个地址才能确定数据应该由哪一台分机接收。在楼宇对讲系统中,分机数量是相当多的。分机地址的编制需要详细讨论。本设计中为这个问题设定了一个分机地址生成程序段。地址生成程序的算法其实非常简单,通过对输入的键值进行分析比较可以发现。串口初始化入口选择定时器1,工作方式2设定串口工作方式2(10位异步收发)设置SMOD串行口波特率的倍增位为08位数据自动重装定时器1启动(TR11)串口中断允许(ES1)总中断允许(EA1)初始化退出房间号是0007,楼层号可以编到0031,31层每层7个住户足够当今住宅楼的使用。为了便于操作将房间号与楼层号组成的住户房号转换成一个字节的十六进制进行操作。转换方法是将房间号放在一个字节的低3位,楼层号放在一个字节的高5位。得到的16进制数作为该房号对应的分机地址。通过串口将该地址数据发送到总线上,这时所有的分机都接收到同样的地址。分机都开始比较接收到的数据是否与本机的地址相等,相等则执行下一步程序,不相等则丢弃地址数据返回等待状态。还用该地址作为24C02存储住户密码的地址。数据的发送相对来说是比较简单的。只要将SN75176芯片的发送门打开,将要发送的数据赋值到SBUF中就可发送数据了。因为串口的中断请求源是允许的。当数据发送完毕后会产生中断标志,CPU会跳转到串口中断服务程序中,而主机的串口中断服务是为接收数据而设计的。为了阻止这一情况的发生,在中断中只判断RI的值是否为1,如果不为1则马上退出中断,以此区分接收还是发送数据完毕。(3)串口中断服务程序中断服务子程序是在CPU接受到中断请求后,停止当前运行的程序,转移到中断服务子程序中运行。串口中断服务程序主要功能是处理CPU接到分机发送回来的命令数据而设立的。当主机呼叫分机结束后,程序把主机的串口控制寄存器中的REN位置1,并且将SN75176的接收门打开,此时主机处于接收数据状态。主机接收到分机发回的数据后,会硬件置1串口接收完毕中断标志RI。主程序自动跳转到串口中断程序入口执行命令。这时为了与发送完毕中断有所区分,加入了判断RI标志是否为1的命令,RI为0则退出中断;RI为1则把REC标志位置1,并退出中断。REC为1时转到主程序中处理,CPU将SBUF中接收到的数据保存到全局变量RDATA中。将变量与主机预设的开门数据比较是否相同。相同则将OPEN端置1并延时5秒钟,然后再清零OPEN。这里的延时是考虑到继电器的闭合与断开间隔不能太短。如果这个OPEN置0置1的间隔太短,会导致继电器闭合后无法断开。造成的后果是电控锁将一直处于开锁状态,这是绝对不允许的。因此加入了5秒软件延时。如果变量与主机预设的开门命令不相同则将OPEN保持清零。选择OPEN为1时开锁,是考虑到当单片机因为故障或其他原因不工作时,单片机的引脚是低电平,这样会使门锁一直打开,这时只能是住户通过钥匙或请工作人员修护才能打开门锁。OPEN为1时,只有单片机在工作,且给控制引脚高电平时才打开门锁。这样做只是为楼宇对讲系统的实际意义考虑。主机和分机同时设定开门数据和保持关门数据;开门数据设定为0X55;关门数据设定为0X50;通过串口接收到的数据与上述数据比较,得到开锁或者保持关锁信号。加上0X50的设定是因为,当房主拒绝给来访者开门时,分机发送这个数据,主机接收到这个数据时不再等待分机发送数据的接收,跳到键盘扫描,等待下一个来访者。图21串口中断程序流程图22分机软件设计分机程序主要实现的功能是在接收到本机地址后自动产生10次叮咚闹铃,闹铃结束后,如果无人应答则返回等待状态。如果有应答或者开门键按下则分别响应两个按键对应的中断服务程序。应答按键按下后需要停止叮咚闹铃并开启模拟开关,使主机与被呼叫分机的语音信号导通,通话时长为2分钟。在此时间内如果不按开门键,则自动关闭模拟开关;如果再次按下应答按键,表示住户不愿给来访者开门。发送结束呼叫命令并返回主程序等待下一次呼叫。若开门键按下后则调用串行数据发送程序,将开门信号发送给主机,通知主机对门锁继电器进行动作。需要提到的是,分机中的两个外部中断以及串口中断都没有设置中断优先级,三者处于同一优先等级。分机中标志位定义如下所示RING闹铃标志位SOUND语音标志位SOUND2应答允许标志LOCK开锁标志位LOCK2开锁允许标志变量定义串口中断入口清空RI接收标志RI1主机读取SBUF中的数据,保存到RDATA置REC1串口中断返回是否EXADDR分机地址存放的变量EXRDATA分机串口接收到的数据0X55开锁命令0X50保持关锁命令常用的输入输出引脚定义DDONGP37/叮咚芯片控制端/TALKP10/模拟开关控制端/RTP17/SN75176接收发送状态控制端/221分机主程序设计与主机相同的是,程序开始运行时都需要对缓存,各个标志位清零,串口的工作方式进行设定,打开中断源,具体数据的设定等初始化操作。初始化操作结束后则是循环判断三个标志位,决定是否调用对应的子程序。RING,SOUND,LOCK这三个标志位的初始值都为零,当对应的中断请求源响应后则将其置1。以此控制程序运行方向。分机程序中同样采用避免中断服务程序过长的设计理念。把所有子程序都定义在中断程序之外进行。这样可以防止两个中断源都需要响应时,先响应的中断还没有执行完毕,后一个中断必须等待前一个中断程序结束后才得到CPU的处理。虽然51单片机中给中断源设置了优先级,但是只有两层优先级嵌套,对于3个以上的优先级处理就显得不够用了。所以我们把所有中断服务程序的主干部分都移动到主程序来执行,这样不管是哪一个中断源向CPU提出请求都会及时得到响应。两个外部中断与串口中断相互之间都可以相互影响。因此在中断响应后我们只对前面定义的几个标志位进行控制,然后马上退出中断。由主程序来选择调用子程序实现相应功能。此处外部中断源使用的是电平触发方式。图22分机主程序的流程图222闹铃子程序设计闹铃子程序主要是对模拟开关进行控制,将DINGDONG芯片的1、2脚接通就能产生DINGDONG声响,当分机串口接收到分机房号数据时DDONG置1将模拟开关打开呼叫住户,当有应答时DDONG置0关闭声响,当无应答时延时50S返回主程序,保持等待状态。223语音控制子程序该程序段非常简单,只需将TALK置1即可打开两路语音模拟信号,通话开始后,当主机按下开锁键或拒绝开锁,都置TALK为0,关闭语音通话模拟开关,并跳回主程序。224开门控制子程序开门动作是需要通过主机来执行的。所以分机要让主机控制门锁时,需要发送开门命令给主机。前面提到RS485传输是半双工模式,当主机呼叫分机结束后,串口控制寄存器中的REN被置1,并且RT端为低电平,使得主机处于接收数据状态。所以这时分机只需将SCON赋值为0X50(串口工作方式1),将RT端置1,就可以发送开门命令(0X55)给主机,发送完毕后返回主程序等待,当住户拒绝开门或无人应答时分机发送数据0X50到主机,用于操作门锁,并使主机重新接受来访者。225分机中断服务程序分机中断主要是两个外部中断与串口中断,每个中断响应后都将对应的标志位置1,并将需要停止的子程序运行标志位置0。外部中断0对应的是应答按键。响应该中断后,中断服务子程序将RING与LOCK清0,停止叮咚闹铃。SOUNDSOUND1,返回主程序后,主程序判断各个标志位,当判断SOUND为1时,转向通话子程序;SOUND为2时,表示住户挂机不允许来访者进入。外部中断1对应的是开门按键。响应该中断后,中断服务子程序将SOUND与RING清零,LOCK置1。返回主程序后,主程序判断各个标志位,当判断LOCK为1时,转向开门子程序。串口中断对应的标志位为RING,当串口接收到数据,并比较与本机地址相同时,直接将RING置1。返回主程序后,通过标志位判断,直接转向闹铃子程序,同时将应答与开锁允许标志置0。为了能够提高中断响应速度,并马上执行对应中断的子程序,程序需要从之前运行的其他子程序的软件延时中跳出。为此我们在每个软件延时的最里层嵌套中加入了判断标志位语句,每隔两个机器周期就判断一次对应子程序的允许运行标志位,如果被清0就马上退出延时程序,并返回主程序。主程序中还设定了两个特殊标志位SOUND2与LOCK2。这两个标志位分别使用在语音与开门子程序中。他们的设立是为了防止分机在没有经过主机呼叫,任意按下应答键或者开门键就可以执行对应操作。特别是应答按键就更需要注意这方面的问题。如果两台分机同时开启模拟开关,在语音信号线上就会产生强烈的干扰,无法进行语音通话。在语音和开门子程序的起始位置,先判断SOUND2或者LOCK2是否为1。如果不为1,则说明分机是在未经呼叫的情况下被按下按键。不能对该中断进行响应。只有当分机被主机呼叫后,在串口中断服务程序中将这两个标志位才置1。在这种情况下才对外部中断完成响应。图23分机串口中断服务程序流程图串口中断服务入口清RI0,读取串口接收到的数据(EXRDATASBUF)RI1EXADDREXRDATARING,SOUND2,LOCK2置1中断返回是否是否3系统软件调试软件调试的主要手段是使用仿真器在实验电路上运行程序,及时发现错误。或者对软件的算法进行修改。由于实验条件有限,调试时只是观察各模块的功能是否可以实现,通过引入LCD、LED等便于观察的外围电路来判断程序是否正常运行。起初各模块程序的设计都是单独进行的,当个模块的程序调试成功,达到所要的功能后,将所有模块程序整合起来进行调试。以使各模块能协调工作、互不干扰,系统能正常工作并完成所有预设功能。下面的介绍主要说明软件编译时遇到的问题及解决方法。31主机程序调试311键盘调试起初考虑使用键盘与主机串口通信来获得键值,就是键盘单独使用一个小单片机控制,以便节省主机的引脚。但是考虑到主机串口要与分机进行通信,最后还是使用阵列法获得键值。开始时定义了三个无符号短整型变量KEYCODE1,KEYCODE2,KEYCODE3分别纪录房号、旧密码、新密码。但是编译总是出错,错误代码是L107ADDRESSSPACEOVERFLOW。查询很多资料这种定义都没有什么问题。在OPTIONSFORTARGET中的TARGET目录下的MEMORYMODEL改为INPDATA或XDATA程序编译都没有任何问题,但是这样改后会影响程序的运行速度,因为程序选择了外部存储空间。为了避免这种问题只将KEYCODE1,KEYCODE2,KEYCODE3这三个变量定义为XDATA型的,程序编译可以顺利通过,通过LCD1602显示可以得到预设的正确键值。最后在程序整体优化之后将XDATA去掉,程序也能正常编译,RAM中的存储空间足够。312LCD1602显示调试测试LCD显示,通过让它分行、分页显示不同的字符,都能正常的显示。使用键盘测试时显示的键码值是乱码,检查发现测试时都定义的是字符型,并且LCD带字库,所以可以直接显示。显示键码是没有经过任何处理直接送到了LCD中出错。修改只需将的到键码值转换成相应的ASCII码,09加上0X30,其他的加上0X37,再送LCD显示就可以得到正确的键码值了。313串行口通信调试作为本系统的核心技术,通信的调试也是本设计的重点,稳定的通信才能够使得系统正常运作。我们考虑先不要将串口数据挂载到RS485接口上,直接单片机对联,把这一步通信调试正常后再接入RS485电路。事实证明这样的做法是正确的,因为就在直联的情况下,我们使用两个仿真器进行通讯调试,使用了4个小时时间都没能使接收机收到数据。在这个过程中,我发现当主机的REN置1后,由主机给分机发送数据,这时SCON中的RI和TI同时被置1。主机中的REN置1的原因是为了让主机能够接收分机反馈回来的数据,这个现象比较特殊。为此我们提出了疑问,是不是当主机发送数据时,REN位必须清0呢经过修改主机的串口控制寄存器的值,屏蔽REN位,再次发送数据给接收机时。接收机产生了串口中断,RI标志位置1,SBUF中的数据。与主机发送的数据相同。直联通讯调试成功之后RS485的调试比较顺利,只是在发送数据前多加一条指令控制发送接收门的状态,没有出现过数据丢失的情况。32分机程序调试分机接收数据后响应中断并启动闹铃,这时按下应答键则会打开语音开关。在这里发现了问题,应答按键的响应不够灵敏,有时需要按很长时间或者是连续按好几次才能中止闹铃,并打开语音。检查应答子程序后找到了问题根源在闹铃开始后分机CPU就进入了软件延时阶段,在软件延时程序中需要时刻判断闹铃标志位的状态,这条指令应该是放置在软件延时程序嵌套中的最里层。可是运行的程序中,该指令放置在第二层嵌套中。如此的话,经过计算是每400MS判断一次RING标志位,所以有时按键按下时,需要等待很长一段时间CPU(中央处理器)才会处理应答中断。我将判断RING标志位的命令移动到最里层嵌套中后,按键响应比较正常。但是因为分机中要处理的中断比较多,使用延时占用的CPU的资源大,不利于CPU的利用率,所以,后来我使用定时器0产生延时,无人应答时延时50S退出延时。分机在未经过主机呼叫,禁止按键功能有效这一功能设置,是在调试过程中才考虑到,并融入到分机程序中的。起初没有设定SOUND2,LOCK2这两个标志位,在实际运行中发现当两台分机同时打开应答功能时,语音系统会产生很大的啸叫声。还有,当按下开门键时,主机的喇叭会出现“嘀”的声音,并且无法使主机的门锁控制电路动作。为了解决以上两个问题加入

温馨提示

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

评论

0/150

提交评论