版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要本文介绍了一种以AT89S51单片机设计的医院病房无线呼叫系统。该系统由单片机系统、无线收发系统、功能开关、1602液晶显示器、以ISD4004语音芯片为主的语音系统等单元电路组成。该系统所用到的无线收发系统采用315无线收发模块的PT2262和PT2267编解码芯片,利用单片机的串行半双工通信来实现。它的核心控制器采用价格低廉,性能可靠的单片机。该系统主要工作原理是分机按键呼叫,主机声光报警,同时显示呼叫的号码,主机按键可回复。研究说明该系统使用方便、快捷、平安可靠,可应用于医院、茶庄、KTV、餐厅等领域。在市场经济体制中,尤其在效劳性的行业中,更省人、省钱、省心,更能提高企业效率,提
2、高效劳形象,带来更好的经济效益,可作为电子产品进行开发研制,具有很好的推广价值。关键词:单片机技术 无线发射和接收 无线呼叫系统 AbstractThis paper introduces a SCM(single-chip microcomputer) ATMEL AT89S52 MCU as a wireless calling system in hospital wards. This system consists of SCM system, wireless transceiver system, the functional switch, 1602 LCD, and by t
3、he main of voic ISD4004 as a voice systems unit circuit etc. What the use of the system is the wireless transceiver system which invlves a wireless transceiver module 315 of the PT2262 and PT2267 codec chip, and brings about the SCMs half-duplex communication. The core controller optionaled SCM with
4、 low price and reliable performance. The call ext press then the host sound-light alarm, display the call numbers at the same time and at last the host give a reply by press the button is the main working principle of the system. The study shows that this system has the characteristics of easy to su
5、e, fast, safe and reliable. And it can be used some social fields such as hospital, tea house, KTV, restaurant, etc. In the market economic system, especially in the service industry, Using it that can be more saving staffs, money as well as trouble. What more it can improves the companys efficiency
6、, enhances the image of services, and brings economic benefits. So it can be used as electronic product to research and development, In my opinion, it has a good value of promotion.Key word : SCM(single-chip microcomputer) Transmit and receive wireless The Wireless Calling System 目录摘要.Abstract.一、绪论.
7、1 (一)设计任务.1二设计要求.1三功能简介. .1.四参考文献.1二、系统总体方案.2三、硬件设计.2一 AT89C52单片机介绍.2.3.3 3.AT89C52管脚说明.4.6.6.7.8.8.8二LM016L显示屏.9三报警电路的设计.10 四键盘模块电路设计.11四、 系统软件的设计.11一程序设计简要.11二系统的工作流程.12三软件设计.13 五、 程序调试与分析.13致谢.14总结.15附录 源程序代码.16 一、 绪 论一设计任务 本次设计主要是设计一个单片机控制的病房呼叫系统。利用AT89C51结合显示电路,LED数码管以及按键来设计。在设计时,我们应将软硬件有机地结合起来
8、,使得系统能够正确的反响病人的呼叫并使效劳台能够回应。二设计要求设计一个可容64张床位的病房呼叫系统。要求每个床位都有一个按钮,当患者需要呼叫护士时,按下按钮。此时护士值班室内的呼叫系统板上显示该患者的床位号,并振铃。当护士按下“响应键时,取消当前呼叫。三 功能简介:临床求助呼叫监护是传送临床信息的重要手段,病房呼叫系统是病人请求值班医生或护士进行诊断和护理的紧急呼叫工具,可将病人的请求快速传送给值班医生或护士,并在值班室的监控中心电脑上留下准确完整的记录,是提高医院和病室护理水平的必备设备之一。呼叫系统的优劣直接关系到病员的安危,历来受到各大医院的普遍重视。它要求及时、准确、可靠、简便可行。
9、为此,我们采用单片机AT89C52为系统核心,配以键盘电路模块和LM016L屏LCD电路模块实现病人呼叫(监护)系统的设计。四参考文献1 张培仁,张志坚,高修峰.十六位单片微处理器原理及应用.北京,清华大学出版社M.2005: 46492 田会方,吴兴强.基于LabVIEW与凌阳SPCE061A实现串口数据采集J.微计算机信息.2006:6:2.22253 北京比高科技公司. BC7281B中文技术手册. 2002(6)4 北京铭正同创科技.MT22G06B彩屏LCD模组简要介绍.2006(12)5 张立才.基SPCE061A的多功能信号发生器设计实现J.微计算机信息.2004:20:3.33
10、35二、 系统总体方案在本系统中,我们采用单片机AT89C52为核心的系统主要包括2个局部:数据采集和数据的输出,数据的输出用来进行呼叫,编码使用单片机完成,数据采集负责接收分机发来的信号,并进行解码、显示该患者的床位号,并振铃,主机上设有键盘取消当前呼叫其实现结构框图如图1所示。AT89C52 键盘喇叭显示图1 病人呼叫系统框图 将由采集到的键值经过到单片机AT89C52中,通过简单的点亮呼叫病号对应床号灯和病区内的警示灯,然后通过P1口把相关信息传送到LM016L屏显示。同时报警警示灯闪烁、报警声响起。医疗人员可以通过控制键盘操作,完成呼叫响应和信息查询等监护工作。 三、 硬件设计一 AT
11、89C52单片机介绍 在众多的单片机系列中,AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系列可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,也适用于常规编程。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89C52为众多嵌入式控制应用系统提供高灵活、超高效的解决方案。 AT89C52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,3个16位定时器/计数器,一个响亮2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT8
12、9C52可降至0HZ静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89C52单片机为很多嵌入式控制系统提供了一种灵活性高且廉价的方案。故此选用AT89C52单片机。如图3-1所示,为AT89C52的硬件结构图。AT89C52单片机的内部结构与MCS-51系列单片机的构成根本相同。CPU是由运算器和控制器所构成的。运算器主要用来对操作数进行算术、逻辑运算和位操作的。控制器是单片机的指挥控制部件,主要任务的识别指令,并根据指令
13、的性质控制单片机各功能部件,从而保证单片机各局部能自动而协调地工作。它的程序存储器为8K字节可重擦写Flash闪速存储器,闪烁存储器允许在线+5V电擦除、电写入或使用编程器对其重复编程。数据存储器比51系列的单片机相比大了许多为256字节RAM。AT89C52单片机的指令系统和引脚功能与MCS-51的完全兼容。FLASHCPU串行通讯口RAM输入输出接口计数器定时器时钟 图 3-1 单片机89C52结构框图 8K字节可重擦写Flash闪速存储器 1000次可擦写周期 全静态操作:0Hz-24MHz 三级加密程序存储器 2568字节内部RAM 32个可编程I/O口线 3个16位定时/计数器 8个
14、中断源 可编程串行UART通道 低功耗空闲和掉电模式 图 3-2 AT89C52外部引脚图3.AT89C52管脚说明VCC:电源GND:接地P0口:P0口是一个8位漏级开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0口端口写“1时,引脚作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接受指令字节:在程序效验时,输出指令字节。程序效验时,需要外部上拉电阻。 P1口:P1口是一个具有内部上拉电阻的8位是双向I/O口,P1的输出缓冲级可驱动吸收或输出电流4个TTL逻辑电平。对P1口
15、写“1时,内部上拉电阻的原因,将输出电流ILL。 此外,与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入P1.0/T2和输出P1.1/T2EX,具体如下表所示。 引脚号功能特性T2定时/计数器2外部计数脉冲输入,时钟输出T2EX定时/计数2捕获/重装载触发和方向控制 在Flash编程和校验时,P1口接收低8位地址字节。 P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲级可驱动吸收或输出电流4个TTL逻辑电平。对P2口写“1时,通过内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电
16、流ILL。 在访问外部好曾许存储器或用16位地址读取外部数据存储器时,P2口送出高8位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址访问外部数据存储器时,P2口输出P2锁存器的内容。在Flash编程和校验时,P2口接收低8位地址字节和一些控制信号。 P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲级可驱动吸收或输出电流4个TTL逻辑电平。对P3口写“1时,内部上拉电阻把端口拉高,此时可以作为输入端口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流ILL。P3口除了作为一般、的I/O口线外,更重要的是它的第二功能,如下表所示。 表 3.
17、2 P3口引脚第二功能引脚号第二功能RXD串行输入TXD串行输出INT0外部中断0INT1外部中断1T0定时器0外部输入T1定时器1外部输入WR外部数据存储器写选通RD外部数据存储器读选通 在Flash编程和校验时,P3口也接收一些控制信号。 RST:复位输入。晶振工作时,RST脚持续2个机器周期以高电平将使用单片机复位。 ALE/:地址锁存器控制信号ALE是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚也使用作编程输入脉冲。 在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲
18、将会跳过。 如果需要,通过将地址为8EH的SFR的第0位置“1,ALE操作无效。这一位置“1,ALE仅在执行MOVX或MOVC指令时有效。否那么,ALE将被微弱拉高。这个ALE使能标志位的设置对微控制器处于外部执行模式下无效。 :外部程序储存器选通信号是外部程序存储器选通信号。当AT89C52从外部程序存储器执行外部代码时,在每个机器周期被激活两次,而在访问外部数据储存器时,将不被激活。 :访问外部程序存储器控制信号。为使能从0000HFFFFH的外部程序存储器读取指令,端必须保持低电平接地。为了执行内部程序指令,应该接VCC。 在flash编程期间,也接受12伏VPP电压。 XTA L1:振
19、荡器反相放大器及内部时钟发生器的输入端。 XTA L2:振荡器反相放大器的输出端。 MCS-51器件有单独的程序存储器和数据存储器。外部程序存储器和数据存储器都可以64K寻址。1 程序存储器 如果EA引脚接地,程序读取只从外部存储器开始。对于89C52,如果EA接VCC,程序先从内部存储器地址为0000H1FFFFH开始,接着从外部寻址,寻址范围为:2000HFFFFH。2数据存储器 AT89C52有256字节RAM。高128字节与特殊功能存放器重叠。也就是说高128字节与特殊功能存放器有相同的地址,而物理上是分开的。当一条指令访问高于7FH的地址时,寻址方式决定CPU访问高字节RAM还是特殊
20、功能存放器空间。直接寻址方式访问特殊功能存放器SFR。1 定时器0和定时器1在AT89C52中,定时器0和定时器1都是16位加法计数结构,分别由TH0地址8CH和TL0地址8AH及TH1地址8DH和TL1地址8BH两个8位计数器组成。这4个计数器均属于专用存放器之列。每个定时器/计数器都有定时和计数两种功能。2计数功能 所谓的计数功能是指对外部事件进行计数。外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外脉冲进行计数。MCS-51系列的芯片有T0P3.4和T1P3.5两个信号引脚,分别就是这两个计数器的计数输入端。外部输入的脉冲在负跳变时有效,进行计数器加1。计数方式下,单片机在每个机
21、器周期的S5P2拍节对外部计数脉冲进行采样。如果前一个机器周期采样为高电平,后一个机器周期采样为低电平,即为一个有效计数脉冲。在下一个机器周期的S3P1进行计数。可见采样计数脉冲是在2个机器周期进行的。鉴于此,计数脉冲的频率不能高于振荡脉冲的频率不能高于振荡脉冲频率的1/24。3定时功能 定时器也是通过计数器的计数来实现的,不过此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲。也就是每个机器周期计数加1。由于一个机器周期等于12个振荡脉冲周期,因此计数频率为振荡频率的1/12。如果单片机采用12MHz晶体,那么计数频率为1MHz。即每微秒计数器加1。这样不但可以根据计数值计算出定
22、时时间,也可以反过来按定时时间的要求计算出计数器的预置值。4定时器2 定时器2是一个16位定时器/计数器,它既可以作定时器,又可以做事件计数器。其工作方式由特殊存放器T2CON中的C/T2位选择如表2所示。定时器2有三种工作模式:捕捉方式、自动重载向上或向下计数和波特率发生器。如表3.3所示,工作模式由T2CON中的相关为选择。定时器2有2个8位存放器:TH2和TL2。在定时工作方式中,每个机器周期,TL2存放器都会加1。由于一个机器周期由12个晶振周期构成,因此,计数频率就是晶振频率的1/12。表 3.3 定时器2工作模式RCLK+TCLKCP/RL2TR2MODE00116位自动重载011
23、16位捕捉11波特率发生器0不用 在计数工作方式下,存放器在相关外部输入角T2发生1至0的下降沿时增加1。在这种方式下,每个机器周期的S5P2期间采样外部输入。一个周期采样到高电平,而下一个周期采样到低电平,计数器加1。在检测到跳变的这个周期的S3P1期间,新的计数值出现在存放器中。因为识别10的跳变需要2个机器周期24个晶振周期,所以,最大的计数频率不高于晶振频率的1/24。为了确保给定的电平在采样前采样到一次,电平应该至少在一个完整的机器周期内保持不变。 表3.4 T2MOD-定时器2控制存放器 T2MOD地址:0C9H 复位值:00B-T2OEDCEN76543210符号功能无定义,预留
24、扩展T2OE定时器2输出允许位DCEN置1后,定时器2可配置向上或向下计数 AT89C52有6个中断源:两个外部中断INT0和INT1,三个定时中断定时器0、1、2和一个串行中断。每个中断源都可以通过置位或去除特殊存放器IE中的相关中断允许控制位分别使得中断源有效或无效。IE还包括一个中断总控制位EA,它能禁止所有中断。 如表3.5所示,IE.6位是不可用的。对于AT89S52,IE.5位也是不能用的。用户软件不应给这些位写1。它们为AT89系列新产品预留。定时器2可以被存放器T2CON中的TF2和EXF2的或逻辑触发。程序进入中断效劳后,这些标志位都可以由硬件清0。实际上,中断效劳程序必须判
25、定是否是TF2或EXF2激活中断。标志位也必须由软件清0。定时器0和定时器1标志位TF0和TF1在计数溢出的那个周期的S5P2被置位。它们的值一直到下一个周期被电路捕捉下来。然而,定时器2的标志位TF2在计数溢出的那个周期被置位,在同一个周期被电路捕捉下来。表 3.5 中断允许控制位符号位地址功能EA中断允许控制位,EA=0,中断总禁止;EA=1,各中断由各自的控制位设定-预留ET2定时器2中断允许控制位ES串行口中断允许控制位ET1定时器1中断允许控制位EX1外部中断1允许控制位ET0定时器0中断允许控制位EX0外部中断0允许控制位 AT89C52单片机有一个用于构成内部振荡器的反相放大器,
26、XTAL1和XTAL2分别是放大器的输入、输出端。石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。从外部时钟远驱动器件的话,XTAL2可以不接,而从XTAL1接入。由于外部时钟信号经过二分频触发后作为外部时钟电路输入的,所以对外部时钟信号的占空比没有其它要求,最长低电平持续时间和最少高电平持续时间等还是要符合要求的。 石英晶振 C1,C2=30PF+-10PF 陶瓷谐振器 C1,C2=40PF+-10PF 在空闲工作模式下,CPU处于睡眠状态,而所有片上外部设备保持激活状态。这种状态可以通过软件产生。在这种状态下,片上RAM和特殊功能存放器的内容保持不变。 空闲模式可以被任一个中断或硬件复位
27、中止。由硬件复位终止空闲模式只需两个机器周期有效复位信号,在这种情况下,片上硬件禁止访问内部RAM,而可以访问端口引脚。空闲模式被硬件复位终止后,为了防止预想不到的写端口,激活空闲模式的那一条指令的下一条指令不应该是写端口或外部存储器。在掉电模式下,晶振停止工作,激活掉电模式的指令是最后一条执行指令。片上RAM和特殊功能存放器保持原值,直到掉电模式终止。掉电模式可以通过硬件复位和外部中断退出。复位重新定义例如SFR的值。在VCC未恢复到正常工作电压时,硬件复位不能无效。并且应保持足够长的时间以使晶振重新工作和初始化。表 3.6 空闲模式和掉电模式下的外部引脚状态模式程序存储器ALEPESNPO
28、RT0PORT1PORT2PORT3空闲内部11数据数据数据数据空闲外部11浮空数据地址数据掉电内部00数据数据数据数据掉电外部00浮空数据数据数据二LM016L显示屏主要技术参数:显示容量:162个字符工作电流:2.0mA(5.0V)字符尺寸:2.954.35(WH)mm引脚功能说明LM016L采用标准的14脚无背光或16脚带背光接口,各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源
29、正极8D1数据16BLK背光源负极表10-13:引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器比照度调整端,接正电源时比照度最弱,接地时比照度最高,比照度过高时会产生“鬼影,使用时可以通过一个10K的电位器调整比照度。第4脚:RS为存放器选择,高电平时选择数据存放器、低电平时选择指令存放器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液
30、晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。LM016L的指令说明及时序LM016L液晶模块内部的控制器共有11条控制指令,如表10-14所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDR
31、AM10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表10-14:控制命令表其仿真效果如图:三报警电路的设计 主机在接受到呼叫后,首先进行报警告知值班人员。报警电路可以用单片机P3.0输出音频信号经放大后驱动其扬声器,做报警信号,如下图:四键盘模块电路设计由44键盘矩阵组成,电路原理图如下图: 四、 系统软件的设计一程序设计简要在设计程序之前,我们首先对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务功能要求和技术指标。其次,要对系统的硬件资源和工作环境进行分析。这是单片机应用系统程序设计的根底和条件。经过任务分析,算法优化后,就可以进行程序的总体构思,确定程序
32、的结构和数据结构,并考虑资源的分配和参数的计算灯,然后根据程序运行的过程,勾画出程序执行的逻辑顺序,用图形符号将总体设计思路及程序流向绘制在平面图上,从而使程序结构关系直观明了,便于检查和修改.模块化程序设计方法具有明显有点。把一个多功能复杂的程序划分位假设干个简单,功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序结构层次一目了然。二系统的工作流程如下图。NY开始初始化系统有键按下?病房指示灯亮,效劳台显示床号,并响铃效劳台回应结束三软件设计该系统软件主要完成以AT89C52为核心的数据的采集、处理和有线传输。采用模块化程序设计方法,将系统
33、软件的设计主要分为显示模块,输入模块,输出模块。单片机扫描发射键,如果扫描到有发射键按下,系统便扫描拨码开关的状态以确定地址码,通过P0口和P2口开始地址码传送当效劳台接收到呼叫信号后,护士值班室内的呼叫系统板上显示该患者的床位号,并振铃。当护士按下“响应键时,取消当前呼叫。五、 程序调试与分析我们利用KEILV805中文版对源程序进行编译,编译成功后,把编译结果保存并生成.HEX文件,然后把.HEX加载到单片机上进行Proteus软件仿真。看其是否能实现预想的功能。Proteus仿真图如图下 当按下27号床位时Proteus仿真图致 谢 时光匆匆,大学四年已经接近尾声。这四年给我留下很多美好
34、的记忆,同时接受很多优秀老师的教育,和很多同学的帮助。在此论文完成之际,我要向这四年来帮助我的老师、同学表示由衷的感谢!这几个月的毕业设计,充满了忙碌,也感到学习的充实。从拿到毕业设计的题目,之后便开始整理材料,这期间,在图书馆里找到很多有关书籍。然后开始了一系列的整体方案的设计,并投入方案的制定。虽然其中经历很多的失败,令人欣慰的是在万国峰老师和同学的帮助下,我很快克服了困难。设计的系统虽不是那么完善,但也是从知识到实践的转换。我从中学到了怎样独立地思考发现问题、解决问题和进一步完善提高的能力。时光短暂,但给我留下很多深刻的印象,这是第一次独立自主的做设计。通过此次设计,对我今后的学习和工作
35、必将有很大的帮助。在此,谨向我的万国峰老师表示衷心的感谢和敬意!总结至此,此系统的详细设计及过程已经结束。在设计的过程中遇到了很多问题,发现了自己的缺乏之处,有很多没有学习,如Proteus仿真知识及操作,还有单片机的C语言编程;有些软件掌握得不够牢固,比方说wave仿真不熟练;通过此次学习,进一步加强了我的理解,同时提高了我独立自学的能力。 整个设计过程中,老师详细的指导,同学的帮助,以及校图书馆的资料给了我很大的帮助。此次设计让我从中学到很多东西。虽然中间遇到很多困难,但都对于我是一次很好的锻炼。设计以后,才更加深刻感受到自己的学习只是理论局部,而且很多时候不能付诸实践。这次设计能够让我从
36、实践中重新学习理论知识,对我今后的工作和学习有了很多提高。但是由于本人水平有限,整个设计仍有很多缺乏之处,如程序不够完善、灵活,显示可以采用液晶LCD模块,还有可以采用无线NRF2401射频模块及其无线扩展功能等等。完善后将会进一步提高设计的稳定性和普适性。最后,在指导老师和同组同学的身上我学得到很多实用的知识,特别感谢万国峰老师给予的帮助,还用同学之间的资源共享。再次表示感谢!附录 源程序代码一、主机程序:#include #include #define uchar unsigned char#define uint unsigned intvoid Ok_Menu ();void dat
37、a_chuli();void fangyin(uchar addr);void ISD4004_Stop(); void ISD4004_Powerdown();/bit result ;uchar data chs;sbit LCD_RS = P25 ; sbit LCD_RW = P26 ;sbit LCD_EN = P27 ;sbit Led=P30;sbit sendd=P24;sbit add=P37; /上翻sbit sub=P36; /下翻 sbit affirm=P35; /应答uchar code cdis1 = ;unsigned char data shuju_sbit6
38、 =0 x00,0 x00,0 x00,0 x00,0 x00,0 x00 ;uchar data shuju4= 0 x00,0 x00,0 x00,0 x00,/组号,床号(地址),次数,是否应答 0 x01,0 x00,0 x00,0 x00, 0 x02,0 x00,0 x00,0 x00, 0 x03,0 x00,0 x00,0 x00, 0 x04,0 x00,0 x00,0 x00, uchar flag2=0,flag=1,flag1,flag4,flag5,Flag_ReqSend,jieshou=0; uint flag3; uint a=0; uchar temp;sbi
39、t K_luying=P34;sbit K_fangyin=P33; sbit K_Tingzhi=P31; sbit ISD4004_SS=P14; /语音sbit ISD4004_MOSI=P15;sbit ISD4004_SCLK=P16;/sbit ISD4004_INT=P17;/ 要换回来code unsigned char table1=0,1,2,3,4,5,6,7,8,9,10,11 ;code unsigned char table=0 x00,0 x00,0 x00,0 x65, /语音地址表 0 x00,0 xc9,0 x01,0 x2d, 0 x01,0 x91,0
40、x01,0 xf5, 0 x02,0 x59,0 x02,0 xbd, 0 x03,0 x21,0 x03,0 x85, 0 x03,0 xb7,0 x03,0 xe8, 0 x04,0 x1a,0 x04,0 x4c, 0 x04,0 x7e,0 x04,0 xb0, 0 x04,0 xe2,0 x05,0 x14,; #define delayNOP() ; _nop_() ;_nop_() ;_nop_() ;_nop_() ; ; void delay10ms(uchar hehe) uint i;for(hehe;hehe0;hehe-)for(i=1240;i0;i-);void
41、delay1(int ms) unsigned char y ; while(ms-) for(y = 0 ; y25; y+) _nop_() ; _nop_() ; _nop_() ; _nop_() ; bit lcd_busy() bit result ; LCD_RS = 0 ; LCD_RW = 1 ; LCD_EN = 1 ; delayNOP() ; result = (bit)(P0&0 x80) ; LCD_EN = 0 ; return(result) ; void lcd_wcmd(uchar cmd) while(lcd_busy() ; LCD_RS = 0 ; L
42、CD_RW = 0 ; LCD_EN = 0 ; _nop_() ; _nop_() ; P0 = cmd ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; void lcd_wdat(uchar dat) while(lcd_busy() ; LCD_RS = 1 ; LCD_RW = 0 ; LCD_EN = 0 ; P0 = dat ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; void lcd_init() delay1(15) ; lcd_wcmd(0 x01) ;
43、 /去除LCD的显示内容 lcd_wcmd(0 x38) ; /16*2显示,5*7点阵,8位数据 delay1(5) ; lcd_wcmd(0 x38) ; delay1(5) ; lcd_wcmd(0 x38) ; delay1(5) ; lcd_wcmd(0 x0c) ; /显示开,关光标 delay1(5) ; lcd_wcmd(0 x06) ; /移动光标 delay1(5) ; lcd_wcmd(0 x01) ; /去除LCD的显示内容 delay1(5) ; lcd_wcmd(pos | 0 x80) ; /数据指针=80+地址变量 /数据位别离 void sbitseparat
44、e(uchar a,uchar b,uchar c,uchar d) shuju_sbit0=a; shuju_sbit1=b/10; /床号 shuju_sbit2=b%10; shuju_sbit3=c/10;/次数 shuju_sbit4=c%10; shuju_sbit5=d; /显示数据 void display(flag) sbitseparate(shujuflag0,shujuflag1,shujuflag2,shujuflag3); lcd_pos(0 x03) ; lcd_wdat(shuju_sbit0+0) ; /组号 lcd_pos(0 x05) ; lcd_wdat
45、(shuju_sbit1+0 x30) ; / 床号 lcd_pos(0 x06) ; lcd_wdat(shuju_sbit2+0 x30) ; / lcd_pos(0 x08) ; lcd_wdat(shuju_sbit3+0 x30) ; /呼叫次数 lcd_pos(0 x09) ; lcd_wdat(shuju_sbit4+0 x30) ; / lcd_pos(0 x0B) ; lcd_wdat(shuju_sbit5+0 x30) ; / 是否应答 void fasong() Led=0; P2=0 x00; EA=0; /保证数据发送完 P2=shujuflag-11&0 x0f;
46、 /要是这样就把sendd变为0了,没有电源就不能发送了 sendd=1; delay10ms(10);/延时100ms sendd=0; EA=1; Led=1; void data_init() TCON = 0 x00; IT0=1; /负边沿触发 IE = 0 x00; EA=1; EX0=1; flag=1; Led=1; sendd=0; Ok_Menu (); void jieshou_dat() uchar a,b,c,d; Led=0;temp=P1&0 x0f; delay10ms(50);Led=1; a=(temp3)&0 x08;/数据位的第四位和第一位反了,第二位和
47、第三位反了b=(temp1)&0 x02;d=(temp3)&0 x01;temp=a|b|c|d; void int00(void) interrupt 0 EX0=0; jieshou_dat(); data_chuli(); /有信号那么进行对信号的处理 / display(flag-1); EX0=1;void data_chuli() uchar i,j; if(0 x00=temp)|(0 x0f=temp) /防干扰goto abc; jieshou=1;if(0=shuju00) for(i=1;i9;i+) shujui-10=shujui-10+1; for(i=1;i1;
48、i-) /数据转移 for(j=1;j4;j+) shujui-1j=shujui-2j;/ for(i=1;i4;i+) /测试用的移入数据,实际用时是传过来的数据(房号) / shuju11=temp;/ 存入房号 flag=1; /当前显示呼叫的病房的信息 shuju01=temp; /存入房号 / shuju02=0 x01; /呼叫次数存入1 不用对应答清零,初始化时就是0 x00了 abc:;void delay25ms() unsigned int i; for(i=0;i=5000;i+); void ISD4004_Send(unsigned char m) unsigned
49、 char i,j; for(i=0;i8;i+) ISD4004_SCLK = 0; for(j=0;j5;j+); if(m&0 x01) ISD4004_MOSI=1; else ISD4004_MOSI=0;ISD4004_SCLK=1; for(j=0;j1; void ISD4004_Powerup() ISD4004_SS=0; /开片选 ISD4004_Send(0 x20); /上电:等待TPUD后器件可以工作 delay25ms(); ISD4004_SS=1; /关片选void ISD4004_Stop() ISD4004_SS=0; ISD4004_Send(0 x30
50、); /停止当前操作 ISD4004_SS=1;void ISD4004_Powerdown() ISD4004_SS=0; ISD4004_Send(0 x10); ISD4004_SS=1;void ISD4004_Play(unsigned char addr_h,unsigned char addr_l) ISD4004_SS=0; ISD4004_Send(addr_l); ISD4004_Send(addr_h); ISD4004_Send(0 xe0); /从指定地址开始放音。 ISD4004_SS=1; ISD4004_SS=0; ISD4004_Send(0 xf0); /从
51、当前地址开始放音(直至EOM或OVF) ISD4004_SS=1;void ISD4004_Rec(unsigned char addr_h,unsigned char addr_l) ISD4004_SS=0; ISD4004_Send(addr_l); /传送地址 ISD4004_Send(addr_h); ISD4004_Send(0 xa0); /从指定地址开始录音。 ISD4004_SS=1; ISD4004_SS=0; ISD4004_Send(0 xb0); /从当前地址开始录音(直至OVF或停止) ISD4004_SS=1;void fangyin(uchar addr) uc
52、har a;Led=0; ISD4004_Powerup(); delay25ms(); a = addr * 2; ISD4004_Play(tablea,tablea+1); Led=1; void luyin(uchar addr) uchar a; ISD4004_Powerup(); /上电 delay25ms();delay25ms(); a = addr * 2; /对地址进行处理 ISD4004_Rec(tablea,tablea+1); void keyscan() if(add=0)/上翻 delay1(5); while(!add) ; flag+; if(flag=9)
53、 flag=1; if(sub=0)/下翻 delay1(5); while(!sub) ;flag-;if(flag=0) flag=8; if(affirm=0) /应答 delay1(5); while(!affirm); flag3+;/ shujuflag-13=flag3%2; shujuflag-13=1; fasong(); if(K_fangyin=0) /放音 delay1(5); if(K_fangyin=0) P1=0 xff; fangyin(a); delay25ms(); delay25ms(); if(K_luying=0) /录音 delay1(5);if(K
54、_luying=0) P1=0 xff; ISD4004_Powerup(); delay25ms(); luyin(a); if(K_Tingzhi=0) delay1(5); if(K_Tingzhi=0) P1=0 xff; ISD4004_Stop(); delay25ms(); ISD4004_Powerdown(); void Ok_Menu () uchar m ; lcd_init() ; /初始化LCD lcd_pos(0) ; /设置显示位置为第一行的第1个字符 m = 0 ; while(cdis1m != 0) /显示字符 lcd_wdat(cdis1m) ; m+ ;
55、 /* 主函数 */void main() data_init(); while(1) keyscan(); if(1=jieshou) EA=0; /防止中断影响语音 Led=0; /亮灯 fangyin(a); delay25ms(); delay25ms(); EA=1; jieshou=0; display(flag-1); 二、从机程序:#include#define uchar unsigned char#define uint unsigned intsbit sing=P27;sbit key=P25;sbit sendd=P14;/电源控制sbit led=P26;uchar
56、 temp=0 x03;/本机地址uchar th=0 xf8,0 xf9,0 xfa,0 xfa,0 xfb,0 xfb,0 xfc, 0 xfc,0 xfc,0 xfd,0 xfd,0 xfd,0 xfd,0 xfe, 0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xfe,0 xff;uchar tl=0 x8c,0 x5b,0 x15,0 x67,0 x04,0 x90,0 x0c, /低音1-7 0 x44,0 xac,0 x09,0 x34,0 x82,0 xc8,0 x06, /中音1-7 0 x22,0 x56,0 x85,0 x9a,0 xc1,0 xe4,0 x03; / 高音1-7 uchar i,timer;uint a,sum=0;uchar code song=10,12, /2 13,13,13,13,13,13,13,15,14,13,12,10,12, /16 13,13,13, 10,10,10,10,10,10,10,10,10,6,8, /14 10,10,10, 9,9,9,9,9,9,9,10,9,8,9,8,7, /16 9,9,9, 6,6,6,6,6,6,6,6,6,6, /14 6,6,6,6, 6,6,10,10,10,10,9,8,7,7,8,8,7,7,6,5, /16 6,6,6,6,6,6,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 吉林省长春市九台区2024-2025学年七年级上学期期中教学质量监测地理试题(含答案)
- 2024年度云南省高校教师资格证之高等教育法规押题练习试卷A卷附答案
- 2024-2025学年天津市河北区美术中学九年级(上)第一次月考数学试卷(无答案)
- 低空经济产业园经济效益评估
- 低空经济公司运营管理报告
- 赣南师范大学《美术基础与欣赏》2023-2024学年第一学期期末试卷
- 赣南师范大学《电视剧研究》2021-2022学年第一学期期末试卷
- 重庆市名校联盟 2024-2025学年度第一期第一次联合考试 历史试卷(含答案)
- 阜阳师范大学《体育保健学》2022-2023学年第一学期期末试卷
- 阜阳师范大学《工笔人物》2022-2023学年第一学期期末试卷
- 二次结构工程技术标
- 半导体-硅片生产工艺流程及工艺注意要点
- 工地安全日志范例52007
- 《湖南省住宅工程质量通病防治技术规程》
- 服装质量控制及流程(共6页)
- 昆明地区废弃花卉秸秆资源化利用现状及建议
- 煤巷掘锚一体机化快速掘进技术与应用分析
- 有理数全章复习教案
- 《2021国标暖通图集资料》14K117-2 伞形风帽
- 低压配电房设备操作流程
- 机电管理安全技术措施及应急预案
评论
0/150
提交评论