电子时钟程序设计
8086数字电子钟的设计 附程序代码
附件3课程设计(综合实验)报告( 2011 -- 2012 年度第 1 学期)名称:硬件课程与实践题目:8086数字电子钟的设计院系:班级:学号:学生姓名:指导教师:设计周数:2周成绩:日期:2011年09月01日一、课程设计的目的与要求1. 综合运用学过的相关软、硬件知识,利用伟福LAB6000实验设备,设计具有实用功能的电子钟,实现电子时钟的准确运行、校时等功能。
2.熟悉伟福LAB6000的功能,掌握数码管设计和键盘设计的要领及相关技术,能够利用实验设备实现电子钟系统的设计。
3.提高自己的硬件设计分析能力,同时培养软硬结合的系统设计思维,从而提高设计系统的可行性和准确性。
二、课程设计正文A.设计题目:8086数字电子钟的设计:1.设计并完成LED七段数码管数字钟电路。
2.数字钟显示格式为:HH:MM:SS。
3.具有通过键盘能够调整时、分、秒及设置闹铃的功能。
4.具有暂停时间及复位功能。
B.设计方案本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在中断服务程序中对秒计数得到分和小时值并判断闹铃是否到时。
编写键盘扫描和LED显示程序完成设置时间、定闹铃及数码管显示功能。
C.硬件原理1.七段数码管显示和键盘扫描显示图1.1七段数码管图1.2伟福实验台六位LED的电路图及寻址空间实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。
将KEY/LED CS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。
实验箱提供了一个6×4的小键盘,将KEY/LED CS信号接到CS0上,则列扫描地址为08002H,行码地址为08001H。
51单片机课程设计电子时钟
51单片机课程设计电子时钟课程设计:单片机课程设计课程名称:单片机电子时钟题目名称:电信学院学院:程工专业子电:姓名曾代科:学号 3201:国加杨指导教师2010月11年 7日一、课程设计名称:51单片机电子时钟二、设计方案:1、通过单片机内部的计数/定时器,采用软件编程来实现时钟计数,一般称为软时钟,这种方法的硬件线路简单,系统的功能一般与软件设计相关,通常用在对时间精度要求不高的场合。
2、采用时钟芯片,它的功能强大,功能部件集成在芯片内部,具有自动产生时钟等相关功能,硬件成本相对较高;软件编程简单,通常用在对时钟精度要求较高的场合。
三、设计内容:这里采用应用广泛的AT89C52作为时钟控制芯片,利用单片机内部的定时/计数器T0 实现软时钟的目的。
首先将T0设定工作于定时方式,对机器周期计数形成基准时间(50ms),然后用另一个定时/计数器T1对基准时间计数形成秒,妙计60次形成分,分计60形成小时,小时计到12。
最后通过数码管把它们的内容在相应的位置显示出来,达到时、分、秒计时的功能。
此外还要实现对时间的调整功能,89C52的、、外接三个独立按键,当按下按键时,系统进入调时间的状态或启动时间显示的功能;当按下按键时,对显示的数码管进行加一的功能;当按下按键时,对显示的数码管进行减一的功能,达到调整时间的目的。
四、系统软件程序设计1.主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有按键按下时,则转入相应的功能程序。
2、数码管显示模块本实验有8个数码管,从右到左为妙、横线、分、横线、时。
在本系统中数码管显示采用软件译码动态显示。
在存储器中首先建立一张显示信息的字段码表,显示时,先中取出显示的信息,然后通过查表程序在从显示缓冲区字段表中查出所显示的信息的断码,从P0端口输出,同时在P2端口进行数码管显示。
3、定时器/计数器T0中断服务程序T0用于计时,选中方式一,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加一。
基于单片机电子时钟的设计
基于单片机电子时钟的设计一、设计背景随着科技的不断进步,电子设备在我们的生活中扮演着越来越重要的角色。
时钟作为时间的测量工具,也从传统的机械时钟逐渐发展为电子时钟。
单片机作为一种集成度高、功能强大的微控制器,为电子时钟的设计提供了高效、可靠的解决方案。
基于单片机的电子时钟具有精度高、易于编程、成本低等优点,能够满足人们对时间测量和显示的各种需求。
二、系统设计方案1、硬件设计单片机选择:选择合适的单片机是整个系统设计的关键。
常见的单片机如STM32、AT89C51 等,具有不同的性能和特点。
根据系统需求,我们选择了 AT89C51 单片机,其具有成本低、性能稳定等优点。
时钟芯片:为了保证时间的准确性,需要选择高精度的时钟芯片。
DS1302 是一款常用的实时时钟芯片,具有低功耗、高精度等特点,能够为系统提供准确的时间信息。
显示模块:显示模块用于显示时间。
常见的显示模块有液晶显示屏(LCD)和数码管。
考虑到显示效果和成本,我们选择了 1602 液晶显示屏,能够清晰地显示时间、日期等信息。
按键模块:按键模块用于设置时间和调整功能。
通过按键可以实现时间的校准、闹钟的设置等功能。
电源模块:为整个系统提供稳定的电源。
可以选择电池供电或外部电源供电,根据实际使用场景进行选择。
2、软件设计编程语言:选择合适的编程语言进行软件编程。
C 语言是单片机编程中常用的语言,具有语法简单、可读性强等优点。
主程序流程:主程序首先进行系统初始化,包括单片机端口初始化、时钟芯片初始化、显示模块初始化等。
然后读取时钟芯片中的时间信息,并将其显示在液晶显示屏上。
通过按键检测模块,判断是否有按键操作,如果有,则进行相应的处理,如时间校准、闹钟设置等。
中断服务程序:为了保证时间的准确性,需要使用定时器中断来实现时钟的计时功能。
在中断服务程序中,对时钟芯片进行时间更新,确保时间的准确性。
三、硬件电路设计1、单片机最小系统单片机:AT89C51 单片机是整个系统的核心,负责控制和协调各个模块的工作。
题目:电子日历时钟系统程序设计
题目:电子日历时钟系统程序设计一、功能:1.可通过M键切换显示模式:日期(年、月、日)、时间(小时、分、秒)、秒表(小时、分、秒、1/100秒)、闹钟(小时、分、秒)。
2.在日期显示模式,可通过A键依次使年、月、日闪烁或变色,这时可通过I键加1调整。
3.在时间显示模式,可通过A键依次使小时、分、秒闪烁或变色,这时可通过I键加1调整。
4.在秒表显示模式,可通过I键切换(启动/暂停)计时,当暂停计时时可通过A键复位。
5.在闹钟显示模式,可通过A键依次使On/Off标志、小时、分、秒闪烁或变色,这时可通过I键切换On/Off标志或加1调整。
6.调整和秒表操作不影响日期和时间的准确性。
7.可通过Q键结束程序。
二、任务与要求:1.实现方案,流程图(20分)2.实现日期的显示和调整(15分)3.实现时间的显示和调整(15分)4.实现日期和时间的准确性(5分)5.实现程序正常结束(5分)6.实现秒表功能(20分)7.实现闹钟功能,发声10秒(20分)8.基本实现前5项要求,再实现其它扩展要求,视难度加分。
答辩中误导答辩教师(由答辩教师认定,如某些同学参考其它资料但坚持声称全是自己编写的情况),视情节扣分。
n组设计雷同(由答辩教师认定),第一组正常计分,其余n-1组不计分。
设计报告总体要求:①写出主要设计思路,工作原理;②画出硬件接线图;③调试出现的问题及解决方法;④提交程序清单。
三、编程提示:PC机系统中的8253定时器0工作于方式3,外部提供一个时钟作为CLK信号,频率f=1.1931816MHz。
定时器0输出方波的频率: f out=1.1931816/65536=18.2Hz输出方波的周期T out=1/18.2=54.945ms。
8253A每隔55ms引起一次中断,作为定时信号。
可用55945ms作基本计时单位。
用BIOS调用INT 1AH可以取得该定时单位。
例:1秒=18.2 (计时单位)。
主要利用PC机系统功能调用实现电子日历时钟。
电子设计自动化(EDA)_数字时钟程序模块(LED数码管显示)_实验报告
电子设计自动化(EDA)—数字时钟LED数码管显示二、实验内容和实验目的1. 6个数码管动态扫描显示驱动2. 按键模式选择(时\分\秒)与闹钟(时\分)调整控制,3. 用硬件描述语言(或混合原理图)设计时、分、秒计数器模块、闹钟模块、按键控制状态机模块、动态扫描显示驱动模块、顶层模块。
要求使用实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒;要求模式按键和调整按键信号都取自经过防抖处理后的按键跳线插孔。
实验目的: 1)学会看硬件原理图, 2)掌握FPGA硬件开发的基本技能3)培养EDA综合分析、综合设计的能力三、实验步骤、实现方法(或设计思想)及实验结果主要设备: 1)PC机, 2)硬件实验箱, 3)Quartus II软件开发平台。
1.打开Quartus II , 连接实验箱上的相关硬件资源, 如下图1所示。
2.建立新文件, 选择文本类型或原理图类型。
3. 编写程序。
4.编译5. 仿真, 加载程序到芯片, 观察硬件输出结果(数码管显示)6.结果正确则完成。
若结果不正确, 则修改程序, 再编译, 直到正确。
模24计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count24 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count24;ARCHITECTURE arc OF count24 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk,en)BEGINhh<=a;hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0010" AND b="0011") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;IF(a="0010" AND b="0010") THENcout<='1';ELSE cout<='0';END IF;END IF;END IF;END PROCESS;END arc;模60计数器模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY count60 ISPORT(clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END count60;ARCHITECTURE arc OF count60 ISSIGNAL a,b:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL sout:STD_LOGIC;BEGINPROCESS(clk)BEGINhh<=a; hl<=b;IF(clk'EVENT AND clk='1') THENIF(en='1') THENIF(a="0101" AND b="1001") THENa<="0000";b<="0000";ELSE IF(b="1001") THENa<=a+'1';b<="0000";ELSE b<=b+'1';END IF;END IF;END IF;END IF;END PROCESS;sout<='1' WHEN a="0101" AND b="1001" ELSE '0';cout<=sout AND en;END arc;4-7显示译码模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY segment4to7 ISPORT(s:IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g:OUT STD_LOGIC);END segment4to7;ARCHITECTURE arc OF segment4to7 IS SIGNAL y:STD_LOGIC_VECTOR(6 DOWNTO 0); BEGINa<= y(6);b<= y(5);c<= y(4);d<= y(3);e<= y(2); f<= y(1);g<= y(0);PROCESS(s)BEGINCASE s ISWHEN "0000"=>y<="1111110"; WHEN "0001"=>y<="0110000"; WHEN "0010"=>y<="1101101"; WHEN "0011"=>y<="1111001"; WHEN "0100"=>y<="0110011"; WHEN "0101"=>y<="1011011"; WHEN "0110"=>y<="1011111"; WHEN "0111"=>y<="1110000"; WHEN "1000"=>y<="1111111"; WHEN "1001"=>y<="1111011"; WHEN OTHERS=>y<="0000000"; END CASE;END PROCESS;END arc;带闹钟控制模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mode_adjust_with_alarm ISPORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END mode_adjust_with_alarm;ARCHITECTURE arc OF mode_adjust_with_alarm ISTYPE mystate IS (s0,s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS (c_state)BEGINCASE c_state ISWHEN s0=> next_state <= s1; clkh<=clk1hz; clkm<=clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="000";WHEN s1=> next_state <= s2; clkh<=adjust; clkm<= '0'; clks<='0';enh<='1'; enm<='0';enha<='0'; clkh_a<= '0';clkm_a<= '0'; mode_ss <="001";WHEN s2=> next_state <= s3; clkh<= '0'; clkm<=adjust; clks <= '0';enh<='0';enm<='1';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="010";WHEN s3=> next_state <= s4; clkh<= '0'; clkm<= '0'; clks<=adjust;enh<='0'; enm<='0';enha<='0'; clkh_a<= '0'; clkm_a<= '0'; mode_ss <="011";WHEN s4=> next_state <= s5; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0';enm<='0';enha<='1'; clkh_a<=adjust; clkm_a<= '0'; mode_ss <="100";WHEN s5=> next_state <= s0; clkh<= clk1hz; clkm<= clk1hz; clks<=clk1hz;enh<='0'; enm<='0'; enha<='0'; clkh_a<= '0'; clkm_a<=adjust; mode_ss <="101";END CASE;END PROCESS;PROCESS (mode)BEGINIF (mode'EVENT AND mode='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;扫描模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY scan ISPORT(clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END scan;ARCHITECTURE arc OF scan ISTYPE mystate IS (s0, s1,s2,s3,s4,s5);SIGNAL c_state,next_state: mystate;BEGINPROCESS ( c_state )BEGINCASE c_state ISWHEN s0=> next_state <=s1; ss<="010";WHEN s1=> next_state <=s2; ss<="011";WHEN s2=> next_state <=s3; ss<="100";WHEN s3=> next_state <=s4; ss<="101";WHEN s4=> next_state <=s5; ss<="110";WHEN s5=> next_state <=s0; ss<="111";END CASE;END PROCESS;PROCESS (clk256hz)BEGINIF (clk256hz'EVENT AND clk256hz='1') THENc_state<=next_state ;END IF;END PROCESS;END arc;复用模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux ISPORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END mux;ARCHITECTURE arc OF mux ISSIGNAL a,hhtmp,hltmp,mhtmp,mltmp,shtmp,sltmp:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(mode_ss)BEGINCASE mode_ss ISWHEN "000"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "001"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "010"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "011"=>hhtmp<=hh; hltmp<=hl; mhtmp<=mh; mltmp<=ml; shtmp<=sh; sltmp<=sl;WHEN "100"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN "101"=> hhtmp<=hha; hltmp<=hla; mhtmp<=mha; mltmp<=mla; shtmp<=sh; sltmp<=sl;WHEN OTHERS=>hhtmp<="0000";hltmp<="0000";mhtmp<="0000";mltmp<="0000";shtmp<="0000";sltmp<="0000"; END CASE;END PROCESS;PROCESS(ss)BEGINCASE ss ISWHEN "010"=> a <=hhtmp;WHEN "011"=> a <=hltmp;WHEN "100"=> a <=mhtmp;WHEN "101"=> a <=mltmp;WHEN "110"=> a <=shtmp;WHEN "111"=> a <=sltmp;WHEN OTHERS => a <="0000";END CASE;y<=a;END PROCESS;alarm<='1' WHEN ((hh=hha)AND(hl=hla)AND(mh=mha)AND(ml=mla)) ELSE '0';END arc;闪烁模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY blink_control ISPORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END blink_control;ARCHITECTURE arc OF blink_control ISBEGINPROCESS (ss,mode_ss)BEGINIF(ss="010" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="001") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="010") THEN blink_en<='1';ELSIF(ss="110" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="111" AND mode_ss="011") THEN blink_en<='1';ELSIF(ss="010" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="011" AND mode_ss="100") THEN blink_en<='1';ELSIF(ss="100" AND mode_ss="101") THEN blink_en<='1';ELSIF(ss="101" AND mode_ss="101") THEN blink_en<='1';ELSE blink_en<='0';END IF;END PROCESS;END arc;Top文件LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY design3 ISPORT (mode,adjust,clk1hz,clk2hz,clk256hz,clk1khz:IN STD_LOGIC;alarm,a,b,c,d,e,f,g:OUT STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END design3;ARCHITECTURE arc OF design3 ISCOMPONENT mode_adjust_with_alarm PORT (adjust,mode,clk1hz: IN STD_LOGIC;clkh,enh,clkm,enm,clks,enha: OUT STD_LOGIC;clkh_a,clkm_a:OUT STD_LOGIC;mode_ss: OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT scan PORT (clk256hz:IN STD_LOGIC;ss:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));END COMPONENT;COMPONENT segment4to7 PORT (s: IN STD_LOGIC_VECTOR(3 DOWNTO 0);a,b,c,d,e,f,g: OUT STD_LOGIC);END COMPONENT;COMPONENT mux PORT(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla:IN STD_LOGIC_VECTOR(3 DOWNTO 0);ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);alarm:OUT STD_LOGIC);END COMPONENT;COMPONENT blink_control PORT(ss,mode_ss:IN STD_LOGIC_VECTOR(2 DOWNTO 0);blink_en:OUT STD_LOGIC);END COMPONENT;COMPONENT count24 PORT (clk,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT count60 PORT (clk ,en:IN STD_LOGIC;cout:OUT STD_LOGIC;hh,hl:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;SIGNALclkh,enh,clkm,enm,clks,clkh_a,clkm_a,coutm,couts,coutm_en,couts_en,cout,vcc,coutma_en,coutma,alarm1,bli nk_en,blink_tmp,enha: STD_LOGIC;SIGNAL mode_ss,ss1:STD_LOGIC_VECTOR(2 DOWNTO 0);SIGNAL hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,y,i:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINvcc<='1';coutm_en <= enh OR coutm;couts_en <= enm OR couts;coutma_en<= enha OR coutma;blink_tmp<=blink_en and clk2hz;i(3)<=y(3) OR blink_tmp;i(2)<=y(2) OR blink_tmp;i(1)<=y(1) OR blink_tmp;i(0)<=y(0) OR blink_tmp;ss<=ss1;alarm<=alarm1 AND clk1khz;u1:mode_adjust_with_alarmPORT MAP( adjust,mode,clk1hz,clkh,enh,clkm,enm,clks,enha,clkh_a,clkm_a,mode_ss);u2:count24 PORT MAP(clkh,coutm_en,cout,hh,hl);u3:count60 PORT MAP(clkm,couts_en,coutm,mh,ml);u4:count60 PORT MAP(clks,vcc,couts,sh,sl);u5:count24 PORT MAP(clkh_a,coutma_en,cout,hha,hla);u6:count60 PORT MAP(clkm_a,vcc,coutma,mha,mla);u7:mux PORT MAP(hh,hl,mh,ml,sh,sl,hha,hla,mha,mla,ss1,mode_ss,y,alarm1);u8:scan PORT MAP(clk256hz,ss1);u9:blink_control PORT MAP(ss1,mode_ss,blink_en);u10:segment4to7 PORT MAP(i,a,b,c,d,e,f,g);END arc;实验结果:数字钟包括正常的时分秒计时, 实验箱左下角的6个动态数码管(DS6 A~DS1A)显示时、分、秒。
单片机电子时钟设计程序
单片机电子时钟设计程序
1.引用头文件和定义全局变量
首先需要引用相应的头文件,例如`reg52.h`,并定义全局变量用于
存储时间、闹钟时间以及其他相关参数。
2.初始化时钟
在主函数中,首先进行时钟的初始化。
这包括设置定时器和中断相关
的寄存器,以及初始化显示屏和按钮等外设。
3.时间更新
编写一个中断服务函数,用于根据定时器的中断来更新时间。
在该中
断服务函数中,需要将全局变量中的时间进行递增,并考虑到分钟、小时、日期和星期等的进位和换算。
4.按钮输入
设置一个子函数用于读取按钮输入,并根据按钮的状态来进行相应的
操作,比如切换时钟显示模式、设置闹钟等。
5.显示时间
编写一个子函数用于将时间信息显示在数码管上。
这需要先将时间信
息转换为数码管的显示格式,然后通过IO口输出控制数码管的显示。
6.闹钟设置
使用按钮输入的功能,可以设置闹钟时间和开关闹钟功能。
当闹钟时
间到达时,可以通过控制蜂鸣器发声或点亮LED等方式来进行提醒。
7.主函数
在主函数中,循环执行按钮输入的检测和相应操作,以及时间的更新和显示等功能。
可以通过一个状态机来控制整个程序的流程。
以上是一个简要的单片机电子时钟设计程序的概述。
实际的程序设计过程中,还需要考虑到各个模块之间的交互、错误处理、电源管理以及代码的优化等细节问题。
具体的程序实现可以根据具体需求和硬件平台的差异进行适当的修改和扩展。
基于STC89C52多功能电子时钟系统程序+原理图
一、设计任务设计制作一台以控制器为核心的多功能电子时钟系统二、设计要求:①.系统具有3种工作模式状态(正常时钟显示模式、系统校准模式、秒表计时模式);系统所有功能,均能够通过上位PC机对其操作修改与实时动态显示。
(PC主机端可利用高级语言进行人机界面设计)②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。
③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。
高音频率为1KHz;④.在系统校准模式时,系统具有快速校准时间的功能。
⑤.在秒表计时模式时,可兼做比赛时间记录表。
秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。
⑥.系统显示器采用LCD液晶显示器1602或其它显示器件,并采用键盘对相关数据进行设置与操作。
原理图设计制作一台以控制器为核心的多功能电子时钟系统二、设计要求:①.系统具有3种工作模式状态(正常时钟显示模式、系统校准模式、秒表计时模式);系统所有功能,均能够通过上位PC机对其操作修改与实时动态显示。
(PC主机端可利用高级语言进行人机界面设计)(注:此三种模式可以通过SET键盘来回切换,在正常时钟模式,第二排显示S:time,校准模式显示S:adjst,秒表模式,是TN~T3:四个秒表模式);②.在正常时钟显示模式时,时钟具有显示年、月、日、时、分、秒的功能。
(注:这个已经全部显示了,含星期)③.在正常时钟显示模式时,系统具有整点报时的功能,在离整点前10秒时,自动发出鸣叫声,步长1秒,每间隔1秒鸣叫一次,前4响是低音,后1响为高音,共鸣叫5次,最后1响结束时为整点。
高音频率为1KHz;(注:这个都实现了,要验证的话就是将时钟调整到59分后验证即可)④.在系统校准模式时,系统具有快速校准时间的功能。
毕业设计84吉林建筑工程学院电子时钟显示程序设计
目录一、课程设计的目的----------------------(2)二、课程设计的题目----------------------(2)三、课程设计的主要内容--------------------(2)(一)、程序论述----------------------(2)(二)、程序设计的步骤-------------------(2)(三)程序流程图----------------------(2)(四)程序------------------------(4)(五)结果显示-----------------------(14)四、总结----------------------------(14)(一)、本设计主要用到的DOS、BIOS调用及功能---------(14)(二)、心得体会----------------------(15)五、参考文献--------------------------(16)一、课程设计的目的:本次《微型计算机原理及应用》课程设计我选择了用汇编语言做电子时钟,其主要目的是加强软件编程能力。
通过本次设计复习并熟练掌握微机原理中的基本操作指令、DOS 中断功能调用以及BIOS中断功能调用。
最主要的是使用汇编语言编程来实现现实中许多电子产品的功能。
二、课程设计的题目:电子时钟显示程序设计三、课程设计的主要内容:(一)、程序论述本次《微型计算机原理及应用》课程设计我做的题目是“电子时钟显示程序设计”,是使用汇编语言编程实现电子时钟显示的功能。
主要提供了系统时间的调用,设置时间及显示时间等功能。
在我所做的程序中主要以下面的内用运行。
主程序首先注册新的中断处理程序从系统中取得时间,然后持续等待,直到在中断程序中检测到有按键时间的发生,然后主程序取消中断处理程序。
判断输入的键,然后根据相应的按键提供相应的设置功能。
中断处理程序每次得到系统定时器中断时间、,判断是否到达1秒,如果到达则更新时间,存入数据区,然后更新数据的显示。
数字电子钟设计实验报告
数字电子钟设计实验报告实验项目名称:数字电子钟的设计实验项目性质:普通试验所属课程名称:VHDL程序设计实验计划学时:4学时一、实验目的掌握VHDL程序设计方法二、实验内容和要求能够实现小时(24进制)、分钟和秒钟(60进制)的计数功能具有复位功能功能扩展:具有复位、整点报时提示、定时闹钟等功能在软件工具平台上,进行VHDL语言的各模块编程输入、编译实现和仿真验证。
三、实验主要仪器设备和材料计算机四.设计思想1、计数模块:Q0为六十进制计数,代表秒计数,当Q0<59时,每逢一个时钟上升沿Q0增加1,直到当Q0=59时,再逢一个时钟上升沿,立即输出高电平至进位CLK1。
使得CLK1为一个60秒为周期的时钟,作为六十进制分计数Q1时钟。
同理,当Q1<59时,每逢一个时钟上升沿Q1加1,直到当Q1=59,再逢一个时钟上升沿,立即输出高电平到进位CLK2。
CLK2是一个60分钟为周期的时钟,作为二十四进制时计数Q2的时钟。
2、复位模块:分别在秒,分,时计数模块语句之前加入一个判断语句IF RST=‘0',如果复位输入RST为0则跳过计数模块,不为0则运行计数模块。
3、整点报时模块:判断秒,分计数是否都为0,【Q1=("000000")AND(Q0="000000")】,如果是,则令报时ALM0输出为1,不是则输出为0。
4、定时闹钟模块:用户设定闹钟DS(秒),DF(分),DM(秒)的输入,当它们都等于输出的Q1(分),Q2(时)数值时,则令闹钟ALM1输出为1,否则输出为0。
五、源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clock ISPORT (CLK,RST:IN STD_LOGIC;CLK1,CLK2:INOUT STD_LOGIC;CLK3:OUT STD_LOGIC;S:OUT STD_LOGIC_VECTOR(4 DOWNTO 0);F,M:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);DS:IN STD_LOGIC_VECTOR(4 DOWNTO 0);DF,DM:IN STD_LOGIC_VECTOR(5 DOWNTO 0);ALM0,ALM1:OUT STD_LOGIC);END clock;ARCHITECTURE one OF clock ISBEGINPROCESS(CLK,RST)VARIABLE Q0: STD_LOGIC_VECTOR(5 DOWNTO 0);VARIABLE Q1: STD_LOGIC_VECTOR(5 DOWNTO 0);VARIABLE Q2: STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINIF RST='0' THEN Q0:=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1' THENIF Q0="111011" THEN CLK1 <= '1' ;ELSE CLK1<='0';END IF ;IF Q0<59 THEN Q0:=Q0+1;ELSE Q0:=(OTHERS=>'0') ;END IF;END IF;IF RST='0' THEN Q1:=(OTHERS=>'0');ELSIF CLK1'EVENT AND CLK1='1' THENIF Q1="111011" THEN CLK2 <= '1' ;ELSE CLK2<='0';END IF ;IF Q1<59 THEN Q1:=Q1+1;ELSE Q1:=(OTHERS=>'0') ;END IF;END IF;IF RST='0' THEN Q2:=(OTHERS=>'0');ELSIF CLK2'EVENT AND CLK2='1' THENIF Q2="011101" THEN CLK3 <= '1' ;ELSE CLK3<='0';END IF ;IF Q2<23 THEN Q2:=Q2+1;ELSE Q2:=(OTHERS=>'0') ;END IF;END IF;M<=Q0;F<=Q1;S<=Q2;IF Q1=("000000")AND(Q0="000000") THEN ALM0<='1'; ELSE ALM0<='0';END IF ;IF (Q0=DM)AND (Q1=DF)AND(Q2=DS) THEN ALM1<='1'; ELSE ALM1<='0';END IF;END PROCESS;END one;六、仿真图秒到分进位:分到时进位:23时59分59秒进位:复位:整点报时:闹钟报时(闹钟时间设定为7时16分4秒):七、总结经过这次实验,让我更加熟悉了VHDL的编程实现。
51单片机数字钟设计程序
51单片机数字钟设计程序51单片机是一种常用的单片机芯片,它具有体积小、功耗低、性能稳定等特点,被广泛应用于各种电子设备中。
本文将以51单片机数字钟设计程序为主题,介绍如何使用51单片机设计并实现一个简单的数字钟。
我们需要了解一下数字钟的基本原理。
数字钟主要由时钟芯片、数码管、按键等组成。
时钟芯片负责计时和控制,数码管用于显示时间,按键则用于设置和调整时间。
在设计数字钟的程序时,我们需要考虑以下几个方面:1. 时钟设置:首先,我们需要设置时钟芯片的工作模式。
一般来说,时钟芯片有两种工作模式,分别是24小时制和12小时制。
我们可以通过按键来选择工作模式,并将选择结果保存到相应的寄存器中。
2. 时间显示:接下来,我们需要将时钟芯片中的时间数据通过数码管显示出来。
数码管通常由7段LED组成,每段LED对应一个数字或字符。
我们可以通过控制数码管的引脚状态来实现不同数字的显示。
同时,为了使时间显示更加清晰,我们可以在数码管之间加入冒号等分隔符。
3. 时间调整:为了保证时间的准确性,我们需要提供时间调整的功能。
可以通过按键来实现时间的增加和减少,从而调整时钟芯片中的时间数据。
当按键按下时,我们可以检测到相应的信号,并将其转换为时间调整的命令。
4. 闹钟功能:除了显示时间,数字钟还可以具备闹钟功能。
我们可以设置一个闹钟时间,并在达到闹钟时间时触发相应的报警信号。
一般来说,闹钟功能可以通过按键设置,并将设置结果保存在相应的寄存器中。
当时钟芯片中的时间与闹钟时间一致时,我们可以通过控制蜂鸣器等外设来发出报警信号。
通过以上的设计,我们可以实现一个简单的数字钟。
当然,如果我们希望数字钟具备更多的功能,比如温湿度显示、定时器等,我们还可以在程序中添加相应的代码来实现。
总结一下,本文以51单片机数字钟设计程序为主题,介绍了数字钟的基本原理以及设计过程。
通过对时钟芯片、数码管、按键等的控制,我们可以实现时间的显示、调整和闹钟功能。
单片机电子时钟设计程序(一)
单片机电子时钟设计程序(一)引言概述:电子时钟是一种广泛应用于家庭、办公室和公共场所的设备。
它在我们日常生活中起到了举足轻重的作用。
本文将介绍如何设计一个基于单片机的电子时钟程序,该程序能够准确地显示时间,并具备一些常用功能。
正文:1. 时钟芯片选择- 研究市场上常用的时钟芯片类型,如RTC芯片、单片机内部时钟等。
- 根据需求选择适合的时钟芯片,考虑其精度、功耗和价格等因素。
- 确定所选时钟芯片与单片机的连接方式和通信协议。
2. 硬件电路设计- 根据所选的时钟芯片类型和要求,设计电路连接图。
- 包括时钟芯片与单片机的连接,蜂鸣器和LED数码管等外部器件的接口设计。
- 确保电路可靠性和稳定性,避免干扰和电源问题。
3. 软件程序编写- 熟悉所选单片机的编程语言和开发环境。
- 设计时钟的显示逻辑,包括时、分、秒的显示方式和刷新频率。
- 实现时间的自动更新功能,通过与时钟芯片的通信获取准确的时间信息。
- 添加常用功能,如闹钟设置、定时器等,并编写相应的逻辑控制代码。
4. 调试与测试- 焊接和连接电路,并将单片机程序烧录进芯片。
- 进行硬件和软件的联合调试,确保电子时钟的功能正常。
- 测试不同情况下的准确性和稳定性,如供电中断、温度变化等。
5. 优化与改进- 对电子时钟的外观和显示效果进行优化,增加界面美感。
- 优化编程代码,提高时钟的运行效率和响应速度。
- 改进硬件电路,减少功耗和杜绝干扰,提高系统稳定性。
总结:通过本文提供的指导,我们可以设计一个功能齐全、准确可靠的单片机电子时钟程序。
从选择时钟芯片到硬件电路设计,再到软件程序编写和调试与测试,每个步骤都需要认真思考和细致操作。
通过不断优化与改进,我们可以提高电子时钟的性能和用户体验,为人们提供更好的时间显示和功能体验。
51单片机电子时钟课程设计报告
第一部分设计任务和要求1.1单片机课程设计内容 (2)1.2单片机课程设计要求 (2)1.3系统运行流程 (2)第二部分设计方案2.1总体设计方案说明 (2)2.2系统方框图 (3)2.3系统流程图 (3)第三部分主要器材及基本简介3.1主要器材 (4)3.2主要器材简介 (4)第四部分系统硬件设计4.1最小系统 (6)4.2LCD显示电路 (6)4.3键盘输入电路 (7)4.4蜂鸣器和LED灯电路 (7)第五部分仿真电路图与仿真结果 (8)第六部分课程设计总结 (8)第七部分参考文献 (9)附录A 实物图附录B 系统源程序第一部分设计任务和要求1.1单片机课程设计内容利用STC89C51单片机和LCD1602电子显示屏实现电子时钟,可由按键进行调时和12/24小时切换。
1.2单片机课程设计要求1.能实现年、月、日、星期、时、分、秒的显示;2.能实现调时功能;3.能实现12/24小时制切换;4.能实现8 : 00—22 : 00整点报时功能。
1.3系统运行流程程序首先进行初始化,在主程序的循环程序中首先调用数据处理程序,然后调用显示程序,在判断是否有按键按下。
若有按键按下则转到相应的功能程序执行,没有按键按下则调用时间程序。
若没到则循环执行。
计时中断服务程序完成秒的计时及向分钟、小时的进位和星期、年、月、日的进位。
调时闪烁中断服务程序用于被调单元的闪烁显示。
调时程序用于调整分钟、小时、星期、日、月、年,主要由主函数组成通过对相关子程序的调用,如图所示。
实现了对时间的设置和修改、LCD显示数值等主要功能。
相关的调整是靠对功能键的判断来实现的。
第二部分设计方案2.1总体设计方案说明1.程序设计及调试根据单片机课程设计内容和要求,完成Protues仿真电路的设计和用Keil软件编写程序,并进行仿真模拟调试。
2.硬件焊接及调试根据仿真电路图完成电路板的焊接,并进行软、硬件的调试,只到达到预期目的。
3.后期处理对设计过程进行总结,完成设计报告。
基于单片机的电子时钟的设计
基于单片机的电子时钟的设计基于单片机的电子时钟是一种采用单片机作为主控芯片的数字显示时钟。
它能够准确显示时间,并可以通过编程实现其他功能,如闹钟、倒计时、温湿度显示等。
本文将介绍基于单片机的电子时钟的设计原理、硬件电路和软件编程等内容。
1.设计原理基于单片机的电子时钟的设计原理是通过单片机的计时器和定时器模块来实现时间的计数和显示。
单片机的计时器可以通过设定一个固定的时钟频率进行计数,而定时器可以设定一个固定的计数值,当计数到达设定值时,会触发一个中断,通过中断服务程序可以实现时间的更新和显示。
2.硬件电路基于单片机的电子时钟的硬件电路主要包括单片机、显示模块、按键模块和时钟模块。
其中,单片机作为主控芯片,负责控制整个电子时钟的运行;显示模块一般采用数字管或液晶屏,用于显示时间;按键模块用于设置和调整时间等功能;时钟模块用于提供稳定的时钟信号。
3.软件编程基于单片机的电子时钟的软件编程主要分为初始化和主程序两个部分。
初始化部分主要是对单片机进行相关寄存器的设置,包括计时器和定时器的初始化、中断的使能等;主程序部分是一个循环程序,不断地进行时间的计数和显示。
3.1初始化部分初始化部分首先要设置计时器模块的时钟源和计数模式,一般可以选择内部时钟或外部时钟作为时钟源,并设置计时器的计数模式,如自动重装载模式或单次模式;然后要设置定时器模块的计数值,一般可以通过设定一个固定的计数值和计数频率来计算出定时时间;最后要设置中断使能,使得当定时器计数器达到设定值时触发一个中断。
3.2主程序部分主程序部分主要是一个循环程序,通过不断地读取计时器的计数值,并计算得到对应的时间,然后将时间转换成显示的格式,并显示在显示模块上。
同时,还可以通过按键来实现时间的设置和调整功能,如增加和减少小时和分钟的值,并保存到相应的寄存器中。
4.功能扩展-闹钟功能:设置闹钟时间,并在设定的时间到达时触发报警;-温湿度显示:通过连接温湿度传感器,实时显示当前的温度和湿度数据;-倒计时功能:设置一个倒计时的时间,并在计时到达时触发相应的动作。
单片机数字电子时钟设计
单片机数字电子时钟设计摘要第一章电子时钟的设计 (3)1. 1电子时钟简介 (3)1.2电子时钟的工作原理 (3)第二章硬件设计方案 (4)2. 1硬件电路的设计方案 (4)2. 2硬件电路的原理图 (4)2. 3硬件电路说明 (5)第三章电子时钟的程序设计 (8)3. 1程序流程图 (8)3. 2程序设计 (11)总结15摘要随着现代生活的推进,电子时钟在人们的生活中差不多普及,本课题的要紧内容确实是结合单片机的强大功能,在一块一般的电子时钟集成多种功能,方便人们的日常生活,该功能是通过单片机、8段数码管以及一些简单辅助电路实现的。
由于之前没有独立做过单片机实现多功能电子时钟方面的内容,因此在做设计时总会遇见专门多问题,本次设计是在结合老师的指导及同学的关心下完成的,并通过本人在网上所查的大量资料及单片机设计中常见的电路而构思出来的。
单片运算机即单片微型运算机。
由RAM .ROM,CPU构成,定时, 计数和多种接口于一体的微操纵器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
本设计要紧设计了一个基于AT89C51单片机的电子时钟。
并在数码管上显示相应的时刻。
并通过一个操纵键用来实现时刻的调剂和是否进入省电模式的转换。
该方法仿真成效真实、准确,节约了硬件资源。
关键字:单片机、电子时钟、程序第一章电子时钟的设计1.1电子时钟简介电子钟是一种利用数字电路来显示秒、分、时的计时装豊,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装麗等优点,因而得到广泛应用。
随着人们生活环境的不断改善和美化,在许多场合都用到电子时钟。
现在高精度的计时工具大多数都使用了石英晶体振荡器,山于电子钟、石英钟、石英表都采纳了石英技术,因此走时精度高,稳固性好,使用方便,不需要经常调试,数字式电子钟用集成电路讣时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时刻,减小了计时误差,这种表具有时、分、秒显示时刻的功能,还能够进行时和分的校对,片选的灵活性好。
DS1307,I2C总线的电子钟设计实例程序
DS1307,I2C总线的电子钟设计实例程序主控模式操作实时时钟DS1307一实时时钟DS1307 介绍DS1307是低功耗、两线制串行读写接口、日历和时钟数据按BCD码存取的时钟/日历芯片。
它提供秒、分、小时、星期、日期、月和年等时钟日历数据。
另外它还集成了如下几点功能:56 字节掉电时电池保持的NV SRAM 数据存储器可编程的方波信号输出掉电检测和自动切换电池供电模式DS1307 把8 个寄存器和56 字节的RAM 进行了统一编址,具体地址和寄器数据组织格式如下表:表 7-1 DS1307 内存组织结构格式地址数据7 6 5 4 3 2 1 000 SECONDS CH 秒10 位秒个位01 MINUTES 0 分10 位分个位10HR02 HOURS 01224 A/P小时10 位03 DAY 0 0 0 0 0 星期04 DATE 0 0 日期10 位日期个位05 MONTH 0 0 0 月10 位月个位06 YEAR 年10 位年个位07 CONTROL OUT 0 0 SQWE 0 0 RS1 RS008---3fhRAM56 byte用户数据存储区在读写过程中DS1307 内部维护一个地址指针,通过写操作可对它负值,读和写每一字节时自动加一,当指针越过DS1307 内部RAM 尾部时指针将返回到0 地址处。
DS1307 的时钟和日历数据按BCD 码存储。
方波信号输出功能:方波信号输出功能从SQW/OUT 引脚输出设置频率的方波,CONTROL 寄存器用于控制SQW/OUT 脚的输出。
BIT7(OUT):此位表示在方波输出被禁止时SQW/OUT 脚的逻辑电平,在SQWE=0(输出禁止)时若OUT 为1 则SQL/OUT 脚为高电平, 反之亦然。
BIT4(SQWE)方波输出允许/禁止控制位,1 有效。
BIT0(RS0)、BIT1(RS1)用于设定输出波形的频率,如下表:RS1 RS0 输出频率(Hz)0 0 10 1 40961 0 81921 1 32768要注意的是,00h 地址的第7 位为器件时钟允许位(CH),由于在在开始上电时内部RAM内容随机,所以在初始化时将CH 位设零(时钟允许)是非常重要的。
电子时钟设计DS++可调闹钟+程序清单
电子时钟设计DS++可调闹钟+程序清单本文主要介绍一种新型的电子时钟设计,名为DS++可调闹钟。
这种电子时钟不仅能够显示当前日期和时间,而且其可调节的闹钟功能也十分实用。
同时,我们还提供程序清单,供各位读者借鉴学习。
1. 电子时钟设计的背景和目标电子时钟已经成为人们日常生活中不可或缺的物品之一。
在市场上,人们可以买到各种各样的电子时钟,从简单的数字显示到智能语音交互。
然而,我们常常发现,在时钟设计中,用户体验常常被忽视。
比如,有的时钟功能繁杂,使用起来困难;有的时钟质量低劣,经常出现故障。
为了解决这些问题,我们决定设计一种更为智能且易用的电子时钟,就是DS++可调闹钟。
本次电子时钟设计的目标是:1)提供准确的时间显示和日期显示;2)提供可调闹钟功能和提示功能;3)简单易用,方便用户使用。
2. DS++可调闹钟设计方案2.1 电路原理图DS++可调闹钟的电路包括微处理器、振荡器、液晶显示模块、蜂鸣器、按键等部分。
主控芯片采用AT89S52(51系列微控制器),与液晶显示模块通过IIC总线通信。
振荡器采用32.768kHz的石英晶体振荡器,保证时钟的准确性。
2.2 功能模块设计液晶显示模块的设计是优化DS++可调闹钟的关键。
我们选用了1602A型液晶显示屏,显示内容包括日期、时间和闹钟状态。
闹钟模块是DS++可调闹钟的核心模块之一,它通过可调节的闹钟时间和闹钟提示音,方便用户设置并响铃提醒。
2.3 电路调试及测试在电路设计和焊接完成后,我们需要进行电路调试和测试。
在调试过程中,我们主要测试了电子时钟的时间显示、日期显示、闹钟设置等功能。
同时,我们还测试了与之相协调的同时供电设备,比如移动电源和插座电源。
3. 程序清单DS++可调闹钟的程序基于Keil/µVision IDE的汇编语言编写。
半个时钟周期内的指令流水线技术使得程序库在嵌入式微控制器上的表现达到质的提升,且运行速度更快。
DS++可调闹钟的程序清单如下:- 初始化电路;- 显示日期、时间;- 等待用户按键;-用户按键相应操作;- 播放闹钟提示音;- 关闭闹钟。
微机原理课程设计(电子时钟)
电子时钟课程设计一:设计背景电子数字钟的应用十分广泛,通过计时精度很高的石英晶振(也可采用卫星传递的时钟标准信号),采用相应进制的计数器,转化为二进制数,经过译码和显示电路准确地将时间“时”“分”“秒”用数字的方式显示出来。
与传统的机械钟相比,它具有走时准确,显示直观,无机械传动,无需人的经常调整等优点。
它广泛用于电子表、车站、码头、广场等公共场所的大型远距离时间显示电子钟。
二:数字钟电路设计思路1.选用8253计数器2进行1s的定时,其输出OUT1与8259的IRQ0相连,当定时到1s时产生一个中断服务程序进行时、分、秒的计数,并送入相应的存储单元;8255的A口接七段数码管的位选信号,B口接数码管的段选信号。
时、分、秒的数值通过对8255的编程可送到七段数码管上显示。
2.此程序主要由四部分组成:第一部分为最主要的部分定义显示界面;第二部分为利用延时程序,并将调用的二进制表示的时间数转换成ASCII码,并将时间数存入内存区;第三部分将存在系统内存区的时间数用七段数码管显示出来;第四部分利用循环程序分别对秒个位、秒十位、分个位、分十位与相应的规定值进行比较,结合延时程序来实现电子钟数字的跳变,从而形成走时准确的电子钟。
该程序实现了准确显示秒和分,读数准确,走时精准。
此电子钟能准确的从0时0分0秒走时到23时59分59秒,然后能自动回复到0时0分0秒循环走时。
3.基本工作原理:系统设计的电子时钟主要由显示模块、时钟控制模块和时钟运算模块三大部分组成。
以8086微处理器作CPU,用8253做定时器产生时钟频率提供一个频率为10kHz的时钟信号,要求每隔10ms完成一次扫描键盘的工作。
在写入控制字与计数初值后,每到10ms定时器就启动工作,即当计数器减到1时,输出端OUT0输出一个CLK周期的低电平,向CPU申请中断,当达到100次时,则输出端OUT1输出1s,向CPU申请中断,由8255控制一个数码管显示,当计数到60s时,则输出端OUT2向CPU申请中断,由另一数码管显示1min,同理由数码管显示1h.CPU处理,使数码管的显示发生变化。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.设计目的
电子时钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。
电子时钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。
不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
而且是控制的核心部分。
因此,研究电子时钟及扩大其应用,有着非常现实的意义。
2.设计内容
2.1设计思想
针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚
结构。
这样,既能做到经济合理又能实现预期的功能。
在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。
程序可分为闹钟的声音程序、显示程序、闹钟显示程序、调时显示、定时程序。
运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。
2.2设计元件
元件
规格
数量
单片机 AT89C51 1 晶振 12MHz 1 晶振电容 30pF
2 按键
4
准备器件、搭接电
路
熟悉硬件 了解各引脚功
能 分块设计各部分电
路
将分块的电路组合
认真学习单片机汇编
语言 完成整体电路图 确定变成结构和思
路
综合各程序完成整体
程序
编辑各个程序模块
用Proteus 画出电路图
调试程序,进行修改
对仿真中出现的问题
进行改正 画出仿真图进行仿
真
仿真成功
软硬件结合,完成任务
书要求
验证硬件电路
成功
进行扩展
电阻10K,1K,220欧,各1,1,15 电容10uF(+) 1
七段数码管共阳极四位、两位各1,1 USB接口 1
USB延长线1/2
底座40脚 1
2.3设计图
2.4设计程序
#include<reg51.h>
#include<stdio.h>
#include<intrins.h>
char data time[6];
void delay(unsigned char k);
sbit check=P0^0;
sbit inter0=P3^2;
sbit inter1=P3^3;
char data which=0;
char data count=0;
void smadd(unsigned char k);
void smsub(unsigned char n);
char code buf[]={ 0x00,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xff,0x6f }; char code sel[]= {0x01,0x02,0x04,0x08};
void main()
{
char i;
for(i=0;i<500;i++);
time[0]=0;
time[1]=1;
time[2]=8;
time[3]=0;
time[4]=2;
time[5]=1;
TMOD=0X01;
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
IP=0x07;
IE=0X87;
TR0=1;
while(1)
{
for(i=0;i<6;i++)
{
P1=sel[i];
P2=buf[time[i]] ;
delay(10);
}
if(check==0)
{
delay(8);
TR0=0;
which=(which+1)%3;
while(check==0);
TR0=1;
}
}
}
void delay(unsigned char k)
{char i;
for (;k>0;k--)
for(i=0;i<80;i++)
{;}
}
void time_tr0() interrupt 1 using 2 {
TH0=(65535-5000)/256;
TL0=(65535-5000)%256;
count++;
if(count==100)
{
smadd(0);
}
}
void int0_i() interrupt 0 using 3 {
TR0=0;
smadd(which*2);
TR0=1;
while(inter0==0);
}
void int1_i() interrupt 2 using 1 {
TR0=0;
delay(20);
smsub(which*2);;
TR0=1;
while(inter1==0);
}
void smsub(unsigned char n)
{
delay(80);
if(time[n]>0)
{
time[n]=time[n]-1;
}
else if(time[n]==0&&(n==3||n==1))
{
time[n]=5;
smsub(n+1);
}
else if(time[n]==0&&(n==4||n==2||n==0)) {
time[n]=23;
smsub(n+1);
}
else if(time[n]==0&&(n==5))
{
time[n]=0;
}
}
void smadd(unsigned char n)
{
char flag=0;
delay(80);
if((n==0)||(n==2)||(n==4))
{
if(n==4&&time[5]==2&&time[4]==3)
{
time[4]=0;
time[5]=0;
flag=1;
}
if(time[n]==9)
{
time[n]=0;
smadd(n+1);
}
else if(time[n]<9&&flag==0)
{
time[n]=time[n]+1;
}
}
else if((n==1)||(n==3))
{
if(time[n]==5)
{
time[n]=0;
smadd(n+1);
}
else
{
time[n]=time[n]+1;
}
}
else if(n==5)
{
if(time[n]==2&&(time[n-1]==3))
{
time[5]=0;
time[4]=0;
}
else
{
time[n]=time[n]+1;
}
}
}
2.5伟福系统仿真如图所示:
3.设计总结
通过这次的设计使我认识到我对单片机方面的知识知道的太少了,对于书本上的很多知识还不能灵活运用,有很多我们需要掌握的知识在等着我去学习,我会在以后的学习生活中弥补我所缺少的知识。
本次的设计使我从中学到了一些很重要的东西,那就是如何从理论到实践的转化,怎样将我所学到的知识运用到我以后的工作中去。
在大学的课堂的学习只是在给我们灌输理论知识,而我们应把所学的用到我们现实的生活中去,此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。