基于单片机控制的电铃控制器
- 格式:doc
- 大小:146.00 KB
- 文档页数:18
基于单片机的打铃系统一、系统简介打铃系统是一种用于管理学校、工厂、办公室等场所时间的设施,它可以自动地、准确地实现时间的管理。
本文所介绍的打铃系统基于单片机开发,通过编程实现各种铃声的播放,实现按时响铃的功能。
二、系统硬件组成打铃系统基于AT89S52单片机实现。
除了单片机之外,还需要以下硬件:1.时钟电路:用于提供准确的时钟信号。
2.按键:用于设定铃声和时间,以及启动和停止铃声。
3.位选器:用于选择哪个七段数码管进行显示。
4.七段数码管:用于显示当前时间和设定的时间。
5.蜂鸣器:用于播放铃声。
6.电源模块:用于提供系统所需的电源。
三、系统程序实现1.时钟模块时钟模块是整个打铃系统的核心模块,它通过内部定时器实现时钟计时。
定时器的具体参数需要根据外部晶体振荡器的频率进行设置。
在计时过程中,将当前时间实时显示在七段数码管上,并提供按键设置时间的功能。
2.铃声模块铃声模块主要负责蜂鸣器的控制,通过控制蜂鸣器的高低电平来实现各种铃声的播放。
在设定的时间到达时,蜂鸣器会自动响起预先设置好的铃声。
当按下停止键时,蜂鸣器会停止响铃。
四、系统优化设计为了提高打铃系统的稳定性和可靠性,需要进行一些优化设计。
其中的一些优化设计包括:1.电源管理:系统的电源管理非常重要,可以通过使用稳压器等组件来提高系统的抗噪声性能和稳定性。
2.按键处理:按键可以使用中断或轮询的方式进行处理,使用中断方式可以提高系统的实时性。
3.时钟精度:系统的时钟精度非常关键,需要使用高精度的外部晶体振荡器并进行一定的校准以提高时钟的准确性。
四、系统应用本文所介绍的打铃系统可以广泛应用于学校、工厂、办公室等场所。
它可以帮助管理者准确地掌握各个时间点,提高管理效率和准确性。
同时,通过优化设计可以大大提高系统的性能和稳定性。
五、总结打铃系统是一种非常实用的设施,通过单片机等电子技术的应用,可以实现自动化、智能化的时间管理。
本文介绍了基于单片机的打铃系统的硬件组成和程序实现,以及针对性的优化设计,以期为相关领域的读者提供一些借鉴和参考。
目录第一部分设计任务 (2)1、毕业设计的主要任务 (2)2、单片机总体设计思路 (2)第二部分设计说明 (3)1、单片机介绍 (3)2、设计说明 (3)3、软件设计 (8)第三部分设计成果 (12)1、开机运行图 (12)2、自动打铃器源程序 (12)第四部分结束语 (15)第五部分致谢 (18)第六部分参考文献 (19)第一部分设计任务1、毕业设计的主要任务设计一个采用4位数码管显示时间秒、分、时,伴有调时校正电路,响铃控制则是通过作息时间表和定时器来实现自动打铃的单片机控制系统。
对于不同的季节,作息时间可能不同,可以制定多个作息时间表采用开关切换达到目的。
本设计采用了1个开关实现夏季和冬季作息时间的切换,完成一个自动循环。
2、单片机总体设计思路(1)设计能正常工作的一个单片机最小硬件系统,外围电路包括设置键盘,LCD或LED的显示屏。
(2)进行软件设计,利用单片机系统时钟先设计一个高精度的内部时钟系统,最小精确时间为期1秒。
(3)在秒计数器的基础上设计一个24小时时钟,并设计若干定时功能。
(4)设计打铃执行机构,完成自动打铃功能。
第二部分设计说明1、单片机介绍本系统主要由主控模块,时钟模块,显示模块,键盘接口模块等4部分构成。
通过内部定时产生中断,从而使驱动电铃打铃。
设定51单片机工作在定时器工作方式1,每100ms产生一次中断,利用软件将基准100ms单元进行累加,当定时器产生10次中断就产生1S信号,这是秒单元加1。
同理,对分单有采用动态扫描LED的显示。
本系统采用四个按键,当时钟时间和设置时间一直时元和时单元计数从而产生秒、分、时的值,通过六位七段显示器进行显示。
由于动态显示法需要数据所存等硬件,接口作,进行打铃,每次打铃30s较复杂,考虑显示只有六位,且系统没有其他浮躁的处理程序。
2、设计说明2.1 AT89C51简介一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。
基于单片机的自动打铃器设计随着社会的发展和科学技术的进步,大部分单位对于时间有严格的管理制度,能够实现在预定时间进行打铃的设备也成为必需品。
本文单片机AT89C51为核心,加入了键盘输入,时间显示等模块,可以满足日常使用所需的功能。
标签:AT89C51;自动打铃器;时间;显示为了方便人们的生活和工作,自动打铃器广泛于学校、工厂、企业等有比较固定作息时间的单位。
尤其是学校,要按时打铃,以指挥师生员工上课、下课等统一行动。
现在我们可以利用单片机设计自动打铃器,在预定的时间打铃。
这项设计涉及到单片机的定时器、中断、键盘输入、LCD数码和字符显示、I2C总线、单总线、开关量输出等内容。
1 总体设计总体设计,其中最主要的就是原理设计。
根据设计要求和现有的技术条件,在满足功能、性能等用户需求的基础上,初步提出可选技术路线,并对各方案进行必要的分析,充分听取方方面面的意见,选择一种实施方案。
本项目的实施方案如下:选用机型:AT89C51(可以使用简化版AT89C2051)。
这是美国ATMEL公司生产的与INTEL公司的MCS-51系列全兼容的单片机产品,指令兼容,引脚兼容,可以直接代换。
其优点是片内程序存储器是电擦写的,使用方便,耗电少,价格低。
时间显示:16位×2行的液晶显示模块1602,显示内容比较多。
并行口连接。
键盘输入:4个独立式按键,分别是对表、定时、临时打铃和上、下、左、右调整键打铃输出:经二级晶体管放大驱动12V直流继电器,控制220V电源通、断电铃。
系统扩展:不需要扩展RAM、ROM、和其它I/O接口,只需要通过I2C总线扩展一片24LC16B,用于保存打铃时间,以保证掉电不丢失,免得重新设置之麻烦。
电源部分:220V交流电经降压、整流、滤波、稳压,提供+12V和+5V两种直流电源,再加可充电电池作备用电源,停电时保持时钟和作息时间表。
交流供电时给电池充电。
现在,专用的日历时钟芯片很多,性能也很好,尤其是精度可以很高,省电,使用方便。
摘要近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。
简易自动打铃系统的出现,使学校上下课铃声得以有效管制,对于减轻学校管理人员工作量、提高学校各工作效率,减少管理人员因忘记打铃,从而导致老师拖延课程时间起到明显效果。
本系统采用单片机STC89C52为中心器件来设计简易自动打铃控制器,系统实用性强、操作简单、扩展性强。
关键词:单片机;8255扩张芯片;数码管显示时钟模块;键盘调时钟模块;定时蜂鸣器鸣叫模块。
目录简易自动打铃系统 (1)设计要求 (1)1方案论证与对比 (1)1.1方案一 (1)1.2方案二 (1)1.3方案对比与选择 (1)2单元电路设计与计算 (2)2.1复位电路 (2)2.2时钟电路 (2)2.3按键电路 (3)2.4数码显示功能说明 (4)2.5蜂鸣器电路 (4)3系统软件工作流程 (5)3.1系统软件设计流程图 (5)3.2按键处理流程图 (5)3.3定时器中断流程图 (6)3.4响铃流程图 (7)4系统功能测试与整体指标 (8)4.1系统各功能模块的性能调试与测试 (8)4.2系统功能测试 (9)4.3系统误差原因分析 (9)4.4系统整体指标测试 (9)5详细仪器清单 (10)6总结与思考致谢 (10)7参考文献 (11)附录一:总设计原理图 (11)附录二:总设计PCB板图 (12)附录三:程序 (13)简易自动打铃系统设计要求利用单片机作为控制核心,完成一个简易自动打铃系统。
具体功能要求如下:(1)基本计时和显示功能(12小时制)。
可设置当前时间(包括上下午标志,时、分的数字显示)。
(2)能实现基本打铃功能,规定:上午7:30早自习:打铃5秒、停2秒、再打铃5秒。
【关键字】设计CHANGZHOU INSTITUTE OF TECHNOLOGY科研实践题目:基于单片机的打铃器设计二级学院(直属学部):延陵学院专业:电气工程及其自动化班级:10电Y3学生姓名:学号:指导教师姓名:范力旻职称:副教授至摘要单片机自1976年由Inter公司推出MCG-48开始,迄今已有二十多年了。
由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,几乎“无处不在,无所不为”。
单片机的应用领域已经从面相工业控制、通讯、交通。
智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子、PC机外围以及网络通讯等广大领域。
按照内部数据通道的宽度,单片机可分为4位、8位、16位及32位等。
单片机的中央处理器(CPU)和通用微处理器基本相同,只是增设了“面向控制”的处理功能。
例如:位处理、查表、多种地址询问方式、多种跳转、乘除法运算、状态监控、中断处理器,强了实时性。
本设计以AT89S52芯片为核心,利用DS1302作时钟芯片,具有实时显示当前时间,按设定时间报时,能修改当前时钟等功能。
关键词:定时打铃;DS1302时钟;LCD1602液晶显示目录第一章绪论1.1 选题背景及研究意义随着科技的不断发展,各种芯片都得到了很好的发展,89S52同样如此,从开始的无人问津到现在的随处可见,红绿灯,记分牌,电子秒表,遥控器,电饭煲,电视等只要是电子产品,都会和芯片有关,其实芯片并不是什么神秘的高科技,它只是里面装了一些己编好的程序而己.而自动打铃系统是用汇编语言来编程的一个系统,它能够让一个学校或企业集团实现打铃自动化,总之,一个需要时间系统的机构实现自动提醒功能。
当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
目录1、课程设计目的 (2)2、总体设计 (2)2.1 模块设计 (2)2.2 程序流程图 (2)3、硬件单元设计 (4)3.1电路设计总原理图 (4)3.2各模块电路设计 (4)3.2.1 键盘扫描模块 (4)3.2.2 时钟和复位模块 (4)3.2.3 显示模块 (5)3.2.4 响铃模块 (6)4、软件设计 (7)4.1键盘扫描程序 (8)4.2数码管显示程序 (10)4.3主程序 (11)4.4响铃程序 (12)5、课程设计总结 (15)6、参考文献 (16)2.总体设计2.1 模块设计教学用电子打铃器主要由AT89S51单片机、键盘扫描模块、时钟和复位模块、打铃器模块、八段数码管显示模块等组成。
运用汇编语言来控制单片机80C51来实现、动态数码显示等功能。
且本设计中的80C51单片机是整个工作过程的核心,是整个设计灵魂,它控制了脉冲时序的产生,显示信号的发送控制显示LED 的选择。
所用到的芯片元器件:80C51单片机, 3个按键,1个蜂鸣器,4个八段LED 数码管 80C51是一种带4K 字节存储器(的低电压、高性能CMOS 8位微处理器,俗称单片机。
2.2 程序流程图图2.2(1) 主程序流图2.2(1) 主程序程序流程图图2.2(2) 定时中断程序流程图3.硬件单元设计开始初始化参数设置调用显示子程序调用打铃对比程序调用键盘子程序3.1 电路设计总原理图图3.1 总体原理图3.2 各模块电路设计3.2.1 键盘扫描模块利用四个按键进行校时,按键K1是调整时间选择,按键K2进行小时加1,按键K 3进行分钟加1,按键K4则调整时间结束返回主程序, K1接P1.1,K2接P1.2,K3接P1.3,K4接P1.4。
3.2.2 时钟和复位模块图3.2.2 时钟和复位模块3.2.3显示模块及芯片说明根据设计要求系统需要4个共阳LED,数码管显示电路使用80C51的动态显示功能。
4个LED八段(a、b、c、d、e、f、g、dp),数码管分别显示:“时”、“分”,用二极管的“点”作为时、分的间隔。
校园自动打铃器作息时钟摘要本文介绍了以AT89S51单片机为控制核心的自动打铃器产品,该电路具有时钟功能,可通过产品的上的设置键对要报警的时间点逐个的设置进去,打玲器只要走到设置好的时间就能报警。
输出效果由报警模块与显示模块组成,显示模块主要采用数码管来显示时间,让人们可以看到自动打铃器的时间是否与我们生活的时间一致,如果有误差则可以通过按键对时间进行调整。
该打铃器是一种电路比较简单,功能完善,且比较实用的自动打铃器。
它不但可以适用于学校及企业工厂等场所。
关键字:单片机自动控制数码显示调整目录一.引言 (3)二.方案比较 (4)2.1方案一基于数模电路的自动打铃器 (4)2.2方案二基于A T89S51控制的自动打铃器 (5)三.硬件电路设计 (5)3.1微控制器 (5)3.2振荡电路 (6)3.3复位电路 (6)3.4控键电路 (7)3.5显示电路 (8)3.6报警电路 (9)四.软件系统设计 (10)4.1主程序设计 (10)4.2定时1mS子程序设计 (10)4.3显示子程序设计 (10)4.4软件抗干扰设计 (11)五.系统调试与测试 (13)5.1软件仿真 (13)5.2硬件电路安装 (14)5.2.1单片机振荡电路安装 (14)5.2.2单片机复位电路安装 (14)5.2.3单片机控键电路安装 (14)5.2.4单片机显示电路安装 (15)5.2.5单片机报警电路安装 (15)5.2.6整机电路安装与调试 (15)结束语............................................................................................................. 错误!未定义书签。
参考文献.. (16)附录1:总设计原理图 (17)附录2:源程序 (18)一.引言打铃器是一种广泛应用于企业和学校单位。
就以对学校单位而言,自动打铃器是为了对了广大师生的作息时间做更好的管理,它一种学校必备电子设备,也是一种逐渐成型的电子产品,打铃器多为小规模集成电路构成,其性能单一,工作起来不够理想。
基于单片机控制的电铃控制器一.设计要求(一)基本功能1.显示:可以显示星期、时、分和秒2.打铃:每天可设置20次,打铃持续时间每次1-90秒可调,每次打铃的间隔时间1-99分钟可调。
3.铃声:内置蜂鸣器可以发出监控声音(二)性能时间日误差< 1.5秒(三)扩展功能1.可设定单/双休息日不打铃2.随季节变化,每天自动调整开与关的时间二.计划完成时间三周1.第一周完成软件和硬件的整体设计,同时按要求上交设计报告一份。
2.第二周完成软件的具体设计和硬件的制作。
3.第三周完成软件和硬件的联合调试。
三.编写设计报告写出设计的全过程,附上有关资料和图纸,有心得体会。
四.答辩在规定时间内,完成叙述并回答问题。
目录1引言 (1)2总体设计方案 (1)2.1设计思路 (1)2.2总体设计框图 (1)2.3设计方案 (1)3设计原理分析 (2)3.1按键功能 (2)3.2状态指示 (2)3.3打铃控制 (2)3.4电路原理图 (2)4程序流程框图 (3)4.1总体程序流程图 (3)4.2主程序流程图 (3)4.3校时程序流程图 (4)4.4时钟打铃程序流程图 (4)5心得与体会 (5)参考文献 (5)附录 (6)基于单片机控制的电铃控制器班级:应教053班姓名:李胜涛摘要:该设计介绍了一种以AT89S51单片机为核心,以七段数码管显示星期、时、分和秒,发光二极管作为指示灯标志及按键较时、定时的自动打铃器。
关键词:单片机电铃自动数码管1引言当今社会,随着科学技术的快速发展,自动控制在人们的生活中可以说“无孔不入”,小到遥控儿童玩具,大到冰箱空调的智能化,都体现了科学技术的进步。
特别是单片机(Single-Chip Microcomputer SCM)技术的应用,不但降低了生产成本,同时也方便了消费者,使操作简洁、安全。
单片机的应用使许多复杂的事情,都能够简单、方便的实现了。
用单片机控制的自动打铃器,充分发挥单片机体积小,价格便宜,功耗低,可靠性好等特点,充分发挥了单片机的控制优势。
基于单片机控制的电铃控制器一.设计要求(一)基本功能1.显示:可以显示星期、时、分和秒2.打铃:每天可设置20次,打铃持续时间每次1-90秒可调,每次打铃的间隔时间1-99 分钟可调.3.铃声:内置蜂鸣器可以发出监控声音(二)性能: 时间日误差< 1.5秒(三)扩展功能:1.可设定单/双休息日不打铃2.随季节变化,每天自动调整开与关的时间目录1引言 (1)2总体设计方案 (1)2.1设计思路 (1)2.2总体设计框图 (1)2.3设计方案 (1)3设计原理分析 (2)3.1按键功能 (2)3.2状态指示 (2)3.3打铃控制 (2)3.4电路原理图 (2)4程序流程框图 (3)4.1总体程序流程图 (3)4.2主程序流程图 (3)4.3校时程序流程图 (4)4.4时钟打铃程序流程图 (4)5心得与体会 (5)参考文献 (5)附录 (6)基于单片机控制的电铃控制器摘要:该设计介绍了一种以AT89c51单片机为核心,以七段数码管显示星期、时、分和秒,发光二极管作为指示灯标志及按键较时、定时的自动打铃器。
关键词:单片机电铃自动数码管1引言基于目前传统电铃噪音大,声音刺耳,不符合人们追求绿色环保的要求,我们采用89c51单片机设计了一套自动打铃系统。
单片机(Single-Chip Microcomputer SCM)技术的应用,不但降低了生产成本,同时也方便了消费者,使操作简洁、安全。
单片机的应用使许多复杂的事情,都能够简单、方便的实现了。
用单片机控制的自动打铃器,充分发挥单片机体积小,价格便宜,功耗低,可靠性好等特点,充分发挥了单片机的控制优势。
本打铃器可用于作息时间控制,方便了广大师生。
2总体设计方案:2.1设计思路利用单片机及其定时器设计的一个时钟,在每次毫秒加1的计时过程中,都与设定的打铃时间作比较,如果相等就输出打铃信号,不等则返回。
如此反复运行。
2.2总体设计框图键盘电路复位电路数码管显示状态指示打铃信号AT89S51图1 总体设计框图2.3设计方案根据设计任务的基本要求,设计了由单片机(AT89S51)作为主控器件,七段数码管作为显示电路,七个按键组成的按键操作电路,七个发光二极管组成的状态指示电路,以及三极管、蜂鸣器组成的报警提示电路和继电器组成的打铃信号输出电路构成的自动打铃器。
除了以上的硬件电路外,还充分利用软件、硬件相结合,充分发挥单片机设计的优势。
使设计更具特色。
系统可分成三部分,即时钟电路、时间显示电路、控制电路,而时钟电路起控制主导作用。
时钟电路的构成由单片机及其定时器完成,时间显示电路则由单片机串口输出,送到外部集成芯片74LS164,最后由七段数码管显示出来。
控制电路主要控制着复位电路、校时以及设置打铃点等操作,并配以状态指示电路辅助操作。
3设计原理分析:3.1按键功能初步设计了由六个按键来完成所有的操作,它们的功能分别是:复位键、设置键、存储键、加一键、减一键、确认键,具体操作方法由软件设计为菜单式操作,使所有的操作更加的简洁,方便。
3.2状态指示状态指示电路由硬件部分(六个发光二极管),结合软件使操作状态一目了然。
第一个发光二极管亮时候,表明当前状态为时间显示;第二个发光二极管亮时候,表明此状态为时间调整状态;第三个发光二极管亮时候,表明此状态为时间加一状态;第四个发光二极管亮时候,表明此状态为时间减一状态;第五个发光二极管亮时候,表明此状态为定时时间设定存储状态。
3.3打铃控制比较所存储的打零时间点,到打铃时间时进行打铃。
3.4电路原理图图2 总体电路图图2中,S1为确认键,S2为设置键,S3为加一键,S4为减一键,S5为存储键,S7为复位键。
当S2按下时L2亮,S3按下时L3亮,S4按下时L4亮,S5按下时L5亮。
L1为正常运行指示。
S5,L6暂无使用。
蜂鸣器在每个操作时给予报警提示。
继电器电路作为打铃信号输出电路,对外提供打铃信号。
4程序流程框图4.1总体程序流程图根据硬件设计结果,为满足要求,程序应有主程序、按键处理程序、中断服务程序和显示程序等部分构成。
主程序中主要是程序各部分的初始化;按键处理程序处理五个按键的操作,包括各个按键的响应程序以及按键指示、闪烁指示、报警输出等;显示程序显示星期、时、分、秒,主要是时钟显示。
初始化主程序按键处理程序中断服务程序显示程序图3 总体程序流程图4.2主程序流程图该部分程序主要是对程序中所用到的数据单元进行初始化,以及定时器的赋初值。
定时器初始化初始化各单元响应中断计时中断打铃中断显示校时图4 主程序流程图4.3校时程序流程图该部分的键盘扫描为程序扫描方式,CPU 不停的对P1口进行扫描,当任何一个键按下时,与之相连的输入数据线即被清0(低电平),而平时该线为1(高电平)。
这种键盘扫描方式的优点是电路简单:缺点是当键数较多时,要占用较多的I/O 线。
由于按键的机械特性,在闭合及断开的瞬间均伴随有一连串的抖动,键抖动会引起一次按键被误读多次。
为了确保CPU 对键的一次闭合仅作一次处理,必须去除键抖动。
该程序使用10ms 延时程序作为去抖动程序去除键抖动。
校时程序设置键星期调整小时调整分钟调整秒调整调用闪烁子程序调用显示子程序退出?加一?减一?确定?保存设置Y N N N NY Y Y图5 校时程序流程图4.4时钟打铃程序流程图时钟打铃程序使用单片机T0、T1两个定时器中断,两个定时器均为方式一,初值为10ms ,当定时器T0溢出时响应中断,使毫秒单元加1,当毫秒单元满100时分单元加1,依此类推。
当定时器T1溢出时响应中断,依次比较存储的打铃点,条件符合就输出打铃信号。
中断均需保护现场,返回时恢复现场。
T0中断保护现场1秒到 ?秒单元加 1=60秒 ?秒单元清 0,分单元加 1分单元清 0,小时单元加 1小时单元清 0,星期单元加 1星期单元清 1调用显示程序恢复现场,中断返回=24时 ?=60分 ?=7天 ?Y YYYYNNNNNT1中断保护现场比较小时小时相等 ?比较分钟分钟相等 ?打铃比较 20 打铃点 ?调用显示程序恢复现场,中断返回YYYNN N图6 时钟打铃中断程序流程图5心得与体会:周一老师布置了课程设计的任务,老师没有像其他小组一样好几个人做一个题目,而是让我们小组每人做一个题目,这给了我们足够的 空间,我们可以按照自己的想法去做,做自己感兴趣的东西。
我几经周折最终选择做一个单片机控制的电铃,电铃可以按照我在程序中设定的时间自动打铃。
开始就是上网查资料,去图书馆找有关方面的书籍,东拼西凑。
周三才把程序和电路图做好。
在上机调试的时候遇到了很大的麻烦,程序运行没有错误,就是连接电路时发现我用到的芯片实验台上都没有,我又找其他芯片代替,可没有找到合适,以至于调试不成功。
总之在这一周的课程设计中,我学到了很多课堂上学不到的东西,也深刻的体验到了实践的重要性。
只学习理论而不实践,那理论就是一具空壳。
只有实践才能检验自己所学的理论知识。
实践的好处就在于能帮助你去更好地理解理论知识,平时课堂上不理解的东西,在实践的过程中就能很好的理解。
虽然这次课程设计上机调试没有成功,但是我自己毕竟努力做了。
参考文献:[1] 周航慈.单片机应用程序设计基础[M].北京:电子工业出版社,1997年7月 [2] 朱承高.电工及电子技术手册[M].北京:高等教育出版社,1990[3] 阎石.数字电子技术基础(第三版)[M].北京:高等教育出版社,1989[4] 廖常初.现场总线概述[J].电工技术,1999.6[5] 李朝青.单片机原理及接口技术(第三版)[M].北京;北京航空航天大学出版社,2005年10月附录1程序分为五部分:1.初始化程序,2.键值处理程序,3.中断程序,4.显示程序,5.延时程序2程序清单:ORG 0000HLJMP MAINORG 000BHLJMP TOINTORG 001BHLJMP DLBJ;**********主程序**********ORG 30HMAIN: MOV IE,#8AH ;开T0,T1中断MOV TMOD,#11H ;定时器方式1MOV TH0,#0D8HMOV TL0,#0F0H ;初值MOV A,#0MOV 59H,AMOV 60H,AMOV 61H,AMOV 62H,AMOV 63H,AMOV 64H,AMOV 65H,AMOV 66H,A;清零m_sec EQU 20H ;毫秒单元sec EQU 21H ;秒单元min EQU 22H ;分单元hour EQU 23H ;时单元week EQU 24H ;星期单元SETB TR0SETB TR1CLR P1.0CLR AMOV R0,AMOV R1,AMOV R2,AMOV R3,AMOV R5,AMOV R6,AMOV R7,AMOV ms ,#00 ;毫秒单元清零MOV sec ,#00 ;秒单元清零MOV min ,#00 ;分单元清零MOV hour ,#00 ;时单元清零MOV week ,#00 ;星期单元清零MOV 70H,AMOV 71H,AMOV 72H,AMOV 73H,AMOV 74H,ALCALL XS ;调用显示程序;************************************************;*****************数字钟按键程序*****************;************************************************;**********调时钟按键**********NET1: JB P0.0,NET2LCALL YS10MSJB P0.0,NET2CLR p2.2JNB P0.0,$SETB p2.2CLR P1.1SETB P1.0SETB TR0 ;开中断SETB TR1CLR P1.0 ;正常运行SETB P1.1SETB P1.2SETB P1.3MOV 59H,#00MOV R7,#00**** ************调整时间部分切换键******************** NET2: MOV A ,59HCJNE A ,#00 ,NET3JB P0.1 ,NET9 ;数字钟调整时间部分切换键LCALL YS10MsJB P0.1 ,NET9CLR p2.2INC 59HJNB P0.1 ,$SETB p2.2INC R7CLR TR0CLR TR1SJMP NET4NET3: JB P0.1 ,NET4LCALL YS10msJB P0.1 ,NET4CLR p2.2INC 59HJNB P0.1 ,$SETB p2.2INC R7NET4: CJNE R7 ,#1 ,NET5LCALL SSH ;秒闪烁SJMP NET9NET5: CJNE R7 ,#2 ,NET6LCALL MSH ;分闪烁SJMP NET9NET6: CJNE R7 ,#3 ,NET7LCALL HSH ;时闪烁SJMP NET9NET7: MOV R7 ,#0LCALL WSH ;星期闪烁SJMP NET9NET8: LCALL XS;******************调整时间加1键*****************NET9: JB P0.2 ,NET115 ;数字钟调整时间键LCALL YS10msJB P0.2 ,NET13CLR p2.2CLR P1.2CJNE R7 ,#1 ,NET10SETB p2.2SETB P1.3LCALL YS200msINC sec ;秒单元加1MOV A ,secCJNE A ,#60 ,NET8 ;不等60时跳转显示,等60时将秒单元清零MOV sec ,#00LCALL XSJB P0.2 ,NET13LJMP NET9NET115: LJMP NET15NET10: CJNE R7 ,#2 ,NET11SETB p2.2SETB P1.3LCALL YS200msINC min ;分单元加1MOV A ,minCJNE A ,#60 ,NET8 ;不等60时跳转显示,等60时将分单元清零MOV min ,#00LCALL XSJB P0.2 ,NET13LJMP NET9NET11: CJNE R7 ,#3 ,NET12SETB p2.2SETB P1.3LCALL YS200msINC hour ;时单元加1MOV A ,hourCJNE A ,#24 ,NET8 ;不等24时跳转显示,等24时将时单元清零MOV hour ,#00LCALL XSJB P0.2 ,NET13LJMP NET9NET12: SETB p2.2SETB P1.3LCALL YS200msINC week ;星期单元加1MOV A ,weekCJNE A ,#08 ,NET8 ;不等7时跳转显示,等7时将星期单元清零MOV week ,#01LCALL XSJNB P0.2 ,NET13LJMP NET9NET13: SJMP NET15NET14: LCALL XS****************调整时间减1键**********************NET15: JB P0.3 ,NET19 ;数字钟调整时间键LCALL YS10msJB P0.3 ,NET19CLR P2.2CLR P1.3CJNE R7 ,#1 ,NET16SETB P2.2SETB P1.2LCALL YS200msDEC sec ;秒单元减1MOV A ,secCJNE A ,#0FFH ,NET14 ;不等60时跳转显示,等60时将秒单元清零MOV sec ,#59LCALL NET14JB P0.3 ,NET19LJMP NET15NET16: CJNE R7 ,#2 ,NET17SETB P2.2SETB P1.2LCALL YS200msDEC min ;分单元减1MOV A ,minCJNE A ,#0FFH ,NET14 ;不等60时跳转显示,等60时将分单元清零MOV min ,#59LCALL NET14JB P0.3 ,NET19LJMP NET15NET17: CJNE R7 ,#3 ,NET18SETB P2.2SETB P1.2LCALL YS200msDEC hour ;时单元减1MOV A ,hourCJNE A ,#0FFH ,NET14 ;不等24时跳转显示,等24时将时单元清零MOV hour ,#23LCALL NET14JB P0.3 ,NET19LJMP NET15NET18: SETB P2.2SETB P1.2LCALL YS200msDEC week ;星期单元减1MOV A ,weekCJNE A ,#00 ,NET14 ;不等7时跳转显示,等7时将星期单元清1MOV week ,#07LCALL NET14JB P0.3 ,NET19LJMP NET15NET19: LJMP DSH********************定时程序*********************DSH: MOV R2,#00JB P0.4 ,NT11LCALL YS10msJB P0.4 ,NT11CLR P2.2CLR P1.4JNB P0.4,$SETB P2.2INC R2CJNE R2,#01,NTA ;第1个打铃点MOV R1,#30HLCALL CUNNT11: LJMP NT1NTA: CJNE R2,#02,NTB ;第2个打铃点LCALL CUNNTB: CJNE R2,#03,NTC ;第3个打铃点LCALL CUNNTC: CJNE R2,#04,NTD ;第4个打铃点LCALL CUNNTD: CJNE R2,#05,NTE ;第5个打铃点LCALL CUNNTE: CJNE R2,#06,NTF ;第6个打铃点LCALL CUNNTF: CJNE R2,#07,NTG ;第7个打铃点LCALL CUNNTG: CJNE R2,#08,NTH ;第8个打铃点LCALL CUNNTH: CJNE R2,#09,NTI ;第9个打铃点LCALL CUNNTI: CJNE R2,#10,NTJ ;第10个打铃点LCALL CUNNTJ: CJNE R2,#11,NTK ;第11个打铃点LCALL CUNNTK: CJNE R2,#12,NTL ;第12个打铃点LCALL CUNNTL: CJNE R2,#13,NTM ;第13个打铃点LCALL CUNNTM: CJNE R2,#14,NTN ;第14个打铃点LCALL CUNNTN: CJNE R2,#15,NTO ;第15个打铃点LCALL CUNNTO: CJNE R2,#16,NTP ;第16个打铃点LCALL CUNNTP: CJNE R2,#17,NTQ ;第17个打铃点LCALL CUNNTQ: CJNE R2,#18,NTR ;第18个打铃点LCALL CUNNTR: CJNE R2,#19,NTS ;第19个打铃点LCALL CUNNTS: CJNE R2,#20,NT1 ;第20个打铃点LCALL CUNNT1: LJMP NET1;****************打铃点存储子程序******************** CUN:MOV @R1,hourINC R1MOV @R1,minINC R1;********************时钟中断程序********************* TOINT:PUSH PSWPUSH ACC ;保护现场MOV TH0 ,#0D8HMOV TL0 ,#0F0H ;重新赋计数初值INC ms ;毫秒单元加1MOV A ,msCJNE A ,#100 ,NEXT1MOV ms ,#00INC sec ;秒单元加1MOV A ,secCJNE A ,#60 ,NEXT1MOV sec ,#00INC min ;MOV A ,minCJNE A ,#60 ,NEXT1MOV min ,#00INC hour ;MOV A ,hourCJNE A ,#24 ,NEXT1MOV hour ,#00INC weekMOV A ,weekCJNE A ,#08 ,NEXT1MOV week ,#01NEXT1: LCALL XSPOP ACCPOP PSW ;恢复现场RETI ;中断返回;********************打铃中断程序********************* DLBJ:PUSH PSWPUSH ACCMOV TH0,#0D8HMOV TL0,#0F0HMOV R0,#30HFH: MOV A,@R0CJNE A,hour,LOP1INC R0MOV A,@R0CJNE A,min,LOP2CLR P2.2CLR P1.4 ;铃声响LCALL YS1min ;延时1分钟SETB P2.2SETB P1.4 ;铃声停CLR AMOV 7FH ,AAJMP LOP2LOP1: INC R0LOP2: INC R0CJNE R0,#58H,FHLOP3: LCALL XSPOP PSWPOP ACCRETI;********************数字钟显示程序****************** XS: MOV A ,sec ;将秒送AMOV B ,#10DIV ABMOV 60H ,B ;秒的个位MOV 61H ,A ;秒的十位MOV A ,min ;将分送AMOV B ,#10DIV ABMOV 62H ,B ;分的个位MOV 63H ,A ;分的十位MOV A ,hour ;将时送AMOV B ,#10DIV ABMOV 64H ,B ;时的个位MOV 65H ,A ;时的十位MOV A ,week ;星期的送AMOV B ,#10DIV ABMOV 66H ,B ;星期的个位LCP: MOV R1 ,#60HMOV R5 ,#7MOV DPTR ,#TABBK: MOV A ,@R1MOVC A ,@A+DPTRMOV SBUF ,AJNB TI ,$CLR TIINC R1DJNZ R5 ,BKRETTAB: DB 11H,0D7H,32H,92H ,0D4H,98H,18H,0D3H,10H,90H ;*******************延时10ms子程序****************** YS10ms: MOV R2 ,#10HTS1: MOV R3 ,#0FFHTS2: DJNZ R3 ,TS2DJNZ R2 ,TS1RET;*******************延时1分钟子程序****************** YS1min: MOV 70H ,#100DL6: MOV 71H ,#10HDL5: MOV 72H ,#0FFHDL4: DJNZ 72H ,DL4DJNZ 71H ,DL5DJNZ 70H ,DL6RET;*******************延时200ms子程序******************* YS200ms: MOV R3 ,#20DL3: MOV R4 ,#10HDL2: MOV R5 ,#0FFHDL1: DJNZ R5 ,DL1DJNZ R4 ,DL2DJNZ R3 ,DL3RET;****************秒显示闪烁子程序******************** SSH: LCALL XSLCALL YS200msMOV A ,#0FFHMOV B ,#0FFHMOV 60H ,BMOV 61H ,ALCALL LCPLCALL YS200msRET;****************分显示闪烁子程序******************** MSH: LCALL XSLCALL YS200msMOV A ,#0FFHMOV B ,#0FFHMOV 62H ,BMOV 63H ,ALCALL LCPLCALL YS200msRET;****************时显示闪烁子程序******************** HSH: LCALL XSLCALL YS200msMOV A ,#0FFHMOV B ,#0FFHMOV 64H ,BMOV 65H ,ALCALL LCPLCALL YS200msRET;****************星期显示闪烁子程序******************** WSH: LCALL XSLCALL YS200msMOV A ,#0FFHMOV B ,#0FFHMOV 66H ,BLCALL LCPLCALL YS200msRETEND;****************打铃点存储子程序******************** CUN: MOV R1 ,#30HMOV @R1 ,hourINC R1MOV @R1 ,minINC R1。