时钟系统设计
课程设计plc的时钟系统设计

课程设计plc的时钟系统设计一、课程目标知识目标:1. 让学生掌握PLC时钟系统的基本原理和组成,理解时钟信号在PLC控制系统中的作用。
2. 学会使用PLC编程软件进行时钟系统的编程与调试,了解相关指令的应用和功能。
技能目标:1. 培养学生运用PLC技术设计时钟系统的能力,能独立完成时钟显示、计时等功能的设计与实现。
2. 提高学生实际操作和解决问题的能力,学会分析并解决PLC时钟系统在实际应用中遇到的问题。
情感态度价值观目标:1. 培养学生对PLC技术的兴趣,激发学生主动学习和探究的热情。
2. 培养学生的团队合作意识,学会与他人共同分析和解决问题。
3. 引导学生关注PLC技术在工业自动化领域的应用,认识到技术发展对现代社会的重要性。
课程性质分析:本课程为电气自动化专业的高年级课程,旨在让学生掌握PLC技术在时钟系统设计中的应用,提高学生的实际操作能力和创新能力。
学生特点分析:学生具备一定的电气基础和PLC编程知识,具有一定的动手能力和问题分析能力。
教学要求:1. 结合课本内容,注重理论与实践相结合,提高学生的实际操作技能。
2. 采取项目式教学,鼓励学生积极参与,培养学生的团队合作能力和创新意识。
3. 强化课程目标的实现,注重过程评估与成果评估相结合,确保学生达到预期学习成果。
二、教学内容1. PLC时钟系统原理:包括时钟系统的基本组成、工作原理和功能,重点讲解时钟信号的产生、分配和运用。
相关教材章节:第三章 PLC时钟系统原理2. PLC编程软件操作:介绍PLC编程软件的使用方法,学习相关指令,如定时器、计数器等,并掌握其在时钟系统中的应用。
相关教材章节:第四章 PLC编程软件操作与指令应用3. 时钟系统设计与编程:讲解时钟系统的设计方法,学习如何使用PLC编程实现时钟显示、计时等功能。
相关教材章节:第五章 PLC时钟系统设计与编程4. PLC时钟系统调试与优化:介绍时钟系统的调试方法,分析常见问题,学会优化程序,提高系统稳定性。
plc课程设计时钟系统

plc课程设计时钟系统一、课程目标知识目标:1. 学生能够理解PLC(可编程逻辑控制器)的基本原理和功能。
2. 学生能够掌握时钟系统的组成及其在PLC中的应用。
3. 学生能够学习并运用PLC编程语言,实现对时钟系统的控制。
技能目标:1. 学生能够运用所学知识,设计并搭建简单的时钟系统电路。
2. 学生能够使用PLC编程软件,编写时钟系统的控制程序。
3. 学生能够通过实践操作,调试并优化时钟系统的控制效果。
情感态度价值观目标:1. 培养学生对PLC技术及自动化控制领域的兴趣和热情。
2. 培养学生具备团队合作意识,学会与他人共同解决问题。
3. 培养学生严谨、细致的学习态度,养成良好的操作习惯。
课程性质:本课程为实践性较强的课程,结合理论知识和实际操作,使学生能够将所学知识应用于实际工程中。
学生特点:学生具备一定的电子基础和编程能力,对PLC技术有一定了解,但对时钟系统的设计和应用尚不熟悉。
教学要求:教师需结合理论知识与实践操作,引导学生主动探究,培养学生的动手能力和创新能力。
通过本课程的学习,使学生能够独立完成时钟系统的设计、编程和调试。
二、教学内容1. PLC基本原理及功能:介绍PLC的组成、工作原理、应用领域等,使学生建立对PLC的整体认识。
- 教材章节:第一章 PLC概述2. 时钟系统组成及原理:分析时钟系统的结构、功能及各部分之间的关系,为后续设计时钟系统打下基础。
- 教材章节:第三章 常用外围设备及其应用3. PLC编程语言及编程方法:学习PLC编程的基本指令、编程方法,掌握编程技巧。
- 教材章节:第二章 PLC编程语言及编程方法4. 时钟系统电路设计:结合所学知识,设计并搭建时钟系统电路。
- 教材章节:第四章 PLC控制系统设计5. PLC编程软件应用:学习并掌握PLC编程软件的使用,编写时钟系统控制程序。
- 教材章节:第五章 PLC编程软件及应用6. 实践操作与调试:分组进行实践操作,调试并优化时钟系统控制效果,培养学生的动手能力。
时钟系统设计及仿真

黑龙江科技学院 综合性、设计性实践报告实践项目名称时钟系统设计及仿真所属课程名称ASIC实践日期2011.9.13-2011.9.16班级学号姓名成绩电气与信息工程学院实践基地实践概述:【实践目的及要求】实践目的:1、学习软件Max+plusⅡ的使用方法;2、掌握使用Max+plusⅡ进行编译和仿真的方法与技巧;3、掌握基本的VHDL语言并编写程序4、了解实践箱的各部分基本构造并使用它完成程序下载。
实验要求:1、应用VHDL语言设计一个具有时、分、秒功能的计时系统。
2、应用Max+plusⅡ开发进行编译,仿真,装配,并下载到实践箱。
3、计时系统可采用模块设计,并连接成顶层原理图。
4.可自行扩展功能。
【实践环境】(使用的软件)Max+plusⅡ【实验原理】实践内容:clkset:in std_logic;setmin:in std_logic;reset:in std_logic;secout:out STD_LOGIC_vector(6 downto 0);enmin:out std_logic);end xsecond1;architecture xsecond_arch of xsecond1 issignal sec:STD_LOGIC_vector(6 downto 0);signal sec1:STD_LOGIC;signal emin:STD_LOGIC;beginprocess(reset,sec,emin,setmin,clkset)beginif reset ='0' thenenmin<='0';secout<="0000000";sec1<='0';elsesec1<='1';secout<=sec;if clkset='1'and clkset'event thenif setmin='0' thenenmin<='1';elseenmin<=emin;end if;end if;end if;end process;process(clk,sec1)alias lcount:std_logic_vector(3 downto 0)is sec(3 downto 0); alias hcount:std_logic_vector(2 downto 0)is sec(6 downto 4); beginif sec1='0' thensec<="0000000";elseif (clk='1'and clk'event)thenif lcount=9 thenlcount<="0000";if hcount/=5 thenhcount<=hcount+1;elsehcount<="000";emin<='1';end if;elselcount<=lcount+1;emin<='0';end if;end if;end if;end process;end xsecond_arch;分60程序如下:Library ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_arith.ALL;USE ieee.std_logic_unsigned.ALL;entity xminute isport(clk:in std_logic;clkmin:in std_logic;sethour:in std_logic;reset:in std_logic;minout:out STD_LOGIC_vector(6 downto 0); enhour:out std_logic);end xminute;architecture xminute_arch of xminute issignal min:STD_LOGIC_vector(6 downto 0);signal ehour:STD_LOGIC;signal min1:STD_LOGIC;beginprocess(reset,clk,sethour,min,ehour)beginif reset ='0' thenenhour<='0';minout<="0000000";min1<='0';elsemin1<='1';if clk='1'and clk'event thenif sethour='0' thenenhour<='1';elseenhour<=ehour;end if;end if;end if;end process;process(clkmin,min1)alias lcountm:std_logic_vector(3 downto 0)is min(3 downto 0); alias hcountm:std_logic_vector(2 downto 0)is min(6 downto 4); beginif min1='0' thenmin<="0000000";elseif (clkmin='1'and clkmin'event)thenif lcountm=9 thenlcountm<="0000";if hcountm/=5 thenhcountm<=hcountm+1;ehour<='0';elsehcountm<="000";ehour<='1';end if;elselcountm<=lcountm+1;ehour<='0';end if;end if;end if;end process;end xminute_arch;时程序如下:Library ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_arith.ALL;USE ieee.std_logic_unsigned.ALL;entity xhour isport(clkhour:in std_logic;reset:in std_logic;hourout:out STD_LOGIC_vector(5 downto 0));end xhour;architecture xhour_arch of xhour issignal hour:STD_LOGIC_vector(5 downto 0);beginprocess(reset,clkhour,hour)alias lcount:std_logic_vector(3 downto 0)is hour(3 downto 0); alias hcount:std_logic_vector(1 downto 0)is hour(5 downto 4); beginif reset='0' thenhourout<="000000";hour<="000000";elseif (clkhour='1'and clkhour'event)thenif lcount=9 thenlcount<="0000";hcount<=hcount+1;elseif hour="100011"thenhour<="000000";elselcount<=lcount+1;end if;end if;end if;hourout<=hour;end if;end process;end xhour_arch;分时设定程序:Library ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_arith.ALL;USE ieee.std_logic_unsigned.ALL;entity xsettime isport(reset:in std_logic;hour:in STD_LOGIC_vector(5 downto 0);min:in STD_LOGIC_vector(6 downto 0);sec:in STD_LOGIC_vector(6 downto 0);clk:in std_logic;sel:out STD_LOGIC_vector(2 downto 0);d_out:out STD_LOGIC_vector(3 downto 0)); end xsettime;architecture xsettime_arch of xsettime issignal sel1: STD_LOGIC_vector(2 downto 0); beginprocess(clk,reset,sel1,hour,min,sec)beginif reset='0' thensel<="000";d_out<="0000";sel1<="000";elseif (clk='1'and clk'event)thenif sel1<5 thensel1<=sel1+1;elsesel1<="000";end if;end if;sel<=sel1;case sel1 iswhen "000"=>d_out(3)<='0';d_out(2)<='0';d_out(1)<=hour(5);d_out(0)<=hour(4);when "001"=>d_out<=hour(3 downto 0);when "010"=>d_out(3)<='0';d_out(2)<=min(6);d_out(1)<=min(5);d_out(0)<=min(4);when "011"=>d_out<=min(3 downto 0);when "100"=>d_out(3)<='0';d_out(2)<=sec(6);d_out(1)<=sec(5);d_out(0)<=sec(4);when "101"=>d_out<=sec(3 downto 0);when others=>null;end case;end if;end process;end xsettime_arch;显示模块程序:Library ieee;USE ieee.std_logic_1164.ALL;entity xdeled isport(d_in:in STD_LOGIC_vector(3 downto 0); a:out std_logic;b:out std_logic;c:out std_logic;d:out std_logic;e:out std_logic;f:out std_logic;g:out std_logic);end xdeled;architecture xdeled_arch of xdeled isbeginprocess(d_in)type data_out is array(0 to 6)of std_logic; variable outp:data_out;begincase d_in iswhen "0000"=>outp:="1111110";when "0001"=>outp:="0110000";when "0010"=>outp:="1101101";when "0011"=>outp:="1111001";when "0100"=>outp:="0110011";when "0101"=>outp:="1011011";when "0110"=>outp:="1011111";when "0111"=>outp:="1110000";when "1000"=>outp:="1111111";when "1001"=>outp:="1111011";when "1010"=>outp:="1110111";when "1011"=>outp:="0011111";when "1100"=>outp:="1001110";when "1101"=>outp:="0111101";when "1110"=>outp:="1001111";when "1111"=>outp:="1000111";when others=>null;end case;a<=outp(0);b<=outp(1);c<=outp(2);d<=outp(3);e<=outp(4);f<=outp(5);g<=outp(6);end process;end xdeled_arch;指示灯与报警模块程序:Library ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_arith.ALL;USE ieee.std_logic_unsigned.ALL;entity xalert isport(clk:in std_logic;d_in:in STD_LOGIC_vector(6 downto 0);speak:out std_logic;d_out:out STD_LOGIC_vector(2 downto 0)); end xalert;architecture xalert_arch of xalert istype state is(s1,s2,s3,s4);signal next_state,current_state:state;beginprocess(clk,current_state,d_in)beginif d_in/="0000000" thenspeak<='0';next_state<=s1;current_state<=s1;d_out<="000";elseif (clk='1'and clk'event)thenspeak<='1';current_state<=next_state;end if;case current_state iswhen s1=>d_out<="000";next_state<=s2;when s2=>d_out<="001";next_state<=s3;when s3=>d_out<="010";next_state<=s4;when s4=>d_out<="100";next_state<=s1;when others=>d_out<="000";null;end case;end if;end process;end xalert_arch;分频模块程序:library ieee;use ieee.std_logic_1164.all;entity d_time isport(clk:in std_logic;qlk:out std_logic);end d_time;architecture d_time of d_time issignal x:std_logic;beginprocess(clk)variable cnt:integer range 0 to 77; beginif clk'event and clk='1'thenif cnt<77 thencnt :=cnt+1;elsecnt:=0;x<=not x;end if;end if;qlk<=x;end process;end d_time;【实践过程】(实践步骤、记录、数据、分析)1、完成各个模块程序的调试编译利用所得的图完成系统的设计结果如原理图所示,该系统的输入信号为时钟信号、被测频率输入信号、数码管7个段位数码管段位译码输出信号。
(整理)同步时钟系统设计方案

2.2时钟系统2.2.1系统功能地铁时钟系统为地铁工作人员和乘客提供统一的标准时间,并为其它各有关系统提供统一的标准时间信号,使各系统的定时设备与本系统同步,实现地铁全线统一的时间标准,从而达到保证地铁行车安全、提高运输效率和管理水平、改善服务质量的目的。
地铁1号线一期工程时钟子系统按中心一级母钟和车站二级母钟两级方式设置,系统基本功能如下:1)同步校对中心一级母钟设备接收外部GPS或∕和北斗卫星标准时间信号进行自动校时,保持同步。
同时产生精确的同步时间码,通过传输通道向1号线一期工程的各车站、车辆段的二级母钟传送,统一校准二级母钟。
二级母钟系统接收中心母钟发出的标准时间码信号,与中心母钟随时保持同步,并产生输出时间驱动信号,用于驱动本站所有的子钟,并能向中心设备回馈车站子系统的工作信息。
二级母钟在传输通道中断的情况下,应能独立正常工作。
2)时间显示中心一级母钟和二级母钟均按“时:分:秒”格式显示时间,具备12和24小时两种显示方式的转换功能;数字子钟为“时:分:秒”显示(或可选用带日期显示)。
3)日期显示中心一级母钟应产生全时标信息,格式为:年,月,日,星期,时,分,秒,毫秒,并能在设备上显示。
4)为其它系统提供标准时间信号中心一级母钟设备设有多路标准时间码输出接口,能够在整秒时刻给地铁其它各相关系统及专业提供标准时间信号。
这些系统主要包括:◆传输系统◆无线通信系统◆公务及站内通信系统◆调度电话系统◆广播系统◆导乘信息系统◆电视监视系统◆UPS电源系统◆网络管理系统◆地铁信息管理系统◆综合监控系统◆信号系统◆自动售检票系统◆门禁系统◆屏蔽门系统5)热备份功能一级母钟、二级母钟均有主、备母钟组成,具有热备份功能,主母钟故障出现故障立即自动切换到备母钟,备母钟全面代替主母钟工作。
主母钟恢复正常后,备母钟立即切换回主母钟。
6)系统扩容由于控制中心为1、2、3号线共用,因此1号线一期工程时钟系统应具备系统扩容功能,通过增加适当的接口板,为1号线南北延长线各车站及2、3号线设备提供统一的时钟信号,同时预留接口对接入该中心的其它线路提供统一的时钟信号,最大限度地实现线路间的资源共享,以节省投资和设备的维护成本、提高运营服务质量。
(整理)同步时钟系统设计方案

2.2时钟系统2.2.1系统功能地铁时钟系统为地铁工作人员和乘客提供统一的标准时间,并为其它各有关系统提供统一的标准时间信号,使各系统的定时设备与本系统同步,实现地铁全线统一的时间标准,从而达到保证地铁行车安全、提高运输效率和管理水平、改善服务质量的目的。
地铁1号线一期工程时钟子系统按中心一级母钟和车站二级母钟两级方式设置,系统基本功能如下:1)同步校对中心一级母钟设备接收外部GPS或∕和北斗卫星标准时间信号进行自动校时,保持同步。
同时产生精确的同步时间码,通过传输通道向1号线一期工程的各车站、车辆段的二级母钟传送,统一校准二级母钟。
二级母钟系统接收中心母钟发出的标准时间码信号,与中心母钟随时保持同步,并产生输出时间驱动信号,用于驱动本站所有的子钟,并能向中心设备回馈车站子系统的工作信息。
二级母钟在传输通道中断的情况下,应能独立正常工作。
2)时间显示中心一级母钟和二级母钟均按“时:分:秒”格式显示时间,具备12和24小时两种显示方式的转换功能;数字子钟为“时:分:秒”显示(或可选用带日期显示)。
3)日期显示中心一级母钟应产生全时标信息,格式为:年,月,日,星期,时,分,秒,毫秒,并能在设备上显示。
4)为其它系统提供标准时间信号中心一级母钟设备设有多路标准时间码输出接口,能够在整秒时刻给地铁其它各相关系统及专业提供标准时间信号。
这些系统主要包括:◆传输系统◆无线通信系统◆公务及站内通信系统◆调度电话系统◆广播系统◆导乘信息系统◆电视监视系统◆UPS电源系统◆网络管理系统◆地铁信息管理系统◆综合监控系统◆信号系统◆自动售检票系统◆门禁系统◆屏蔽门系统5)热备份功能一级母钟、二级母钟均有主、备母钟组成,具有热备份功能,主母钟故障出现故障立即自动切换到备母钟,备母钟全面代替主母钟工作。
主母钟恢复正常后,备母钟立即切换回主母钟。
6)系统扩容由于控制中心为1、2、3号线共用,因此1号线一期工程时钟系统应具备系统扩容功能,通过增加适当的接口板,为1号线南北延长线各车站及2、3号线设备提供统一的时钟信号,同时预留接口对接入该中心的其它线路提供统一的时钟信号,最大限度地实现线路间的资源共享,以节省投资和设备的维护成本、提高运营服务质量。
基于STC89C52单片机时钟的设计与实现

基于STC89C52单片机时钟的设计与实现1. 本文概述本文主要介绍了基于STC89C52单片机和DS1302时钟芯片的电子时钟设计与实现。
该电子时钟系统具有年月日等基本时间显示功能,并集成了秒表计时处理、闹钟定时、蜂鸣器和温度显示等附加功能。
系统采用LCD1602作为液晶显示器件,通过单片机对时钟和温度等数据进行处理后传输至LCD进行显示。
用户可以通过按键对时间进行调节,同时,单片机还通过扩展外围接口实现了温度采集等功能。
本文的目标是提供一个功能丰富、易于操作的电子时钟系统,为学习和应用单片机技术提供一个实用的案例。
2. 系统设计要求在设计基于STC89C52单片机的时钟系统时,我们需要考虑以下几个关键的设计要求:时钟系统必须具备基本的时间显示功能,能够以小时、分钟和秒为单位准确显示当前时间。
系统还应支持设置闹钟功能,允许用户设定特定的时间点进行提醒。
系统需要保证长时间稳定运行,具备良好的抗干扰能力,确保在各种环境下都能准确计时。
还应具备一定的容错能力,即使在操作失误或外部干扰的情况下,也能保证系统的正常运行。
用户界面应简洁直观,便于用户快速理解和操作。
时钟的显示部分应清晰可见,即使在光线较暗的环境下也能保持良好的可视性。
同时,设置和调整时间的操作应简单易懂,方便用户进行日常使用。
在设计时钟系统时,应考虑到未来可能的功能扩展,如温度显示、日期显示等。
系统的设计应具有一定的灵活性和扩展性,以便在未来可以轻松添加新的功能模块。
鉴于时钟系统可能需要长时间运行,能耗是一个重要的考虑因素。
设计时应选择低功耗的元件,并优化电源管理策略,以延长电池寿命或减少能源消耗。
在满足上述所有要求的同时,还需要控制成本,确保产品的市场竞争力。
这可能涉及到对单片机的编程优化、选择性价比高的外围元件等措施。
通过满足上述设计要求,我们可以确保开发出一个功能完善、稳定可靠、用户友好、易于扩展、节能环保且成本效益高的STC89C52单片机时钟系统。
时钟系统方案

时钟系统方案第1篇时钟系统方案一、方案背景随着信息化建设的不断深入,时钟系统已成为各类业务系统中不可或缺的组成部分。
为确保业务数据的准确性和系统运行的稳定性,需建立一套合法合规的时钟系统方案,以实现各系统间的时间同步和统一管理。
二、方案目标1. 确保时钟系统合法合规,遵循国家相关法律法规和行业标准。
2. 实现各业务系统间的时间同步,保证数据的一致性和准确性。
3. 提高时钟系统的可靠性和稳定性,降低系统故障风险。
4. 方便时钟系统的管理和维护,降低运维成本。
三、方案设计1. 时钟源选择采用我国国家标准时间源(如国家授时中心),确保时钟源的准确性和可靠性。
2. 时钟同步协议采用NTP(网络时间协议)或PTP(精确时间协议)等国际通用的时间同步协议,实现各业务系统间的时间同步。
3. 系统架构采用分布式架构,分为时钟源、时钟服务器、时钟客户端三级,确保时钟系统的可扩展性和高可用性。
4. 时钟服务器时钟服务器负责接收时钟源的时间信息,并进行本地时间同步。
建议采用双机热备的配置,提高系统可靠性。
5. 时钟客户端时钟客户端部署在各业务系统服务器上,定期从时钟服务器获取时间信息,实现业务系统的时间同步。
6. 网络设计采用专用网络或虚拟专用网络(VPN)实现时钟系统的数据传输,确保数据安全和传输效率。
7. 安全防护针对时钟系统进行安全防护,包括防火墙、入侵检测、数据加密等,确保系统安全。
四、实施步骤1. 需求分析调研现有业务系统对时钟系统的需求,明确时钟同步的范围、精度等要求。
2. 方案设计根据需求分析,设计时钟系统方案,包括硬件设备选型、软件配置、网络架构等。
3. 设备采购与安装采购符合国家标准的时钟设备,进行安装、调试,确保设备正常运行。
4. 系统部署按设计方案部署时钟系统,包括时钟源、时钟服务器、时钟客户端等。
5. 测试验证对时钟系统进行功能测试、性能测试、安全测试等,确保系统满足业务需求。
6. 培训与交付对运维人员进行时钟系统的培训,确保其具备管理和维护能力。
时钟同步系统方案设计分享

时钟同步系统在福建某通信局投入使用由我公司自主研发生产的一套时钟同步系统在福建某通信局成功投入使用。
本次时钟同步系统,主要是根据福建某通信局发展需要,应对项目实施需求,具有针对性的配置的一套完整的时钟同步系统,分享如下:
1.时钟同步系统的需求原因
应对通信局客户对北斗GPS时钟同步系统的需求逐渐增多,现有槽道已无法满足未来的客户需求,后期运行也大大增加施工安全隐患。
经过市场调研,选由我公司自行配置一套北斗GPS时钟同步系统,要求各网段授时设备独立运行,可供多用户共同使用,同时楼顶线路只允许架设1套GPS北斗卫星天线。
2.时钟同步系统的配置方案
因工程配置的局限性,本次时钟同步系统需求配置6台北斗GPS
时钟同步设备,且只能共用一套卫星天线,因此我们在系统内配置了GPS北斗双模有源分配器将其分开,具体连接方式如下图:
时钟同步系统配置方案
3.时钟同步系统的授时方法(同步科技,小安,189********(微信同
时钟同步系统整体采用NTP授时方式,需要同步时间的授时终端,通过获取时间同步设备的IP地址,来实现局域网内所有网络设备
的时间统一,网络配置图如下所示:
时钟同步系统的网络配置图
4.时钟同步系统配置清单
鉴于以上需求,配置1套完整的时钟同步系统,清单如以下表格:
高精确的时间对于通信局系统的正常运行有着十分重要的意义,
本次时间同步系统主要是基于GPS北斗的时间同步系统,
能够实时地对主站计算机终端时间进行校正, 目前在通信局配置有着很大的需要。
以上为此次给通信局配置的时间同步系统的一个说明,相关用户可作为参考。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《单片机原理及接口》课程设计报告题目:时钟系统设计专业名称:电子信息工程班级: 092 学号: 910706220 姓名:2011年 12月时钟系统设计陈(电子信息工程学系)中文摘要:本设计基于单片机仿真技术,以单片机芯片AT89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个多功能数字时钟系统。
单片机扩展的LCD显示器用来显示秒、分、时计数单元中的值。
整个设计包括两大部分:硬件部分和软件部分,以单片机为核心,蜂鸣器,数码管,晶体管等为外围器件,设计一个正常走时,报时、初始化、闹钟的数字时钟。
关键词:单片机;数字时钟;AT89C52;闹钟1、设计目标设计一时钟系统,系统具有时钟功能,能准确显示时、分、秒,系统还应具有校正功能:能够修改当前的时间。
2、设计环境Windows7 Keil uVision3 Proteus7.53、系统硬件设计3.1单片机控制系统:本设计基于单片机技术原理,以单片机芯片AT89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,利用单片机的控制作用通过LCD来直接时、分、秒,并能对其分别进行设置、修改;利用对蜂鸣器的控制来实现闹钟功能。
同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过三个模块:键盘、芯片、显示屏即可满足设计要求。
3.2各部分功能实现:单片机采用52系列单片机。
由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。
3.3单片机最小系统:单片机最小系统主要由复位电路,晶振电路,电源等几部分组成。
复位电路如图1:图1 复位电路复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。
如图2所示:晶振电路:晶振电路如图三所示:图2 晶振模块原理图选取原则:电容选取22pF,晶振为12MHz。
电源:AT89S52单片机的供电电源是5V的直流电。
EA非/Vpp脚:我们没有用外部扩展ROM,因此EA非/Vpp为高电平,即接+5V电源。
3.4键盘控制系统设计:按键需要4个,分别实现为时间调整、时间的加、时间的减、闹钟调整四个功能。
用单片机的4个I/O口接收控制信号,其电路如图3所示:图3 按键调时电路通过控制键来控制所要调节的是时、分、还是秒。
在控制键按下后LCD中会在相应的位置出现光标,这时在通过加数键或减数键来控制时分秒的加或减。
在调闹钟键按下后LCD中也会在相应的位置出现光标,这时也通过加数键或减数键来设置闹钟。
显示电路:显示电路图如图4所示:图4 显示电路图闹钟部分:闹钟部分主要由蜂鸣器,三极管,电阻组成。
其电路图如图5所示:图5 闹钟电路当单片机的P1^5接口输出为高电平时,蜂鸣器响,当输出为低电平时,蜂鸣器停止。
时钟连接图如图6:图6 电路图4、软件设计软件流程图:初始化判断显示内容动态显示按键扫描是否按键 执行相应功能是主程序流程开始否重新赋初值闪烁显示控制是否开闹钟 是否开闹钟计时是否整点报时 整点报时是否 回到主程序T1定时器中断流程5、系统调试首先运行keil软件,并新建一工程并保存,然后再新建一C文件并输入程序代码(见附录)调试运行生成.hex文件,然后打开protues软件并打开新建的.hex文件,之后点击单片机出现如图7窗口:图 7 添加hex文件窗口最后单击窗口中该按钮添加hex文件并点击确定按钮,运行文件出现如图8所示仿真结果:图8 仿真结果6、软件编程程序主要分为两个部分,即显示部分和控制按键部分。
由于本设计采用的是用按键分别控制,可以在主函数中调用一个键盘扫描的函数,当相应的不同按键按下后通过控制单片机P2的输出,从而控制液晶的显示。
源程序见附录二所示:编程思路:在确定了时钟要实现的功能后按照上述各按键所实现的效果编写程序。
本程序包含液晶写指令函数(write-com())、写数据函数(write-data())、初始化函数(init())、写入时分秒函数(write-sfm())和键盘扫描函数,这些程序围绕主函数相互调用。
7、总结与体会在本次设计的过程中,我发现很多的问题,同时也让我认识到单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法。
从这次的课程设计中,我真真正正意识到,在写程序时,逻辑思维要清晰,要有耐心。
在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有经常写和读才能提高,这就是我在这次设计中的最大收获。
参考文献:[1].李光才.单片机课程设计实例指导[M].北京:北京航空航天大学出版社, 2004.[2] 朱定华.单片机原理及接口技术实验[M].北京:北方交通大学出版社,2002.11[3] 刘湘涛.江世明.单片机原理与应用[M]. 北京:电子工业出版社,2006.[4] 何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1993.[5] 楼然笛.单片机开发[M].北京:人民邮电出版社,1994.[6] 付家才.单片机控制工程实践技术[M].北京:化学工业出版社,2004.3.附录:#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit beep=P1^5; //定义蜂鸣器的io口sbit rw=P2^1; //定义读写的io口sbit rs=P2^0; //定义接收与发送指令的io口sbit lcden=P2^2; //定义使能端的io口sbit k1=P3^0; //定义调时键的io口sbit k2=P3^1; //定义加数键的io口sbit k3=P3^2; //定义减数键的io口sbit k4=P3^3; //定义调闹钟键的io口uchar count,count1,num,num1,num2;char h,min,sec,h1,min1,sec1;uchar table[]={" 11:59:57"};uchar table1[]={" 12:30:00"};void delay(uint z) //延时程序{int x,y;for(x=z;x>0;x--)for(y=120;y>0;y--);}delay1(uchar z) //延时程序{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(uchar com) //写指令函数{rs=0;rw=0;lcden=0;P0=com;delay(1);lcden=1;delay(1);lcden=0;}void write_data(uchar date) //写数据函数rs=1;rw=0;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void write_pos(uchar pos) //设定地址{write_com(pos | 0x80); //数据指针=80+地址变量}void write_sfm(uchar add,uchar date) //设定时分秒及其显示与地址{uint shi,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);write_data(0x30+shi);write_data(0x30+ge);}void write_sfm1(uchar add,uchar date) //设置闹钟时分秒及其显示与地址{uint shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);write_data(0x30+shi);write_data(0x30+ge);}void keyscan() //键盘扫描{if(k1==0){delay1(5);if(k1==0){while(!k1);num++;if(num==1)TR0=0;write_com(0x80+0x40+11);write_com(0x0f);}if(num==2){write_com(0x80+0x40+8);}if(num==3){write_com(0x80+0x40+5);}if(num==4){num=0;write_com(0x0c);TR0=1;}}}if(num!=0){if(k2==0){delay1(5);if(k2==0){while(!k2)if(num==1){sec++;if(sec==60)sec=0;write_sfm(10,sec);write_com(0x80+0x40+0x10);}if(num==2){min++;if(min==60)min=0;write_sfm(7,min);write_com(0x80+0x40+8);if(num==3){h++;if(h==24)h=0;write_sfm(4,h);write_com(0x80+0x40+5);}}}if(k3==0){delay1(5);if(k3==0){while(!k3);if(num==1){sec--;if(sec==-1)sec=59;write_sfm(10,sec);write_com(0x80+0x40+0x10);}if(num==2){min--;if(min==-1)min=59;write_sfm(7,min);write_com(0x80+0x40+8);}if(num==3){h--;if(h==-1)h=23;write_sfm(4,h);write_com(0x80+0x40+5);}}}}if(k4==0){delay1(5);if(k4==0){while(!k4);num1++;if(num1==1){write_sfm1(10,sec1);write_sfm1(7,min1);write_sfm1(4,h1);}if(num1==2){write_com(0x80+11);write_com(0x0f);}if(num1==3){write_com(0x80+8);}if(num1==4){write_com(0x80+5);}if(num1==5){num1=0;write_com(0x0c);write_sfm(10,sec);write_sfm(7,min);write_sfm(4,h);}}}if(num1!=0){if(k2==0){delay1(5);if(k2==0){while(!k2)if(num1==2){sec1++;if(sec1==60)sec1=0;write_sfm1(10,sec1);write_com(0x80+0x10);}if(num1==3){min1++;if(min1==60)min1=0;write_sfm1(7,min1);write_com(0x80+8);}if(num1==4){h1++;if(h1==24)h1=0;write_sfm1(4,h1);write_com(0x80+5);}}}if(k3==0){delay1(5);if(k3==0){while(!k3);if(num1==2){sec1--;if(sec1==-1)sec1=59;write_sfm1(10,sec1);write_com(0x80+0x10);}if(num1==3){min1--;if(min1==-1)min=59;write_sfm1(7,min1);write_com(0x80+8);}if(num1==4){h1--;if(h1==-1)h1=23;write_sfm1(4,h1);write_com(0x80+5);}}}}}void init() //程序初始化函数{uint i;h=11;min=59;sec=57;h1=12;min1=30;sec1=00;num=0;lcden=0;write_com(0x38); //设置16乘2格式delay(1);write_com(0x0c); //显示开,关光标delay(1);write_com(0x06); //移动光标delay(1);write_com(0x01); //清除LCD的显示内容delay(1);i=0;while(table1[i] != '\0') //显示闹钟(静态){write_data(table1[i]);i++;}i=0;write_pos(0x40);while(table[i] != '\0') //显示时间(静态){write_data(table[i]);i++;}TMOD=0x01; //定时器TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1; //开启定时器ET0=1;TR0=1;}void main(){init();while(1){keyscan();if(min==min1&&h==h1) //闹钟启动条件{if(sec<=3) //响三秒{beep=1;}elsebeep=0;}elsebeep=0;}}void timer0() interrupt 1 //定时器时间设定{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){count=0;sec++;if(sec==60){sec=0;min++;if(min==60){min=0;h++;if(h==24){h=0;}write_sfm(4,h);}write_sfm(7,min);}write_sfm(10,sec);}}。