《多功能数字时钟毕业设计论文(31页).docx》由会员分享,可在线阅读,更多相关《多功能数字时钟毕业设计论文(31页).docx(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-多功能数字时钟毕业设计论文-第 31 页一 引言2二 硬件系统方案设计22.1电话拨号防盗报警器硬件系统方案22.1.1 硬件系统方案设计22.1.2 脉冲拨号原理32.1.3 脉冲拨号实现过程42.1.4 AT89S2052单片机的功能特点52.2 时钟计时器的硬件设计方案论证分析82.2.1 功能要求82.2.2 方案论证82.2.3 系统硬件电路设计84.1.2时钟计时器的硬件电路设计描述9三 系统的软件设计103.1电话拨号防盗报警器程序设计103.1.1主程序设计113.2 时钟显示程序设计123.2.1主函数123.2.2 LED显示子函数133.2.3 定时器T0中断函数133
2、.2.4 中断函数143.2.5 功能函数14四 系统的调试部分154.1 时钟系统的调试154.1.1 时钟系统的硬件调试154.1.2 时钟系统的软件调试154.1.3 性能分析154.2 拨号报警器功能调试15五 总结16参考文献17附录18附录1 程序清单18附录2 系统使用说明18附录3 英文资料18附录4 系统PCB板图18附录1:程序清单19附录2:系统使用说明36一 引言随着人们生活水平的不断提高,大家对住宅和办公室的安全意识也日益增加。因此,研究和开发防盗报警装置引起了科研单位和生产厂家的重视,特别是面对普通居民、价格低、运行可靠的自动报警系统。 长期以来,一些电子杂志介绍的
3、廉价防盗报警均无电话拨号报警功能,而市售的可自动拨号报警的防盗器材又价格高昂。这里介绍的电话拨号防盗报警器可在这两者之间找到平衡,即兼具高性能和低价位。为了以低成本实现高性能,设计时利用了电信局的交换机支持脉冲拨号方式来实现拨号报警,这样可利用单片机直接发出拨号脉冲,精简了电路,降低了成本。 电话拨号防盗报警器作为家庭防盗报警器材的一员,非常经济实用。它进入工作警戒后,主控CPU不断检查触发开关的状态,当盗贼入室触发开关时,立即启动电话拨号报警程序向主人告警(当然也可以通过修改软件使其在现场发出高分贝报警音)。实践证明,该系统报警快速、准确。由于该系统电路简单,而且利用的是公共通信网,因此不存
4、在建立的报警系统网络问题,具有成本低、体积小、能耗极低、体积小、能耗极低且不影响正常打电话等突出优点。平时可以作为时钟计时器来使用,真是一举两得。 二 硬件系统方案设计 2.1电话拨号防盗报警器硬件系统方案2.1.1 硬件系统方案设计图2.1为电话拨号报警器的系统构成方框图,由单片机控制器、键盘输入、数码管显示、触发电路、拨号电路及电源等6部分组成。单片机控制器是整个系统的核心,负责控制检测输入/输出显示、模拟摘机、拨号摘机、拨号报警、挂机等一系列的程序动作。这里使用了小引脚、高性能、低价位的AT89S2052。 键盘输入电路负责输入电片机中一系列工作参数及功能设定。 发光二极管数码管显示器在
5、整个系统工作过程中充当一个简单的人机界面,用以显示工作状况及输入/输出的数据等。 电话拨号防盗报警器的触发电路用磁性开关(门磁开关),简单可靠,也可用红外探测器或无线门磁,以实现全方位远距离监测。报警器应采用隐蔽安装,防止小偷发现。 拨号及报警电路用来完成模拟摘机、拨号、发出报警音、挂机等工作过程,它的工作由单片机控制。 电源部分负责对整个系统供电。平时由电话线上取得工作电流并对后备电池充电,拨号报警时转由后备电池供电。键盘单片机控制器触发开关电源拨号电路显示模块 图2.1 电话拨号防盗报警器方框图2.1.2 脉冲拨号原理脉冲拨号是目前电话机两种拨号方式中的一种,另一种为双音多频拨号方式。脉冲
6、拨号就是指在电话机上拨入的电话号码以脉冲个数的形式发出,也就是说,在已经通以直流电流的回路上,利用拨号盘及发号电路将回路断开、再接通而形成的脉冲信号,来完成输入电话号码的发送。在操作中,若用户拨1,则送出1个脉冲,回路中断一次、接通一次;拨2,则发出2个脉冲,回路断一次、接通一次、再断一次;而拨0时,则发出10个脉冲,回路断、接通轮流10次。图2.2为电话号码“32”的脉冲波形。时间号码字间间隔时间tID号码2的脉冲号码3的脉冲断通 图2.2 电话号码“32”的脉冲波形 正常拨号时,电路电流中断的时间一般在5865ms之间,视断续比的不同而不同。快速拨号时,只要取一半时间即可。电路电流接通的时
7、间(即在同一位号码中的2个断脉冲之间的接通电流时间)约在3242ms之间,视断续比的不同而不同。快速拨号时,只要取一半时间即可。显然脉冲周期等于脉冲中断时间和脉冲接通时间之和,每一个周期的时间为100ms左右。快速拨号时,在50ms左右。2位号码(即2组脉冲串)之间的最小时间间隔,通常为800ms左右;而快速拨号时,其值减半,为400ms左右。我国目前采用的电话脉冲拨号的速率是10PPS(每秒的脉冲数),即每秒发出10个脉冲,因此上述各参数不存在快速拨号时的值。 为了提高拨号的可靠性及稳定性,这里设计时选定更低的脉冲拨号速率:1个脉冲代表播出1,2个脉冲代表拨出2,10个脉冲代表拨出0,每个脉
8、冲的宽度和间隔为100ms。工作时首先进行模拟摘机,然后开始脉冲拨号,拨出1位号码后停顿500ms(保持接通)再拨下一位,直至全部拨完后再发报警音,最后挂机。2.1.3 脉冲拨号实现过程图2.3为脉冲拨号的实现电路。平时电话线上的电压约为5060V左右。未拨号时电片机的P3.0、P3.1 均输出低电平。拨号过程如下:单片机的P3.0输出高电平,使TR1导通,由于电话线路上接入了负载R1,这样电话线的电压下降,模拟摘机。单片机的P3.0开始输出拨号脉冲,使电话线的电压(电平)也呈高、低变化。1个脉冲代表拨出1,2个脉冲代表拨出2,10个脉冲代表拨出0,每个脉冲的宽度和间隔均为100ms。拨出1位
9、号码后停顿500ms(保持P3.0高电平)再拨下一位,直至全部拨完。P3.0 保持高电平(保持电话线路接通),P3.1输出1KHz的报警音脉冲驱动TR2,以2Hz进行调制(即接通1kHz信号0.5s、断开1kHz信号0.5s),这样从接听方的电话中就会听到“嘟、嘟”的报警声。报警音的时间根据设计为60s。60后,P3.1输出低电平,TR2 截止,停止报警。随后P3.0也输出低电平,模拟挂机。完成一次报警过程。图2.3 脉冲拨号实现电路2.1.4 AT89S2052单片机的功能特点电话拨号防盗报警器的核心控制器是单片机AT89S2052。AT89S2052 是美国ATMEL半导体公司生产的一种高
10、性能单片机。该单片机以与MCS-51系列单片机高度兼容、低功耗、可以在接近零频率下工作等诸多优点,而广泛应用于各类计算机系统、工业控制、电信设备、消费类产品中。由于ATMEL是全球最大的FLASH和EEPROM生产制造公司之一,加之以其EEPROM技术与INTEL的80C51内核技术交换,使ATMEL拥有了80C51内核的使用权,其生产的AT89系列电片机不仅与80C51有极好的兼容性,而且具有极高的性能价格比。1. AT89S2051的主要性能特点指令与MCS-51完全兼容;内带2KB可编程闪速存储器(FLASH MEMORY)可重复擦写1000次;数据保留10年;工作电压范围2.76V;工
11、作频率024MHZ;两极程序加密锁定;128B内部RAM;15条可编程双向I/O口线;2个16位定时器/计时器;5个中断源;可编程串行UART通道;输出口可直接驱动LED;片内含模拟比较器;低功耗的闲置和掉电模式。AT89S2052是AT89 系列电片机种的一种精简产品。它是将TA89C52的P0口、P2口、EA/Vpp、ALE/PROG、PSEN口线省去后,形成的一种仅20个引脚的单片机,相当于早期INTEL8031的最小应用系统。这对于一些不太复杂的控制场合,仅用一片AT89S2052就足够了,是真正意义上的“单片机”。 由于将多功能8位CPU和2KB的闪速存储器集成在单个芯片中,使其成为
12、一种高效的微控制器。AT89S2052的出现为很多规模不太大的嵌入式控制系统提供了一种极佳的选择方案,使传统的51系列单片机的体积大、功耗大、可选模式少等诸多困扰设计工程师们的致命弱点不复存在。2. 引脚功能介绍AT89S2052引脚外形如图所示。Vcc:电源端。GND:接地。P1 口(P1.0P1.7):是一个8位双向I/O口,其中P1.2至P1.7提供内部上拉电阻,P1.0和P1.1需外接上拉电阻。P1.0和P1.1也可作为片内精确模拟比较器的正向输入(AINO)和反向输入(AINI)。P1口输出缓冲器能提供20mA的灌电流,可直接驱动LED。P1口写入“1”后可用作输入。P3口:引脚P3
13、.0至P3.7(P3.5除外)是7个带内部上拉电阻的双向I/O口线。原P3.6不能使用,已连接片内比较器输出端。与P1口相同,P3口也能提供20mA的灌电流,并可直接驱动LED显示器。与80C51相同,P3口也有第2功能,P3.0作为串行数据接收RXD;P3.1作为串行数据发送TXD;P3.2为外部中断0申请INT0;P3.3 为外部中断1申请INT1;P3.4 为定时器/计时器0输入;P3.5位定时器/计数器1输入;P3.7无第2功能RD。RST:复制输入。要使芯片可靠复位,要保持RST引脚2个机器周期的高电平。XTAL1:反向振荡放大的输入及内部时钟电路的殊荣。XTAL2:来自反向振荡放大
14、器的输出。3. 特殊功能寄存器(SFR)与80C51完全相同4. 程序存储器锁定AT89S2052片内有2个锁定位,可以不编程(U),也可以编程(P),以获得一些附加的特性,如表2.1所示。 表2.1 程序存储器锁定编程锁定位LB1LB2保护模式1UU没有编程锁定特性2PU禁止对闪速存储器进一步编程3PP同模式2,同时禁止校验 5、闲置模式 在闲置模式下,CPU自身处于休眠状态,而片内所有其他外围设备保持工作状态。该模式是软件生成的。在该模式期间,片内RAM和所有特殊功能寄存器的内容保持不变。闲置模式可以允许由中断或硬件复位终止。如果不采用外部上拉,P1.0和P1.1应置0;如果采用外部上拉,
15、则置1。应注意的是,当闲置模式被硬件复位中止时,器件要从闲置处恢复程序的执行,执行2个机器周期后,内部复位算法才起作用。此时,硬件禁止访问内部RAM,但允许访问端口引脚。为了排除闲置被复位中止时对端口意外写入的可能性,跟在生成闲置模式后的指令不应是对端口引脚的读/写操作。6.掉电模式 在掉电模式下,振荡器停止工作,生成掉电状态的指令是最后执行的一条指令。片内RAM和特殊功能寄存器保持其值不变直到掉电模式终止。从掉电模式退出的唯一办法是硬件复位。复位将重新定义特殊功能寄存器(SFR),但不会影响片内RAM。在Vcc没有恢复到其正常工作电压之前,不应进行复位,且复位的保持时间应足够长,使振荡器能重
16、新开始工作并稳定下来。同样,如果不采用外部下拉,P1.0和P1.1应置0,如果采用外部上拉,则置1。2.2 时钟计时器的硬件设计方案论证分析2.2.1 功能要求时钟计时器要求用六位LED数码管显示时、分、秒、以二十四小时方式运行,使用按键开关实现时,分调整功能。2.2.2 方案论证为实现LED显示器的数字显示,可以采用静态显示法和动态显示法。由于静态显示法需要数据锁存器等硬件,接口复杂一些,考虑到时钟显示只有六位,且系统没有其它复杂的处理任务,所以决定用动态扫描实现LED显示。单片机采用易购的AT89S52系列,这种单片机可具有足够的空余硬件资源,以实现其它的扩充功能。若使用电池供电,可采用低
17、电压的LV系列单片机时钟计时器电路系统的总体设计框架如图3.1所示。单片机控制器AT89S526位LED显示器列驱动 图3.1 硬件系统的总体设计框架2.2.3 系统硬件电路设计电话拨号防盗报警器的硬件电路设计描述为了发挥电片机强大的计算、控制能力,充分发挥软件的优势,这里极大地简化了电路,但可实现以前需要几片甚至十几片小规模数字电路才能完成的任务。电路原理如图所示,共有4个按键,即rst、ok、up、set。rst:系统复位键。ok:输入数据确认键。up:显示的数字增加键。set:工作模式设定键,可设定管机、工作、输入时间t1、输入时间t2及输入电话号码5种模式。 磁性开关即为装于门或窗口的
18、防盗感应开关,门关闭时常开,门打开时闭合接通。当然也可改用其他的感应器件,如激光探测、超声波感应、热释电感应、主动红外线探测或无线门磁等,以实现全方位远距离检测。为了防止磁性开关离控制器较远而产生引入干扰,使用了光耦作信号传递,效果良好。LED数码管用于工作状态指示或输入数据指示。L1、L2接电话线,ZND为击穿电压120V的压敏二极管,防止电路受雷电干扰。平时系统处于低功耗待机状态(此时耗电仅2mA左右),由电话线上取电工作,并对3.6V/60mA镍铬电池充电,当输入数据进行设定或进行拨号报警时,耗电会达到10mA,这时主要由镍铬电池供电。由于有镍铬电池后备供电,即使电话线断电也不会使已输入
19、的数据丢失。该机除用于防盗报警外,若对软件进行一些修改,也可通过电话线进行远程数据传递。三极管T1、T2及电阻R1、R2构成拨号及报警电路,其工作原理前面已作详细介绍。4.1.2时钟计时器的硬件电路设计描述时钟计时器的硬件电路,采用AT89S52单片机最小化应用设计,显示采用共阳七段LED显示器,P0口输出段数码数据,P2.0P2.5口作列扫描输出,P1.0,P1.1和P1.2口接三个按钮开关用以实现调时,调分功能.为了提供共阳LED数码管的驱动电压,用三极管8550作电源驱动输出。采用12MHZ晶振有利于提高秒计时的精确性。硬件电路图如图3.2示。图3.2 具有时钟功能的电话报警器原理图 三
20、 系统的软件设计3.1电话拨号防盗报警器程序设计3.1.1主程序设计 主程序的工作过程为:先进行初始化工作,随后根据输入的键值分别散转输入的键值分别散转至对应的子程序(管机、警戒工作、输入时间t1、输入时间t2、输入电话号码)循环工作。T0为100ms定时中断服务子程序,它实现精确的拨号脉冲时序。INT0外中断服务子函数用于实现功能选择;而INT1外中断服务子函数则检测防盗触发开关的状态。 主程序状态流程图如图3.6所示。INT0外中断服务子函数状态流程图及INT1外中断服务子函数的状态流程图分别如图3.7、图3.8所示。开始 定时器T0初始化 关闭拨号、报警线路输入号码 输入t2输入t1 工
21、作 根据set键值散转关 机 图3.6 主程序状态流程 INT0外中断服务子函数开始如set键按下,则set键值加1如键值大于5,则键值回0系统进入低功耗待机状态INT0外中断服务子函数结束图3.7 INT0外中断服务子函数状态流程INT1外中断服务子函数结束查询门控开关共10次INT1外中断服务子函数开始图3.8 INT1外中断服务子函数结束3.2 时钟显示程序设计3.2.1主函数 本设计中计时采用定时器T0中断完成,其余状态循环调用显示子函数及键扫描子函数,当端口开关按下时,转入相应调时功能。其主函数执行流程如图3.3所示。开 始显示单元清0T0、T1设为16位计数器模式允许T0中断N调用
22、显示子函数键按下?进入调时功能图3.3 主函数流程图3.2.2 LED显示子函数 数码管显示的数据存放在内存单元dis0dis5中,其中dis0dis1存放秒数据,dis2dis3存放分数据,dis4dis5存放时数据,每一单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用的十进制BCD码数据的对应段码存放在ROM表(dis711)中,显示时,先取出dis0dis5中的某一数据,然后查得对应得显示段码从P0口输出,P2口将对应得数码管选中供电,就能显示该地址单元的数据值。3.2.3 定时器T0中断函数 定时器T0用于时间计时。定时溢出中断周期可设为50ms,中断进入后先判断
23、,中断计时累计20次(即1ms)时对妙计数单元进行加1操作。时钟计数单元在 义的6个单元(timedata6)中。timedata0timedata1存放秒数据,timedata2timedata3存放分数据,timedata4timedata5存放时数据。最大计时值为23小时59分59秒。在计数单元中采用十进制BCD码计数,秒,分、时之间满60进位。T0中断服务程序执行流程如图3.4所示。T0中断 保护现场 1s到?加1处理 恢复现场,中断返回图3.4 T0 中断函数3.2.4 中断函数 T1中断服务程序用于指示调整数字单元的亮闪,在时间调整状态下,每过0.4s,将对应单元的显示数据换成“熄
24、灭符”数据(0x0a)。这样,在调整时间时,对应调整单元的显示数据会间隔闪亮。3.2.5 功能函数 调时功能函数的设计方法是:按下T0键,进入调分状态,时钟停止走动;按T1或T2键可进行加1或减1操作 ;继续按T0键可分别进行分十位、时个位和时十位调整;最后按T0建将退出调整状态,时钟开始计时运行。四 系统的调试部分4.1 时钟系统的调试4.1.1 时钟系统的硬件调试硬件调试时可先检查印制板及焊接的质量情况,在检查无误后可通电检查LED显示器的点亮状况。若亮度不理想,可以调整P0口的电阻大小,一般情况下取200欧姆电阻即可获得满意的亮度效果。4.1.2 时钟系统的软件调试软件调试Keil C5
25、1编译器,源程序编译及仿真调试应分段或以子函数为单位一个个地进行,最后可结合硬件实时运行调试。4.1.3 性能分析按照设计程序分析,LED显示器动态扫描频率约为167Hz,实际使用观察时完全没有闪烁,实际计时时精度较高,可满足一般场合的应用需要。 4.2 拨号报警器功能调试通电前应检查焊接质量,确认无短路、虚焊等故障。将拨码开关J2指向下侧,即断开3.6V镍铬电池与系统的连接。将外部直流可调稳压电源调整为3.6V。接入系统的Vcc与地。如果系统耗电小于15mA为正常,否则应检查是否有短路、元器件不良或错焊现象存在。随后取下外接直流稳压电源,恢复3.6V镍铬电池与系统的连接,进行软、硬件统调测试
26、。由于AT89S52的I/O引脚有限,故数码管只设一位,因此输入数字时只能分阶段一位一位输入。假设需输入t1=061,t2=025,电话号码=12345678,在此详述如下:地1步:接上电话线(也即接上电源)后,数码管显示“E”,意为数据错误,因为此时我们尚未输入任何数据。第2步:点按一下set键,键值加1,即此时set=1.这时数码管最下的一横点亮,显示“_”,意为可输入时间t1,点按ok键确认(小数点被同时点亮)。然后数码管显示数字“0”。按下up键后,数字开始从09循环递增,调至0后松开up键,点按ok键确认(小数点被同时点亮)。此时百位数字“0”存入内存。按下up键后,数字开始循环递增
27、,调至1后松开up键,点按ok键确认(小数点被同时点亮)。此时十位数字“6”存入内存。按下up键后,数字开始循环递增,调至1后松开up键,点按ok键确认(小数点被同时点亮)。此时个位数字“6”存入内存。这样就完成了将061(代表t1=61s)存入内存的过程。同时数码管又恢复显示“_”第3步:点按一下set键,键值加1,即此时set=2。这时数码管下面的二横点亮,显示“二”,意为可输入时间t2,点按ok键确认(小数点被同时点亮)。然后数码管显示数字“0”。按下up键后,数字开始从从09循环递增,调至0后松开up键,点按ok键确认(小数点被同时点亮)。此时百位数字“0”存入内存。按下up键后,数字
28、开始循环递增,调至后松开up键,点按ok键确认(小数点被同时点亮)。此时十位数字“”存入内存。按下up键后,数字开始循环递增,调至后松开up键,点按ok键确认(小数点被同时点亮)。此时个位数字“”存入内存。这样就完成了将(代表t1=s)存入内存的过程。同时数码管又恢复显示“二”以后的调试同前面的方法相同。五 总结本系统以单片机89S52作为核心部件,利用单片机实现了电话拨号报警、时钟显示等功能,最终使系统完成设计要求的各项任务。在系统设计过程中,力求硬件线路简单,并综合运用了C语言、单片机等各种知识,采用了一些特别的方法使磁电检测达到最佳的效果 ,充分发挥软件编程方便灵活的特点,来满足系统设计
29、的要求。在设计过程中主要遇到几个关键性问题。如检测部分信号不稳定,经检查该问题与周围的干扰有密切相关,将检测部分的外围进行了合理,使检测信号很准确地检测到。还有拨号电路模块起初方案采用电桥和三极管进行控制,此设计采用单片机I/O口直接控制指示灯以及开关来进行控制。不仅节省了硬件资源,还提高了系统的稳定性。变量定义及初始化模块 参考文献1杨长春.电子报合订本 2002年上:2612电子产品世界,2004,9(167):81-823耿德根,詹卫前,李青.单片机创新开发与机器人制作.北京 :北京航空航天大学出版社,2005.3:85-1204吴祖峰,葛丽,李刚.传感器个数及距离对盲分离影响的分析.电
30、子科技大学学报,2006,4,35(2):186-1885韦敏,宁方立,韦娟.基于智能功率模块的无刷直流电机控制器.西北工业大学学报,2006,4,24(2):161-1646熊磊,黄玉水.一种改进型PDM调动控制方式.南昌大学学报,2006,3,28(1):99-1027黄智伟.全国大学生电子设计竞赛训练教程. 北京:电子工业出版社,2005.18闫志峰,刘立君,崔立彪.管道弧焊机器人控制系统设计.哈尔滨理工大学学报,9 万光毅,严义.单片机实验与实践教程(一).北京:北京航空航天大学出版社,2003.12:123-13110黄河,鲍宏亚.Protel DXP 培训教程.北京:清华大学出版社
31、,2004.9致 谢How time flies!马上就要毕业了。在院、系领导和老师的关心、教育和帮助下,经过五年的努力,已经使自己变成一个动手动脑的复合型人才。我将利用在校学习的专业知识投身职业教育事业,为我国的职业教育发展做出自己的贡献。五年来我学习到了大量的专业理论知识和动手实践技能,毕业设计是对我这五年来学习的最好总结。在毕业设计过程中我遇到了很多困难,正是因为这些困难使我学习到了很多有用的实用知识,加深了书本理论知识和实践的结合,这对我以后从事专业课教学工作是很有益处的。在大学的学习期间,我意识到了大学更重要的是教给我分析和解决问题的方法,这些必将对我以后的工作和生活产生深远的影响。
32、在毕业设计过程中,得到了曲老师的大力支持和帮助,请允许我向曲老师表示诚挚的感谢!五年来我见证了母校的发展壮大,希望母校再接再厉,健全体制,走向更加辉煌的明天。最后祝愿伟大的母校前程似锦!祝愿所有的老师身体健康,工作顺利! 附录附录1 程序清单附录2 系统使用说明附录3 英文资料附录4 系统PCB板图附录1:程序清单(1) 电话拨号报警程序 程序设计时需要设立3个数组DATA20、X3、Y3。DATA20用于存放电话号码(最长20位),X3用于存放时间t1(000999s),Y3用于存放时间t2(000999s)。 另外还要设立3个软件计数器data_flag、t1_flag、t2_flag。D
33、ata_flag用于统计输入的电话号码位长,t1_flag用于统计输入的时间t1位长,t2位长。uchar DATA20; /*存放电话号码的数组*/uchar X3; /*存放时间t1数组*/uchar Y3; /*存放时间t2数组*/uchar flag; /*RAM区防干扰标志*/ uchar dataflag=0; /*输入电话号码计数器(最长20位)*/uchar set=0; /*功能键值*/uchar m=0; /全局变量uchar n=0;uint f;uchar t1flag=0; /*输入时间t1计数器(最长3位)*/uchar t2flag=0; /*输入时间t2计数器(
34、最长3位)*/uchar cnt_1=0; /*时间t1单元数学运算后暂存单元*/uchar cnt_2=0; /*时间t2单元数学运算后暂存单元*/*定时器T0初始化*/ viod init_timer()TMOD=0x01; /定时器T0方式1 TH0=-(50000/256); /装载100ms定时初值TL0=-(50000%256);IE=0x82; /开中断 启动报警器子程序模块 /*-启动报警器进入警戒-*/void work()uchar h; p1=0xdf; /*数码管左上角显示“1”*/ delay(1);if(set=1) /*进入时间1循环*/while(cnt=X0*
35、100+X1*10+X2) EX1=1;cnt_1=0; /*时间1到,打开外中断1,计数器归零*/*进入待机。若有1s以上开关动作,退出待机*/while(1)PCON=0x01;if(f=5PCON=0x00;break;)EX1=0; /*关闭外中断1*/if(set=1) /*进入时间2循环*/while(cnt_2=Y0*100+Y1*10+Y2) delay(1000); cnt_2+; /*计时器cnt_2累加*/ if(set!=1)cnt_2=0;break; /*如按下Set键,则退出此循环*/if(set=1)bh(); /*时间2到,调用拨号子程序*/delay(300
36、0);p3_7=0; /控制输出端为低,可驱动蜂鸣器等for(h=0;h60;h+) /*发出60s警音*/ for(f=0;f500;f+) f+; P3_1=! P3_1;P1=0x5f; delay(1); P3_1=0;P1=0x7f;delay(500);P3_7=1;/控制输出端恢复高cnt_1=0;cnt_2=0; /*有关计数器、端口回到初始状态*/P3_0=0;P3_1=0;P1_7=1;for(f=0;f3;f+)delay(60000); /*关闭3min,让接警人进行手机或电话座机报警*/ 拨号脉冲子程序模块/*-拨号-*/void bh()data_flag=0; /
37、*电话号码计数器(20位)归零*/ P3_0=1; /*接通线路*/ p1_7=0; /*数码管小数点亮*/ delay(1000);while (DATAdata_flag0) /*若号码0但10*/ TR=1; /*启动T0定时器*/ if(n=(DATAdata_flag*2) /*进行号码x2次中断,产生号码个脉冲*/ data_flag+; n=0;TR0=0; P3_0=1;P1_7=0; delay(500);TR0=0; 关机子程序模块 void stop() /*关机子程序if(flag=0x55)P1=0xfb; /*若标志为55H,说明内存区未受干扰,数码 /管右下角显示
38、“1” else P1=0x86; /否则数码管显示“E”delay(1); /延时1ms再判if(flag=0x55)PCON=0x01; /进入低耗节电待机状态delay(1); /延时1ms 完整代码 #include /器件配置文件#define uchar unsigned char /变量类型的宏定义#define uint unsigned intuchar code DATA_7SEG10=0xC0,0xF9,0xA4,0xB0,0x99 0x92,0x82,0xF8,0x80,0x90,; /*09数码管段码*/uchar DATA20; /*存放电话号码的数组*/uchar
39、 x3; /*存放时间t2数组*/uchar flag; /*RAM区防干扰标志*/uchar data_flag=0; /*输入电话号码计数器(最长20位)*/uchar set=0; /* 功能键值*/uchar m=0; /全局变量uchar n=0;uint f;uchar t1_flag=0; /*输入时间1计数器(最长3位)*/uchar t2_flag=0; /*输入时间2 计数器(最长3位)*/uchar cnt_1=0; /*时间t1单元数学运算后暂存单元*/uchar cnt_2=0; /*时间t2单元数学运算后暂存单元*/void delay(uint k); /*延时子
40、函数声明*/void stop(); /*关机子函数声明*/void bh(); /*拨号子函数声明*/*定时器T0初始化*/void init_timer()TMOD=0x01;TH0=-(50000/256);TL0=-(50000%256);IE=0x82;/*100ms定时中断服务子函数*/void zd0()interrupt 1P3_0=! P3_0; /P3.0每100ms取反一次,送出脉冲P1_7=! P1_7; /数码管小数点同步闪烁n+;TH0=-(50000/256);TL0=-(50000%256);/*100ms定时中断服务子函数*/void zd0()interru
41、pt 1p3_0=!P3_0; /P3.0每100ms取反一次,送出脉冲P1_7=!P1_7; /数码管小数点同步闪烁n+;TH0=-(50000/256);TL0=-(50000%256);/*INT0中断服务子函数*/viod zd_int0()interrupt 0delay(10); if(P3_2=0)set+; /功能键值递增if(set=5)set=0; /键值的范围04if(set=1)flag=0x55; /向RAM区的标志flag写入55H PCON=0x00;f=8;again:if(P3_2=0)goto again; /若按键未释放,则等待/*INT1中断服务子函数*/void zd_int1()interrupt 2uchar h;f=0;for(h=0;h10;h+) /*检查磁性开关(P3_3状态)10次,共1s*/delay(100)if(P3_3=0)f+;/*-关机-*/void stop()if(flag=0x55)P1=0xfb;elsep1=0x86; /数码管右下角显示“1”。delay(1);if(flag=0x55)PCON=0x01; /*进入节电待机状态*/delay(1);/*延时1ms*K子函数*/void delay(uint k)uint i,j;for(i=1;jk;i+)for(j=0;j60