可编程作息时间控制器设计

合集下载

PLC上下课打铃系统设计

PLC上下课打铃系统设计

P L C 课程设计上下课自动打铃系统目录绪论 (1)PLC可编程控制器的定义 (1)1.1 PLC可编程控制器的特点 (3)1.2 PLC可编程控制器趋势与动向 (4)2任务及其要求 (6)2.1设计任务 (6)2.2设计要求 (6)3 系统硬件部分设计 (7)3.1控制系统的元器件选择及地址分配 (7)3.2控制系统外部接线图 (8)4 主程序设计及功能 (8)4.1主程序流程图设计 (9)4.2主程序顺序功能图设计 (10)4.3主程序梯形图设计 (11)5 程序的调试 (13)6 系统操作说明 (13)7 收获与体会 (13)参考文献 (14)绪论1 PLC可编程控制器的定义PLC是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。

它采用可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算术运算等操作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。

PLC及其有关的外围设备都应该按易于与工业控制系统形成一个整体,易于扩展其功能的原则而设计。

1.1 PLC可编程控制器的特点(1)可靠性高,抗干扰能力强PLC用软件代替大量的中间继电器和时间继电器,仅剩下与输入和输出有关的少量硬件,接线可减少到继电器控制系统的1/10--1/100,因触点接触不良造成的故障大为减少。

高可靠性是电气控制设备的关键性能。

PLC由于采用现代大规模集成电路技术,采用严格的生产工艺制造,内部电路采取了先进的抗干扰技术,具有很高的可靠性。

例如三菱公司生产的F系列PLC平均无故障时间高达30万小时。

一些使用冗余CPU的PLC的平均无故障工作时间则更长。

从PLC的机外电路来说,使用PLC构成控制系统,和同等规模的继电接触器系统相比,电气接线及开关接点已减少到数百甚至数千分之一,故障也就大大降低。

此外,PLC带有硬件故障自我检测功能,出现故障时可及时发出警报信息。

在应用软件中,应用者还可以编入外围器件的故障自诊断程序,使系统中除PLC以外的电路及设备也获得故障自诊断保护。

可编程作息时间控制器设计

可编程作息时间控制器设计

可编程作息时间控制器设计作息时间控制器是一种用来帮助人们管理健康作息时间的设备。

它可以根据个人的需求和习惯自定义作息时间,并通过可编程功能来控制各种任务和提醒。

作息时间控制器的设计主要分为硬件和软件两个部分。

硬件部分包括显示屏、按钮、电源供应和时钟模块等,用于显示时间和设置参数。

软件部分则负责运行用户设置的程序,实现相应的功能。

首先,用户可以通过硬件部分的按钮界面来设置睡眠时间和起床时间。

可以根据个人需要设置每天起床时间、睡眠时间、午休时间和提醒时间等。

用户还可以设置不同的作息时间表,如工作日和周末的作息时间可以不一样。

其次,作息时间控制器可以通过软件部分的程序来控制各种任务和提醒。

用户可以设置不同的任务,如早晨运动、午休、提醒喝水等,控制器会在设定的时间触发相应的提醒。

此外,控制器还可以通过定时器功能来控制其他设备,如自动开启关闭灯光、咖啡机等。

最后,作息时间控制器还可以提供统计和分析功能来帮助用户更好地管理作息时间。

它可以记录用户的作息时间,并生成相应的报告,帮助用户了解自己的作息情况和睡眠数据,以便做出相应的调整。

总而言之,可编程作息时间控制器是一种方便实用的设备,它能够帮助人们管理健康的作息时间。

通过具备硬件和软件的设计,用户可以自定义作息时间、设置任务和提醒,并通过统计和分析数据来实现更好的作息管理。

作息时间对于个人的健康和生活品质有着重要的影响。

良好的作息时间可以提高工作和学习效率,增加身体健康和免疫力,改善睡眠质量和心理状态。

然而,现代社会的快节奏和各种干扰因素往往使人们难以维持规律的作息时间。

为了帮助人们更好地管理作息时间,可编程作息时间控制器成为了一种理想的解决方案。

硬件部分是可编程作息时间控制器的基础,它主要由显示屏、按钮、电源供应和时钟模块组成。

显示屏用于显示当前时间、设置参数以及展示任务和提醒的信息。

用户可以通过按钮来操作控制器,包括设置作息时间、添加任务和提醒等。

电源供应保证控制器的正常运行,时钟模块则提供精准的时间计量,确保作息时间的准确性和可靠性。

毕业设计[作息时间控制器]

毕业设计[作息时间控制器]

酒泉职业技术学院毕业设计(论文)08级机电一体化技术专业题目:作息时间控制器毕业时间:二O一O年六月学生姓名:***指导教师:**班级: 08机电一班2009 年 11月20日酒泉职业技术学院11届各专业毕业论文(设计)成绩评定表作息时间控制器摘要:PLC即可编程控制器(Programmable logic Controller),是指以计算机技术为基础的新型工业控制装置。

关键词:可编程控制器;数字运算操作;PLC是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。

毕业设计的题目是《作息时间控制器》控制的设计,用时间来控制自动打铃,开(熄)学生宿舍灯等。

目的是为了考查学生对所学知识的综合运用能力,以及对不同程序控制之间的融汇贯通。

在查阅有关的资料及手册的基础上,掌握与设计有关的基础知识,提高自己设计、分析程序的能力。

通过制作电路板,解决实际问题,提高自己的动手能力。

在指导老师的悉心指导及本组成员的共同努力下,完成了0~24小时循环显示的程序、自动打铃程序、开(熄)学生宿舍灯程序的设计,及电路板的制作。

通过本次设计领悟了作为一名技术员所具备分析、解决问题的能力,为今后的工作打下基础。

由于时间仓促、能力有限,程序难免有不足之处,请老师批评指正。

参考文献1、三菱电机.FX1N编程手册2002.2、廖常初.《PLC基础与应用》机械工业出版社2008.13、稿钦和.《PLC应用与开发案例精选》人民邮电出版社2008.5PLC即可编程控制器(Programmable logic Controller),是指以计算机技术为基础的新型工业控制装置。

PLC是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。

它采用可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算术运算等操作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。

PLC及其有关的外围设备都应该按易于与工业控制系统形成一个整体,易于扩展其功能的原则而设计。

plc上课铃课程设计

plc上课铃课程设计

plc上课铃课程设计一、课程目标知识目标:1. 让学生掌握PLC(可编程逻辑控制器)的基本概念,理解其工作原理和应用场景。

2. 学会使用PLC进行简单的编程,实现对上课铃控制系统的设计与调试。

3. 了解电气控制系统中常用的传感器及其功能,掌握其在PLC控制系统中的应用。

技能目标:1. 培养学生动手操作能力,能独立完成PLC控制系统的连接、编程和调试。

2. 培养学生问题分析能力,能针对实际需求设计合理的PLC控制系统方案。

3. 提高学生团队协作能力,能在小组合作中发挥个人优势,共同完成项目任务。

情感态度价值观目标:1. 培养学生对PLC技术及自动化控制的兴趣,激发其学习热情。

2. 培养学生严谨的科学态度,注重实践操作中的安全与规范。

3. 增强学生的环保意识,认识到自动化技术在节能减排方面的重要作用。

课程性质:本课程为实践性较强的学科,以项目驱动的方式进行教学,注重培养学生的动手操作能力和实际问题解决能力。

学生特点:学生处于初中阶段,具有一定的电子、电气基础知识,对新技术充满好奇,喜欢动手实践。

教学要求:结合学生特点,以实际项目为载体,注重理论与实践相结合,引导学生主动探索,提高其综合素质。

在教学过程中,关注学生个体差异,提供个性化指导,确保课程目标的达成。

通过课程学习,使学生能够将所学知识应用于实际生活,提高其创新意识和实践能力。

二、教学内容1.PLC基本原理与结构:介绍PLC的发展历程、基本组成、工作原理,以教材第二章第一节内容为基础,让学生对PLC有全面的认识。

2.PLC编程语言与编程方法:讲解PLC的编程语言(如梯形图、指令表等),以教材第二章第二节内容为参考,指导学生掌握基本的编程方法。

3.电气控制系统传感器:介绍常用的传感器(如接近开关、光电开关等),并结合教材第三章内容,讲解传感器在PLC控制系统中的应用。

4.上课铃控制系统设计:结合教材案例,指导学生进行上课铃控制系统的设计与实现,包括硬件连接、程序编写和调试。

基于单片机的作息时间控制器设计参考文献

基于单片机的作息时间控制器设计参考文献

文章标题:基于单片机的作息时间控制器设计参考文献在当今社会中,人们的生活节奏越来越快,作息时间管理成为了一项越来越重要的关注点。

而基于单片机的作息时间控制器设计正是一个应对这一挑战的解决方案。

本文将从深度和广度的角度,对基于单片机的作息时间控制器设计进行综合评估,并为读者提供有价值的参考文献。

一、引言基于单片机的作息时间控制器设计是以单片机为核心的一种智能化时间管理系统,旨在帮助人们合理安排作息时间,提升生活质量。

本文将围绕这一主题展开探讨,并提供深入的参考文献。

二、单片机技术在作息时间控制中的应用1. 单片机技术的基本原理及特点单片机是一种集成了微处理器、内存和I/O接口的芯片,具有体积小、功耗低、成本低等特点,适用于作息时间控制器的设计。

2. 基于单片机的作息时间控制器设计原理基于单片机的作息时间控制器设计主要包括硬件设计和软件设计两个方面,其中硬件设计包括时钟电路、显示模块等,软件设计包括时间设置、定时功能等。

3. 单片机技术在作息时间控制中的优势相比传统的作息时间控制器,基于单片机的设计具有更高的稳定性、更大的灵活性和更丰富的功能,能够更好地满足人们对作息时间管理的需求。

三、基于单片机的作息时间控制器设计的发展现状1. 相关领域的研究现状当前,基于单片机的作息时间控制器设计已经在家居领域、办公场所等得到了广泛的应用,并逐渐向智能化、网络化方向发展。

2. 研究热点和难点在基于单片机的作息时间控制器设计领域,研究人员主要关注于提升系统的稳定性、完善用户体验、降低成本等方面,同时也面临着软硬件协同设计、能耗管理等难点。

四、基于单片机的作息时间控制器设计的关键技术和挑战1. 关键技术在基于单片机的作息时间控制器设计中,关键技术包括低功耗设计、嵌入式系统设计、数据通信技术等,这些技术的应用将直接影响到系统的性能和稳定性。

2. 挑战基于单片机的作息时间控制器设计面临着功耗管理、通信协议兼容性等挑战,同时在用户需求多样化和市场竞争激烈的情况下,如何设计出满足市场需求的作息时间控制器也是一个巨大的挑战。

基于单片机的作息时间控制钟系统毕业设计 改过!!~~!!!

基于单片机的作息时间控制钟系统毕业设计 改过!!~~!!!

高等教育自学考试毕业论文学生姓名:林于舜考籍号:911411101557专业年级:题目:基于单片机的作息时间控制钟系统指导教师:桂玲讲师评阅教师:年月目录1 引言 (3)1.1作息时间控制钟系统概述 (3)1.2本设计任务和主要内容 (4)2 系统主要硬件电路设计 (5)2.1 单片机总体设计原理 (5)2.2 各功能模块分析 (5)2.2.1 SPCE061A性能简介 (5)2.2.2 扩展部分实现 (8)3 系统软件设计 (9)3.1 软件主程序 (9)3.2 软件主要子程序 (10)3.2.1 键盘扫描子程序 (10)3.2.2 万年历计算子程序 (10)3.2.3 校时子程序 (11)3.2.4 播放语音子程序 (12)4 系统调试 (14)4.1 调试 (14)4.1.1 软件调试 (14)4.1.2 硬件调试 (14)4.1.3 软硬联调 (14)5 结束语 (15)参考文献 (16)我已给你调好了标题,自动生成目录,加上附录一:你设计的硬件电路图,附录二:软件程序摘要本设计是一个具有报时功能的作息时间控制钟。

它利用SPCE061A单片机的2Hz 时基计时,进行年历计算,并用SPCE061A的语音功能将它报出来;在进行时间计算,分每加一时,都与规定的作息时间比较,如果相等则进行相应的控制或动作。

本设计是一个具有报时功能的作息时间控制钟。

它利用SPCE061A单片机的2Hz时基计时,进行年历计算,并用SPCE061A的语音功能将它报出来;在进行时间计算,分每加1时,都与规定的作息时间比较,如果相等则进行相应的控制或动作。

SPCE061A的DAC 为电流型输出,经负载电阻R1、三极管Q1放大驱动扬声器SPEAKER放音,SPEAKER可选用4Ω或8Ω扬声器。

IOA15接一个LED,到规定的作息时间用LED闪烁来表示,使用者可根据具体需要来控制电铃、播放提示语等。

凌阳芯片的工作电压为3.3v,我们给出了获得工作电压两种方法。

基于PLC的校园作息时间控制系统

基于PLC的校园作息时间控制系统
本PLC作为核心控制器,通过编程实现对校园时间的精确控制,包括打铃、广播及宿舍灯等设备的自动化管理。系统由硬件和软件两部分组成,硬件包括PLC控制器、继电器、数码管显示器等,软件则是根据实际需求编写的PLC程序。通过合理的输入输出点分配和硬件选择,系统实现了对作息时间的无人化、科学化管理和操作。该设计不仅保证了时间控制的准确性,还具备在特殊情况下灵活调整时间的优势。此外,系统硬件设备结构简单,易操作,准备度高,系统灵活性、实用性强,且成本低廉,非常适用于各类院校的作息时间控制需求。

基于PLC的作息时间控制系统设计

基于PLC的作息时间控制系统设计

基于PLC的作息时间控制系统设计摘要本文提出了一种基于PLC(可编程逻辑控制器)的作息时间控制系统。

该系统的设计是为了帮助人们维护健康的生活方式。

该系统可以通过对灯光和音乐的控制来帮助人们保持生物钟的正常节律。

除此之外,该系统还可以通过控制家电设备的开关来确保每天的作息时间计划得到落实。

实验结果表明,该系统具有良好的可靠性和稳定性,能够有效地帮助人们规律作息。

关键字:PLC,作息时间控制,生物钟AbstractThis paper presents a PLC (Programmable Logic Controller)-based time scheduling system for promoting healthy lifestyles. The system was designed to help maintain a normal circadian rhythm by controlling lighting and sound. In addition, the system controls household appliances to ensure compliance with daily routines. Experimental results show that the system has good reliability and stability, and can effectively assist in regulating activities.Keywords: PLC, time scheduling, circadian rhythmIntroductionIn modern society, people's lifestyles and work schedules have become increasingly irregular, leading to physical and mental disorders. One of the main reasons for this is the disruption of the normal circadian rhythm. People's biological clocks are highly dependent on external cues such as light and sound, and abnormal cues can lead to serious health problems. Therefore, it is important to maintain a normal circadian rhythm to promote a healthylifestyle.Various methods have been proposed to aid in maintaining a normal circadian rhythm, including lifestyle changes, medication, and light therapy. However, these methods have limitations in terms of practicality and effectiveness. In recent years, emerging technology such as the Internet of Things (IoT) and PLC have been used to develop more practical solutions for maintaining a normal circadian rhythm.In this paper, a PLC-based time scheduling system is proposed as a practical solution to maintain a normalcircadian rhythm. The system controls lighting and sound, and household appliances to ensure compliance with daily routines.MethodologyThe proposed system is based on a PLC. The PLC is a specialized industrial computer used to control machines and processes. The PLC can be programmed to perform a specific task, and it can be reprogrammed as needed. The systemconsists of three main components: the PLC, the lighting and sound control module, and the household appliance control module.The PLC is the central component of the system. It receives input signals from various sensors, processes the signals, and sends output signals to control modules. The PLC is programmed to perform specific tasks based on predefined schedules.The lighting and sound control module controls the intensity and color of the lighting and sound sources. The module uses a microcontroller to adjust the lighting andsound according to the predefined schedules.The household appliance control module controls theon/off switches of household appliances, such as airconditioners, TVs, and computers. The module uses a power relay to turn the appliances on and off based on the predefined schedules.ResultsThe proposed system was tested in a residential setting. The system is programmed to follow a predefined schedule. During the night, the system provides low-intensity red lighting and soft music to help people fall asleep. In the morning, the system gradually increases the intensity of the white lighting and plays lively music to help people wake up. The system also turns on household appliances such as air conditioners, TVs, and computers at predefined times.The results show that the system is highly reliable and stable. The system performs as programmed, and there were no malfunctions or errors during testing. The system effectively assisted in regulating the activities of the residents, and they reported feeling more energetic and focused throughout the day.ConclusionThe proposed PLC-based time scheduling system is a practical solution for promoting healthy lifestyles. The system effectively maintains a normal circadian rhythm by controlling lighting and sound sources. Furthermore, the system ensures compliance with daily routines by controlling household appliances. The system is highly reliable and stable, and it has the potential to be widely adopted in various settings to promote healthy lifestyles.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

可编程作息时间控制器设计Company number:【0089WT-8898YT-W8CCB-BUUT-202108】信息工程学院课程设计报告书题目: 可编程作息时间控制器设计专业:电子信息科学与技术班级:学号:学生姓名指导教师:2013 年 5 月 13日信息工程学院课程设计任务书年月日信息工程学院课程设计成绩评定表摘要本设计是可编程作息时间控制器设计,由单片机AT89C51芯片和LCD、LED显示器,辅以必要的电路,构成一个单片机四路可调闹钟。

电子钟可采用数字电路实现,也可以采用单片机来完成。

LCD 显示“时”,“分”,LED亮灯来表示闹钟的到来,定时时间到能发出警报声。

现在是自动化高度发达的时代,特别是电子类产品都是靠内部的控制电路来实现对产品的控制,达到自动运行的目的,这就需要我们这里要做的设计中的电器元件及电路的支持。

在这次设计中主要是用AT89S51来进行定时,也结合着其他辅助电路实施控制,在定时的时候,按一下控制小时的键对小时加一;按一下控制分钟的键对分钟加一;到达预设的时间,此电路就会发出报警声音提示已经到点。

关键字:四路可调闹钟 AT89C51 LCD目录1 任务提出与方案论证单片机型号的选择通过对多种单片机性能的分析,最终认为AT89C51是最理想的电子时钟开发芯片。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程序存储器和1000次擦写循环,数据保留时间为10年,是最好的选择。

按键的选择本次设计按照题目要求使用独立式按键。

由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单。

显示器的选择选用1602LCD液晶显示器。

计时部分的选择如果使用时钟芯片,系统就不怕掉电且时间精确。

但这种芯片比较贵,况且,设计本系统主要是为了学习单片机程序的编写和调试以及设计硬件电路的一些方法,因此采用软件的方法来计时而没有采用价格较高的时钟芯片。

2 总体设计系统总框图原理及工作过程说明制作一个可编程作息时间控制器闹钟,当4路闹钟中的任一路到时,均会点亮灯、打铃。

如有需求,可对程序进行调整,增加闹钟的路数及到时后的处理方式。

定时闹钟的基本功能如下。

(1)显示时钟时间,格式为“时时:分分”,并可重新设置。

(2)显示闹铃时间,格式为“时时:分分”,且显示闪烁以便与时钟时间相区分。

闹铃时间可重新设置。

(3)程序执行后工作指示灯LED闪烁,表示时钟工作为时钟显示模式.LCD 显示的初始时间为“23:58”。

按下K2,闪烁显示的“00:00”为闹铃的时间,单击K3又返回时钟显示模式。

时钟从“23:58”开始计时,定时时间“00:00”到时,继电器开关接通,控制电器的开启,且可发出声响(可控)。

时钟与闹铃时问的设置可通过4个功能按键Kl~K4实现,具体说明如下。

(1)时钟时间的设置:首先单击Kl进入时钟设置模式。

此时每单击一下Kl,则小时增l,单击一下K2,则分钟增1,再单击K3则设置完成,返回时钟显示模式。

此时小时和分钟均已发生变化。

(2)闹铃的时间设置:首先单击,K3进入闹铃的设置模式。

此时每单击一下Kl,则小时增1,单击一下K2,则分钟增l,最后单击.K3则设置完成,返回闹铃显示模式。

此时闹铃的小时和分钟均已发生变化。

(3) K4的功能:闹钟更换。

(4) K2单独的功能:显示闹铃时间。

系统电路图3详细设计主程序部分的设计程序部分主要采用了程序结构的模块化设计,避免了一些函数的不必要的重复书写,使程序变得单间易懂。

程序在执行时,主程序要须通过调用子函数就可完成相应的功能。

主程序流程图如下图3-1。

图3-1主程序流程图独立式键盘的接口电路在单片机应用系统中,有时只需要几个简单的按键向系统输入信息。

这时,可将每个按键接在一根I/O接口线上,这种方式的连接称为独立式键盘。

每个独立式按键单独占有一根 I/O接口线,每根I/O接口线的工作状态不会影响到其他 I/O接口线。

这种按键接口电路配置灵活,硬件结构简单,但每个按键必须占用一根I/O接口线,I/O接口线浪费较大。

故只在按键数量不多时采用这种按键电路。

在此电路中,按键输入都采用低电平有效。

1602LCD液晶显示器1602LCD的基本参数及引脚功能1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图3-3-1所示:图3-3-11602LCD尺寸图1602LCD主要技术参数:显示容量:16×2个字符芯片工作电压:—工作电流:模块最佳工作电压:字符尺寸:×(W×H)mm引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3-1所示:表3-1:引脚接口说明表第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端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15脚:背光源正极。

第16脚:背光源负极。

10.8.2.3 1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表3-2所示:表3-2:控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。

指令2:光标复位,光标返回到地址00H。

指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。

高电平表示有效,低电平则无效。

指令4:显示开关控制。

D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。

指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

指令7:字符发生器RAM地址设置。

指令8:DDRAM地址设置。

指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:写数据。

指令11:读数据。

与HD44780相兼容的芯片时序表如下:表3-3:基本操作时序表读写操作时序如图3-3-2和3-3-3所示:图3-3-3 读操作时序图3-3-3写操作时序1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。

要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3-3-4是1602的内部显示地址。

图3-3-4 1602LCD内部显示地址在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。

每次输入指令前都要判断液晶模块是否处于忙的状态。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图3-3-5所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”图3-3-5字符代码与图形对应图1602LCD的一般初始化(复位)过程延时15mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)延时5mS写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置闹钟子函数闹钟时间的判别主要是通过设定时间与实时时间对逐位对比确定是否进行闹铃。

其工作流程图如下图3-4。

4总结通过自己的不懈努力,我终于完成了设计的任务要求。

功能上基本达标:时钟的显示,日期显示,调时功能、校时功能、闹铃功能、闹钟设功能。

其精确可以满足日常生活显示时间的需要。

在本次设计的过程中,我发现很多的问题,虽然以前没有做过这样的设计但通过这次设计我学会了很多东西,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,比如写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。

从这次的课程设计中,我们真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的练习的过程中才能提高,我想这就是我在这次课程设计中的最大收获。

参考文献[1]《单片机原理及应用(第二版)》张毅刚彭喜元彭宇北京高等教育出版社[2]刘和平. 单片机编程与入门.重庆大学出版社,,111-122[3]陈明荧. 89C51单片机课程设计实训教材.清华大学出版社,,102-118附录#include<>#define uint unsigned int#define uchar unsigned charsbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit lcden=P3^4;sbit lcdrs=P3^5;sbit lcdrw=P3^6;sbit led=P2^2;sbit sound=P2^7;int a,b,i,min,hour,minge,minshi,hourge,hourshi,sec,secge,secshi,cnt,cnt1, nian=2013,yue=5,ri=5,amin1=1,ahour1,aminge1,aminshi1,ahourge1,ahourshi1,amin2=1,ahour2,aminge2,aminshi2,ahourge2,ahourshi2,amin3=1,ahour3,aminge3,aminshi3,ahourge3,ahourshi3,amin4=1,ahour4,aminge4,aminshi4,ahourge4,ahourshi4; uchar code table1[]={'0','1','2','3','4','5','6','7','8','9'};uchar code table2[]="Time:00:00 " ;uchar code Alarm_1[]="Alar1:00:00 ";uchar code Alarm_2[]="Alar2:00:00 ";uchar code Alarm_3[]="Alar3:00:00 ";uchar code Alarm_4[]="Alar4:00:00 ";uchar code riqi[]="2013-05-06 ";uchar num1,num2,alarm1,alarm2,alarm3,alarm4;bit flag=0;void delay(unsigned int z) //延时程序{uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}void write_com(uchar com) //LCD命令控制,写指令函数{delay(5) ;lcdrs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_data(uchar date) //LCD数据控制,写数据函数{delay(5);lcdrs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void write_nian(uchar add , uint date) //年显示函数{uchar qian,bai,shi,ge;qian=date/1000;bai=(date-1000*qian)/100;shi=(date-qian*1000-bai*100)/10;ge=date%10;write_com(0x80+0x40+add);write_data(table1[qian]);write_data(table1[bai]);write_data(table1[shi]);write_data(table1[ge]);}void write_yue(uchar add , uchar date) //月显示函数 {uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);}void write_ri(uchar add , uchar date) //日显示函数 {uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);}void qi(){write_nian(0,nian);write_yue(5,yue);write_ri(8,ri);write_com(0x80+0x40+7);write_data('-');write_com(0x80+0x40+4);write_data('-');}void time() //设置时间函数{while(1){if(key1==0){delay(10);if(key1==0){if(hour==23) //"时"设置hour=0;elsehour++;hourge=hour%10;hourshi=hour/10;write_com(0x0f);delay(2);write_com(0x80+6);write_data(table1[hourge]); //"时"个位写入LCD第1行第6位delay(5);write_com(0x80+5);delay(2);write_data(table1[hourshi]); //"时"十位写入LCD第1行第5位while(!key1);}}if(key2==0){delay(10);if(key2==0){if(min==59) //"分"设置min=0;elsemin++;minge=min%10;minshi=min/10;write_com(0x0f);write_com(0x80+9);write_data(table1[minge]); //"分"个位写入LCD第二行第9位delay(1);write_com(0x80+8);write_data(table1[minshi]); //"分"十位写入LCD第二行第8位delay(1);while(!key2);}}if(key3==0){delay(10);if(key3==0){write_com(0x0c); //整体显示,关光标,不闪烁TR1=1; //定时计数器1启动while(!key3);break; //key3松开时,显示时间"时""分"位均已设置完毕}}}}void display1() //设置闹钟1时间函数{while(1){if(key1==0){delay(10);if(key1==0){if(ahour1==23) //闹钟"时"设置ahour1=0;elseahour1++;ahourge1=ahour1%10;ahourshi1=ahour1/10;write_com(0x0f);write_com(0x80+0x40+8);write_data(':');write_com(0x80+0x40+7);write_data(table1[ahourge1]);delay(1);write_com(0x80+0x40+6);write_data(table1[ahourshi1]);delay(1);while(!key1);}}if(key2==0) //闹钟"分"设置{delay(10);if(key2==0){if(amin1==59)amin1=0;elseamin1++;aminge1=amin1%10;aminshi1=amin1/10;write_com(0x0f);write_com(0x80+0x40+10);write_data(table1[aminge1]);delay(1);write_com(0x80+0x40+9);write_data(table1[aminshi1]);delay(1);while(!key2);}}if(key3==0){alarm1=~alarm1;delay(10);if(key3==0){write_com(0x0c);write_com(0x80+0x40);for(i=0;i<11;i++)write_data(riqi[i]);while(!key3);break; //设置结束,此时LCD第二行无数据显示,只有第一行有时间显示}}}}void display2() //设置闹钟2时间函数{while(1){if(key1==0){delay(10);if(key1==0){if(ahour2==23) //闹钟"时"设置ahour2=0;elseahour2++;ahourge2=ahour2%10;ahourshi2=ahour2/10;write_com(0x0f);write_com(0x80+0x40+8);write_data(':');write_com(0x80+0x40+7);write_data(table1[ahourge2]);delay(1);write_com(0x80+0x40+6);write_data(table1[ahourshi2]);delay(1);while(!key1);}}if(key2==0) //闹钟"分"设置{delay(10);if(key2==0){if(amin2==59)amin2=0;elseamin2++;aminge2=amin2%10;aminshi2=amin2/10;write_com(0x0f);write_com(0x80+0x40+10);write_data(table1[aminge2]);delay(1);write_com(0x80+0x40+9);write_data(table1[aminshi2]);delay(1);while(!key2);}}if(key3==0){alarm2=~alarm2;delay(10);if(key3==0){write_com(0x0c);write_com(0x80+0x40);for(i=0;i<11;i++)write_data(riqi[i]);while(!key3);break; //设置结束,此时LCD第二行无数据显示,只有第一行有时间显示}}}}void display3() //设置闹钟3时间函数{while(1){if(key1==0){delay(10);if(key1==0){if(ahour3==23) //闹钟"时"设置ahour3=0;elseahour3++;ahourge3=ahour3%10;ahourshi3=ahour3/10;write_com(0x0f);write_com(0x80+0x40+8);write_data(':');write_com(0x80+0x40+7);write_data(table1[ahourge3]);delay(1);write_com(0x80+0x40+6);write_data(table1[ahourshi3]);delay(1);while(!key1);}}if(key2==0) //闹钟"分"设置{delay(10);if(key2==0){if(amin3==59)amin3=0;elseamin3++;aminge3=amin3%10;aminshi3=amin3/10;write_com(0x0f);write_com(0x80+0x40+10);write_data(table1[aminge3]);delay(1);write_com(0x80+0x40+9);write_data(table1[aminshi3]);delay(1);while(!key2);}}if(key3==0){alarm3=~alarm3;delay(10);if(key3==0){write_com(0x0c);write_com(0x80+0x40);for(i=0;i<11;i++)write_data(riqi[i]);while(!key3);break; //设置结束,此时LCD第二行无数据显示,只有第一行有时间显示}}}}void display4() //设置闹钟4时间函数{while(1){if(key1==0){delay(10);if(key1==0){if(ahour4==23) //闹钟"时"设置ahour4=0;elseahour4++;ahourge4=ahour4%10;ahourshi4=ahour4/10;write_com(0x0f);write_com(0x80+0x40+8);write_data(':');write_com(0x80+0x40+7);write_data(table1[ahourge4]);delay(1);write_com(0x80+0x40+6);write_data(table1[ahourshi4]);delay(1);while(!key1);}}if(key2==0) //闹钟"分"设置{delay(10);if(key2==0){if(amin4==59)amin4=0;elseamin4++;aminge4=amin4%10;aminshi4=amin4/10;write_com(0x0f);write_com(0x80+0x40+10);write_data(table1[aminge4]);delay(1);write_com(0x80+0x40+9);write_data(table1[aminshi4]);delay(1);while(!key2);}}if(key3==0){alarm4=~alarm4;delay(10);if(key3==0){write_com(0x0c);write_com(0x80+0x40);for(i=0;i<11;i++)write_data(riqi[i]);while(!key3);break; //设置结束,此时LCD第二行无数据显示,只有第一行有时间显示}}}}void keyscan() //键盘扫描{if(key1==0){delay(10);if(key1==0){while(!key1); //key1键松开后执行下一行程序time(); //调用time()函数,即时间设置}}else if(key2==0){ cnt1++;delay(10);if(cnt1==1){while(!key2){ahourge1=ahour1%10;ahourshi1=ahour1/10;write_com(0x80+0x40+7);write_data(table1[ahourge1]);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1[ahourshi1]);aminge1=amin1%10;aminshi1=amin1/10;write_com(0x80+0x40+10);write_data(table1[aminge1]);delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1[aminshi1]);write_com(0x80+0x40);for(i=0;i<11;++i)write_data(Alarm_1[i]); //显示闹钟设置的时间}write_com(0x80+0x40);for(i=0;i<11;i++)write_data(riqi[i]); //key2松开后,LCD只有第一行显示时间,闹钟设置时间不显示}if(cnt1==2){while(!key2){ahourge2=ahour2%10;ahourshi2=ahour2/10;write_com(0x80+0x40+7);write_data(table1[ahourge2]);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1[ahourshi2]);aminge1=amin1%10;aminshi1=amin1/10;write_com(0x80+0x40+10);write_data(table1[aminge2]);delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1[aminshi2]);write_com(0x80+0x40);for(i=0;i<11;++i)write_data(Alarm_2[i]); //显示闹钟设置的时间}write_com(0x80+0x40);for(i=0;i<11;i++)write_data(riqi[i]); //key2松开后,LCD只有第一行显示时间,闹钟设置时间不显示}if(cnt1==3){while(!key2){ahourge3=ahour3%10;ahourshi3=ahour3/10;write_com(0x80+0x40+7);write_data(table1[ahourge3]);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1[ahourshi3]);aminge1=amin1%10;aminshi1=amin1/10;write_com(0x80+0x40+10);write_data(table1[aminge3]);delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1[aminshi3]);write_com(0x80+0x40);for(i=0;i<11;++i)write_data(Alarm_3[i]); //显示闹钟设置的时间}write_com(0x80+0x40);for(i=0;i<11;i++)write_data(riqi[i]); //key2松开后,LCD只有第一行显示时间,闹钟设置时间不显示}if(cnt1==4){while(!key2){ahourge4=ahour4%10;ahourshi4=ahour4/10;write_com(0x80+0x40+7);write_data(table1[ahourge4]);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1[ahourshi4]);aminge1=amin1%10;aminshi1=amin1/10;write_com(0x80+0x40+10);write_data(table1[aminge4]);delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1[aminshi4]);write_com(0x80+0x40);for(i=0;i<11;++i)write_data(Alarm_4[i]); //显示闹钟设置的时间}write_com(0x80+0x40);for(i=0;i<11;i++)write_data(riqi[i]); //key2松开后,LCD只有第一行显示时间,闹钟设置时间不显示}if(cnt1>4)cnt1=0;}else if(key3==0){cnt++;delay(10);if(cnt==1){while(!key3); //表示闹钟时间设置退出ahourge1=ahour1%10;ahourshi1=ahour1/10;write_com(0x80+0x40+7);write_data(table1[ahourge1]);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1[ahourshi1]);aminge1=amin1%10;aminshi1=amin1/10;write_com(0x80+0x40+10);write_data(table1[aminge1]);delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1[aminshi1]);write_com(0x80+0x40);for(i=0;i<11;++i)write_data(Alarm_1[i]);display1();}if(cnt==3){while(!key3); //表示闹钟时间设置退出ahourge2=ahour2%10;ahourshi2=ahour2/10;write_com(0x80+0x40+7);write_data(table1[ahourge2]);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1[ahourshi2]);aminge2=amin2%10;aminshi2=amin2/10;write_com(0x80+0x40+10);write_data(table1[aminge2]);delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1[aminshi2]);write_com(0x80+0x40);for(i=0;i<11;++i)write_data(Alarm_2[i]);display2();}if(cnt==5){while(!key3); //表示闹钟时间设置退出ahourge3=ahour3%10;ahourshi3=ahour3/10;write_com(0x80+0x40+7);write_data(table1[ahourge3]);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1[ahourshi3]);aminge3=amin3%10;aminshi3=amin3/10;write_com(0x80+0x40+10);write_data(table1[aminge3]);delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1[aminshi3]);write_com(0x80+0x40);for(i=0;i<11;++i)write_data(Alarm_3[i]);display3();}if(cnt==7){while(!key3); //表示闹钟时间设置退出ahourge4=ahour4%10;ahourshi4=ahour4/10;write_com(0x80+0x40+7);write_data(table1[ahourge4]);delay(5);write_com(0x80+0x40+6);delay(2);write_data(table1[ahourshi4]);aminge4=amin4%10;aminshi4=amin4/10;write_com(0x80+0x40+10);write_data(table1[aminge4]);delay(5);write_com(0x80+0x40+9);delay(2);write_data(table1[aminshi4]);write_com(0x80+0x40);for(i=0;i<11;++i)write_data(Alarm_4[i]);display4();}if(cnt>10){cnt=0;}}else if(key4==0)delay(5);if(key4==0){while(!key4);a++;if(a%2==0){for(b=0;b<6;b++){sound=~sound;delay(200);}sound=1;}else if(a%2==1){sound=0;delay(300);sound=1;delay(300);}sound=1;}}void lcd_init() //LCD初始化{lcden=0;lcdrw=0;write_com(0x38); //设置8位格式,2行,5×7write_com(0x0c); //整体显示,关光标,不闪烁write_com(0x06); //设定输入方式,增量不转移write_com(0x01); //清除屏幕显示delay(2);write_com(0x80);for(i=0;i<16;i++){write_data(table2[i]); //写入显示时间数据delay(1);}}void judge(){if(sec==60){min++;sec=0;}if(min==60){hour++;min=0;}if(hour==24){ri++;hour=0;}if(ri==30){yue++;ri=1;}if(yue==12){nian++;yue=1;}}void init() //C51初始化函数{key1=1;key2=1;key3=1;key4=1;sec=0;a=0;sound=1;TMOD=0x10; //定时计数器T1工作在方式1TL1=0xB0;TH1=0x3C; //计数初值为15536EA=1;ET1=1;TR1=1;}void speak()//music{if(amin1==min&&ahour1==hour||amin2==min&&ahour2==hour||amin3==mi n||amin4==min) //显示时间与闹钟设置时间完全一样且闹钟"on"{delay(5);sound=0;led=0;}delay(10);delay(10);delay(10);led=1;sound=1;}void led1() interrupt 3 //LED1中断函数{TL1=0xB0;TH1=0x3C;speak();//num1++;num2++;if(num2==20){sec++;num2=0;judge();}}void main() //主函数{lcd_init(); //LCD初始化函数init(); //51初始化函数while(1){keyscan(); //调用扫描函数minge=min%10;minshi=min/10;write_com(0x80+9);write_data(table1[minge]);delay(5);write_com(0x80+8);write_data(table1[minshi]);hourge=hour%10;hourshi=hour/10;write_com(0x80+6);write_data(table1[hourge]);delay(5);write_com(0x80+5);write_data(table1[hourshi]);write_com(0x80+7);write_data(':');delay(5);secge=sec%10; //扩展秒表功能secshi=sec/10;write_com(0x80+15);write_data(table1[secge]);delay(5);write_com(0x80+14);write_data(table1[secshi]);qi();}}。

相关文档
最新文档