文档库 最新最全的文档下载
当前位置:文档库 › 时钟 VHDL编程

时钟 VHDL编程

时钟 VHDL编程
时钟 VHDL编程

library ieee; --------库函数调用-------

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity time_1 is --------实体说明---------

port(

clk,cs,cf,cm,c:in std_logic;

bell:buffer std_logic;

wei: buffer std_logic_vector(2 downto 0);

duan:out std_logic_vector(6 downto 0)

);

end time_1; --------实体结束-------

architecture time_1 of time_1 is --------结构说明-------

signal clk_1:std_logic;

signal clk_2:std_logic;

signal clk_3:std_logic;

signal shi : std_logic_vector(7 downto 0):="00100011";

signal fen : std_logic_vector(7 downto 0):="01011001";

signal miao :std_logic_vector(7 downto 0):="01000000";

signal key : std_logic_vector(3 downto 0);

begin

key<=c&cs&cf&cm;

process(clk) --------分频进程------- variable counter1:integer range 0 to 20000;

variable counter2:integer range 0 to 5000;

begin

if rising_edge(clk) then

if(counter1=10000)then

counter1:=0;

clk_2<=not clk_2;

if(counter2=1000)then

counter2:=0;

clk_1<=not clk_1;

else

counter2:=counter2+1;

end if;

else

counter1:=counter1+1;

end if;

end if;

end process; --------分频进程结束-------

process(clk_2)

begin

if rising_edge(clk_2) then

clk_3<=not clk_3;

end if;

end process;

process(clk_1,key)

begin

if rising_edge(clk_1) then

if key(3)='0' then

if miao="01011001" then

miao<="00000000";

if fen="01011001" then

fen<="00000000";

if shi="00100011" then

shi<="00000000";

elsif shi(3 downto 0)="1001" then

shi<=shi+"0111";

else shi<=shi+1;

end if;

elsif fen(3 downto 0)="1001" then

fen<=fen+"0111";

else fen<=fen+1;

end if;

elsif miao(3 downto 0)="1001" then

miao<=miao+"0111";

else miao<=miao+1;

end if;

end if;

if key="1110" then

miao<="00000000";

end if;

if key="1101" then

if fen="01011001" then

fen<="00000000";

elsif fen(3 downto 0)="1001" then

fen<=fen+"0111";

else fen<=fen+1;

end if;

end if;

if key="1011" then

if shi="00100011" then

shi<="00000000";

elsif shi(3 downto 0)="1001" then

shi<=shi+"0111";

else shi<=shi+1;

end if;

end if;

end if;

end process; --------计时电路进程结束-------

process(clk_2) --------数码管位说明------- begin

if rising_edge(clk_2) then

if wei="111" then

wei<="000";

else

wei<=wei+1;

end if;

end if;

end process; --------数码管位说明结束-------

process(wei,shi,fen,miao) --------显示进程------- begin

case wei is

when "000"=>

case miao(3 downto 0) is --------秒个位显示------- when "0000" =>duan<="0111111"; --------0--------

when "0001" =>duan<="0000110"; --------1--------

when "0010" =>duan<="1011011"; --------2--------

when "0011" =>duan<="1001111"; --------3--------

when "0100" =>duan<="1100110"; --------4--------

when "0101" =>duan<="1101101"; --------5--------

when "0110" =>duan<="1111101"; --------6--------

when "0111" =>duan<="0000111"; --------7--------

when "1000" =>duan<="1111111"; --------8--------

when others =>duan<="1101111"; --------9--------

end case;

when "001"=>

case miao(7 downto 4) is --------秒十位显示------- when "0000" =>duan<="0111111";

when "0001" =>duan<="0000110";

when "0010" =>duan<="1011011";

when "0011" =>duan<="1001111";

when "0100" =>duan<="1100110";

when "0101" =>duan<="1101101";

when "0110" =>duan<="1111101";

when "0111" =>duan<="0000111";

when "1000" =>duan<="1111111";

when others =>duan<="1101111";

end case;

when "010"=> duan<="1000000";

when "011"=>

case fen(3 downto 0) is --------分个位显示-------

when "0000" =>duan<="0111111";

when "0001" =>duan<="0000110";

when "0010" =>duan<="1011011";

when "0011" =>duan<="1001111";

when "0100" =>duan<="1100110";

when "0101" =>duan<="1101101";

when "0110" =>duan<="1111101";

when "0111" =>duan<="0000111";

when "1000" =>duan<="1111111";

when others =>duan<="1101111";

end case;

when "100"=>

case fen(7 downto 4) is --------分十位显示-------

when "0000" =>duan<="0111111";

when "0001" =>duan<="0000110";

when "0010" =>duan<="1011011";

when "0011" =>duan<="1001111";

when "0100" =>duan<="1100110";

when "0101" =>duan<="1101101";

when "0110" =>duan<="1111101";

when "0111" =>duan<="0000111";

when "1000" =>duan<="1111111";

when others =>duan<="1101111";

end case;

when "101"=> duan<="1000000";

when "110"=> --------时个位显示-------

case shi(3 downto 0) is

when "0000" =>duan<="0111111";

when "0001" =>duan<="0000110";

when "0010" =>duan<="1011011";

when "0011" =>duan<="1001111";

when "0100" =>duan<="1100110";

when "0101" =>duan<="1101101";

when "0110" =>duan<="1111101";

when "0111" =>duan<="0000111";

when "1000" =>duan<="1111111";

when others =>duan<="1101111";

end case;

when "111"=>

case shi(7 downto 4) is --------时十位显示-------

when "0000" =>duan<="0111111";

when "0001" =>duan<="0000110";

when "0010" =>duan<="1011011";

when "0011" =>duan<="1001111";

when "0100" =>duan<="1100110";

when "0101" =>duan<="1101101";

when "0110" =>duan<="1111101";

when "0111" =>duan<="0000111";

when "1000" =>duan<="1111111";

when others =>duan<="1101111";

end case;

when others=> null;

end case;

end process; --------显示进程结束-------

process(miao,fen) --------整点报时电路-------

begin

if fen="01011001" then

if (miao="01010000" or miao="01010010"

or miao="01010100" or miao="01010110"

or miao="01011000") then

bell<=clk_3;

elsif miao="00000000" then

bell<=clk_2;

else

bell<=not bell;

end if;

end if;

end process;

end time_1;

单片机电子时钟程序

程序开始 ORG 0000H AJMP MAIN ORG 000BH AJMP CLOCK ORG 0100H 主程序开始: MAIN: MOV SP,#70H MOV 6EH,#00H ;显示缓存器初始值设定 MOV 6DH,#00H MOV 6CH,#00H MOV 6BH,#00H MOV 6AH,#00H MOV 69H,#00H MOV 50H,#00H ;秒,分,小时初始值设定 MOV 51H,#00H MOV 52H,#00H MOV DPTR,#0F003H ;8255端口定义,PA,PB为输出 MOV A,#80H MOVX @DPTR,A MOV 4FH,#00H MOV TMOD,#01H ;定时器T0及TL0,TH0初始值设定 MOV TH0,#3CH MOV TL0,#0B0H SETB EA ;开总中断 SETB ET0 ;开定时器中断 SETB TR0 循环程序开始,并显示时间: START: MOV A,50H LCALL BCD MOV 6AH,A ;显示秒十位 MOV 69H,B ;显示秒个位 MOV A,51H LCALL BCD MOV 6CH,A ;显示分十位 MOV 6BH,B ;显示分个位 MOV A,52H LCALL BCD ;调用十六进制至BCD码转换子程序 MOV 6EH,A MOV 6DH,B LCALL DIS ;调用显示子程序 LCALL KEY ;调用键盘子程序 AJMP START ;主程序结束

BCD: MOV B,#0AH ;BCD码转换子程序 DIV AB RET CLOCK: PUSH ACC ;保护现场 PUSH PSW CLR TR0 MOV TH0,#3CH ;定时参数重新设置 MOV TL0,#0B0H SETB TR0 INC 4FH ;100ms单元加1 MOV A,4FH CJNE A,#0AH,D0 ;100ms单元=10,就秒单元加1 MOV 4FH,#00H ;100ms单元内容清0 MOV A,50H ADD A,#01H ;秒单元加1 MOV 50H,A CJNE A,#3CH,D0 ;秒单元内容=60,则秒单元清0 MOV 50H,#00H MOV A,51H ;分,时单元代码 ADD A,#01H MOV 51H,A CJNE A,#3CH,D0 MOV 51H,#00H MOV A,52H ADD A,#01H LCALL RING ;报警子程序 MOV 52H,A CJNE A,#18H,D0 MOV 52H,#00H D0: POP PSW ;出栈,退出中断子程序 POP ACC RETI RING: MOV R3,A CLR P1.0 LCALL DELL50 SETB P1.0 LCALL DELL50 DJNZ R3,RING RET 键盘子程序: KEY: JB P1.7,MSET ;秒设定子程序 LCALL DELL ;防抖动延时 JB P1.7,MSET INC 50H

vhdl课程设计(电子钟+闹铃)

数字钟的设计 一、系统功能概述 (一)、系统实现的功能: 1、具有“时”、“分”、“秒”的十进制数字显示(小时从00 ~ 23)。 2、具有手动校时、校分、校秒的功能。 3、有定时和闹钟功能,能够在设定的时间发出闹铃声。 4、能进行整点报时。从59分50秒起,每隔2秒发一次低音“嘟”的信号,连续5次, 最后一次为高音“嘀”的信号。 (二)、各项设计指标: 1、显示部分采用的6个LED显示器,从高位至低位分别显示时、分、秒。 2、有一个设置调闹钟定时时间、正常时间的按钮,选择调的对象。 3、有三个按钮分别调时、分、秒的时间。 4、有一个按钮用作开启/关闭闹铃。 5、另外需要两个时钟信号来给系统提供脉冲信号,使时钟和闹钟正常工作,分别为1Hz、 1kHz的脉冲。 二、系统组成以及系统各部分的设计 1、系统结构描述//要求:系统(或顶层文件)结构描述,各个模块(或子程序)的功能描述;(一)系统的顶层文件: 1、顶层文件图:(见下页) 2、各模块的解释: (1)、7个输入量clk_1khz、clk_1hz、key_slt、key_alarm、sec_set、min_set、hour_set:其中clk_1khz为闹铃模块提供时钟,处理后能产生“嘟”、“嘀”和变化的闹铃声音;clk_1hz为计时模块提供时钟信号,每秒计数一次;key_slt选择设置对象:定时或正常时间;key_alarm能够开启和关闭闹铃;sec_set、min_set、hour_set用于设置时间或定时,与key_slt相关联。各按键输出为脉冲信号。 (2)、CNT60_A_SEC模块: 这个模块式将clk_1hz这个时钟信号进行60进制计数,并产生一个分钟的触发信号。该模块能将当前计数值实时按BCD码的格式输出。将该输出接到两位LED数码后能时时显示秒的状态。通过alarm_clk可以选择设置对象为时间还是定时值。在设置时间模式上,key上的一个输入脉冲可以将clk的输入信号加一。在设置定时模式上,key 上的脉冲只修改定时值,不影响时间脉冲clk的状态。 同时该模块具有两个输出口out_do、out_di来触发整点报时的“嘟”、“嘀”声音。 (3)、CNT60_A_MIN模块: 这个模块式将CNT60_A_SEC的输出信号进行60进制计数,并产生一个时位的触发信号。该模块能将当前计数值实时按BCD码的格式输出。将该输出接到两位LED数码后能时时显示分的状态。通过alarm_clk可以选择设置对象为时间还是定时值。在设置时间模式上,key上的一个输入脉冲可以将clk的输入信号加一。在设置定时模式上,key上的脉冲只修改定时值,不影响时间脉冲clk的状态。 同时该模块具有三个输出口out_do、out_di、out_alarm来触发整点报时的“嘟”、“嘀”、闹铃声音。

vhdl数字时钟设计

数字时钟设计 一、题目分析 1、功能介绍 1)具有时、分、秒计数显示功能,以24小时循环计时。 2)时钟计数显示时有LED灯的花样显示。 3)具有调节小时、分钟及清零的功能。 4)具有整点报时功能。 2、总体方框图 3、性能指标及功能设计 1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。 2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来

一个脉冲,即计数一次。 3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。 4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生“滴答.滴答”的报警声音。 5)LED灯在时钟显示时有花样显示信号产生。即根据进位情况,LED不停的闪烁,从而产生“花样”信号。 二、选择方案 1、方案选择 方案一:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。 方案二:根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟和秒均60进制。 终上所述,考虑到试验时的简单性,故我选择了方案二。 三、细化框图 根据自顶向下的方法以及各功能模块的的功能实现上述设计方案应系统细化框图:

电子时钟单片机【完整版】

烟台南山学院 单片机课程设计题目电子时钟 姓名: 所在学院 所学专业: 班级: 学号: 指导教师: 完成时间:

随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。 由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。 在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。实验证明效果良好,可以投入使用。 本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。本系统为多功能数字钟的系统。本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。本电子时钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。 关键词:单片机 AT89S52 电子时钟汇编语言

VHDL数字钟设计报告

VHDL数字钟设计报告 一. 数字钟总体设计方案: 1.1设计目的 ①正确显示时、分、秒; ②可手动校时,能分别进行时、分的校正; ③整点报时功能; 1.2设计思路 数字钟的设计模块包括:分频器、去抖动电路、校时电路、“时、分、秒”计数器、校时闪烁电路、 整点报时和译码显示电路。 每一个功能模块作为一个实体单独进行设计,最后再用VHDL的例化语句将各个模块进行整合,生成 顶层实体top。 该数字钟可以实现3个功能:计时功能、设置时间功能和报时功能。 二.数字钟模块细节 2.1 分频器(fenpin) 本系统共需3种频率时钟信号(1024Hz、512Hz、1Hz)。为减少输入引脚,本系统采用分频模块,只需由外部提供1024Hz基准时钟信号,其余三种频率时钟信号由分频模块得到。 分频原理:为以1024Hz基准时钟经1024分频得到512Hz,1Hz频率时钟信号。 分频器管脚 代码:

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity fenpin is port(clk1024:in std_logic; clk1,clk512:out std_logic ); end fenpin ; architecture cml of fenpin is begin process (clk1024) variable count1: integer range 0 to 512; variable q1: std_logic; begin if clk1024' event and clk1024='1' then if count1=512 then q1:=not q1; count1:=0; else count1:=count1+1; end if; end if; clk1<=q1; end process; process(clk1024) variable count512: integer range 0 to 1; variable q512: std_logic; begin if clk1024' event and clk1024='1' then if count512=1 then q512:=not q512; count512:=0; else count512:=count512+1; end if; end if; clk512<=q512; end process; end cml; 2.2 校时电路(jiaoshi)

8位数码管显示电子时钟c51单片机程序

8位数码管显示电子时钟c51单片机程序 时间:2012-09-10 13:52:26 来源:作者: /* 8位数码管显示时间格式05—50—00 标示05点50分00秒 S1 用于小时加1操作 S2 用于小时减1操作 S3 用于分钟加1操作 S4 用于分钟减1操作 */ #include sbit KEY1=P3^0; //定义端口参数 sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; sbit LED=P1^2; //定义指示灯参数 code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0—9 unsigned char StrTab[8]; //定义缓冲区 unsigned char minute=19,hour=23,second; //定义并初始化为12:30:00 void delay(unsigned intt) { while(--cnt); } /******************************************************************/ /* 显示处理函数 */ /******************************************************************/ void Displaypro(void) { StrTab[0]=tab[hour/10]; //显示小时 StrTab[1]=tab[hour%10]; StrTab[2]=0x40; //显示"-" StrTab[3]=tab[minute/10]; //显示分钟 StrTab[4]=tab[minute%10]; StrTab[5]=0x40; //显示"-" StrTab[6]=tab[second/10]; //显示秒 StrTab[7]=tab[second%10]; } main()

VHDL多功能数字钟

基于VHDL语言 数 字 钟 设 计 学院:信息工程学院 专业: 姓名: 学号: 2010年6月15日

一、设计要求 1、具有以二十四小时制计时、显示、整点报时、时间设置和闹钟的功能。 2、设计精度要求为1秒。 二、设计目的 1.掌握各类计数器以及计数器的级联方式; 2.掌握数码管动态显示的原理与方法; 3.掌握用FPGA技术的层次化设计方法; 4.理解数字逻辑硬件和软件的设计思想; 三、设计环境:Quartus II CPLD-5型试验箱 四、系统功能描述 1、系统输入:系统状态及较时、定时转换的控制信号为enset、k、set; 时钟信号clk采用50MHz;校时复位信号为reset,输入信号均由按键信号产生。 2、系统输出:LED显示输出;蜂鸣器声音信号输出。 3、多功能数字电子钟系统功能的具体描述如下: (一)计时:正常工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。 (二)校时:在计时显示状态下,按下“enset”键,接着按下“k”键,进入“小时”待校准状态,若此时按下“set”键,小时开始校准;之后按上“k”键则进入“分”待校准状态;继续按下“k”键则进入“秒”待复零状态;再次按上“k”键数码管显示闹钟时间,并进入闹钟“小时”待校准状态;再次按下“k”键则进入闹钟“分”待校准状态;若再按上“k”键恢复到正常计时显示状态。若校时过程中按下“reset”键,则系统恢复到正常计数状态。 (1)“小时”校准状态:在“小时”校准状态下,显示“小时”的数码管以2Hz 闪烁,并以2Hz的频率递增计数。 (2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以2Hz闪烁,并以2Hz的频率递增计数。 (3)“秒”校准状态:在“秒复零”状态下,显示“秒”的数码管以2Hz闪烁,并以1Hz的频率递增计数。 (4)闹钟“小时”校准状态:在闹钟“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并以2Hz的频率递增计数。 (5)闹钟“分”校准状态:在闹钟“分”校准状态下,显示“分”的数码管以2Hz闪烁,并以2Hz的频率递增计数。 (三)整点报时:蜂鸣器在“59”分钟的第“51”、“53”、“55”、“57”秒发频率为500Hz的低音,在“59”分钟的第“59”秒发频率为1000Hz的高音,结束时为整点。 (四)显示:要求采用扫描显示方式驱动6个LED数码管显示小时、分、秒。(五)闹钟:闹钟定时时间到,蜂鸣器发出频率为1000Hz的高音,持续时间为60秒。

电子时钟程序代码

#include #define uchar unsigned char #define uint unsigned int uchar code weixuan[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //位选,控制哪个数码管亮。(从右到左) uchar code duanxuan[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf, 0xff}; //0-9,'-','灭' uchar data timedata[3]={0x00,0x00,0x00}; //时间缓冲区,分别为:秒、时、分。 uchar data datetime[8]={0xc0,0xc0,0xbf,0xc0,0xc0,0xbf,0xc0,0xc0}; //时间缓冲区,初始化显示00-00-00。 uchar tt1,tt2,tt,tt0,num=0; uchar flag,flag1,flag2,flash; sbit key1=P1^3; sbit key2=P1^5; sbit key3=P1^7; //**************延时函数********************************* void delay(uint del) { uchar i, j; for(i=0; i

VHDL编写的数字钟

FPGA课程设计实验报告 题目:VHDL编写的数字钟设计 学院:电子信息学院 专业:电子与通讯工程 姓名:朱振军

基于FPGA的VHDL数字钟设计 一、功能介绍 1.在七段数码管上具有时--分--秒的依次显示。 2.时、分、秒的个位记满十向高位进一,分、秒的十位记满五向高位进一,小时按24进制计数,分、秒按60进制计数。 3.整点报时,当计数到整点时扬声器发出响声。 4.时间设置:可以通过按键手动调节秒和分的数值。此功能中可通过按键实现整体清零和暂停的功能。 5.LED灯循环显示:在时钟正常计数下,LED灯被依次循环点亮。 待增加功能: 1.实现手动调节闹铃时间,在制定时间使扬声器发声。 2.实现微妙的快速计数功能,可实现暂停、保存当前时间、继续计数的功能。 二、设计方案 本文数字钟的设计采用了自顶向下分模块的设计。底层是实现各功能的模块,各模块由vhdl语言编程实现:顶层采用原理图形式调用。其中底层模块包括秒、分、时三个计数器模块、按键去抖动模块、按键控制模块、时钟分频模块、数码管显示模块共7个模块。 设计框图如下: 图一数字钟系统设计框图 由图1可以清晰的看到数字钟系统设计中各功能模块间连接关系。系统时钟50MHZ经过分频后产生1秒的时钟信号,1秒的时钟信号作为秒计数模块的输入信号,秒计数模块产生的进位信号作为分计数模块的输入信号,分计数模块的进位信号作为时计数模块的输入信号。秒计数模块、分计数模块、时计数模块的计数输出分别送到显示模块。由于设计中要使用按键进行调节时间,而按键的动作过程中存在产生得脉冲的不稳定问题,所以就牵扯到按键去抖动的问题,对此系统中设置了按键去抖动模块,按键去抖动模块产生稳定的脉冲信号送入按键控制模块,按键控制模块根据按键的动作对秒、分、时进行调节。

可调电子时钟程序

#include unsigned char led[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0 x00,0xFF}; //用一维数组定义0-9 unsigned char a[4]; unsigned char second=0,minute=0,hour=12; unsigned char minute1=0,hour1=0,zdbs=0; unsigned char b[4]={0xFE,0xFB,0xEF,0xBF}; //扫描 unsigned char k=0; unsigned int temp; // 记录1000毫秒为1秒的变量 unsigned char M,S_flag,md=0; //M是模式,更新时间的4种模式加上正常模式S_flag闪烁标志 sbit K1=P3^0; //设置键 sbit K2=P3^1; //增加键 sbit K3=P3^2; //减少键 void delay(unsigned n) //0.2毫秒 { int x,y;

for(x=0;x

基于VHDL语言的数字时钟设计

课程:CPLD与FPGA设计及应用 实验:基于VHDL语言的数字时钟设计 学号:092030030 姓名:朱峰 专业:信号与信息处理 学院:电子与信息学院 2011年12月

基于VHDL语言的数字时钟设计一:主要功能 1:具有时、分、秒计数显示功能,以24小时循环计时。 2:具有日期和星期显示功能。 3:具有秒表功能 4:具有调节日期,星期,小时,分钟,清零的功能。 5:具有定时和闹铃的功能。 二:结构框图 三:RTL图

四:功能实现 4.1分频模块设计 本设计使用的输入时钟信号为50Mhz,经过分频产生两路时钟信号,其中一路为微秒计数时钟信号,一路为动态扫描时钟信号。同时模块有一输入控制信号,其功能是停止微秒计数时钟信号,以实现定时的功能。 输入:clk_in 为50Mhz,setstop为微秒计数时能信号 输出:clk_out1为1/60hz clk_out2为1khz 源代码如下: library ieee; use ieee.std_logic_1164.all; entity div is port(clk_in,setstop: in std_logic; clk_out1,clk_out2: out std_logic); end entity div; architecture fun of div is constant a:integer:=8333333; constant b:integer:=49999; signal c:integer range 0 to a; signal d:integer range 0 to b; begin process(clk_in,setstop) begin if(clk_in 'event and clk_in='1') then if(( c+7500000)

电子时钟程序设计

1.设计目的 电子时钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。电子时钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究电子时钟及扩大其应用,有着非常现实的意义。 2.设计内容 2.1设计思想 针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚

结构。这样,既能做到经济合理又能实现预期的功能。 在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。程序可分为闹钟的声音程序、显示程序、闹钟显示程序、调时显示、定时程序。运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。

2.2设计元件

2.3设计图

2.4设计程序 #include #include #include 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;

基于VHDL语言的数字钟设计

信息与通信工程学院 数字电路与逻辑设计 实验题目:基于VHDL语言的数字钟设计 班级: 姓名: 学号: 日期: 指导教师:

一.摘要 数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。它的基本功能是计时,计时周期为24小时,显示满刻度23时59分59秒;或者计时周期为12小时并配有上下午指示,显示满刻度为11时59分59秒,通过六个七段数码管显示出来。 本实验主要在理论分析和具体的软硬件实现上,基于VHDL语言编写源代码,使用软件Quartus II 进行处理,再配合具体电路连接,实现一个多功能的数字钟。 关键词:数字钟;VHDL语言;七段数码管 二.设计任务要求 设计实现一个数字钟。 1.24小时制,显示刻度从0:0:0到23:59:59 。 2.12小时制,显示刻度从0:0:0到11:59:59 。 3.12/24小时制可切换,12小时制下上下午有不同显示(上午发光二极管不亮, 下午发光二极管亮)。 4.可手动校对时间,能对时和分进行校正。 5.整点报时功能。 6.闹铃功能,可设置闹铃时间,当计时到预定时间时,蜂鸣器发出闹铃信号, 闹铃时间为5秒,可提前终止闹铃。 7.可认为设置时间为倒计时模式 8.可切到屏保模式,六个数码管显示为“supper”字样。 三.设计思路和总体设计框图 1.设计思路 程序设计主要分为四个模块,第一部分,做分频器,分出一秒的时钟用来计数,再分出一个中频时钟用来扫描显示数码管,我选择的频率是50kHZ;第二部分,做计数器,秒随时钟沿计数进1,分钟随着秒计数60次进一,而小时,由于有12/24小时制的切换,时的计数有两个信号来进行,一个信号hour1是分60进一在0到23循环计数,另一个信号hour2是分60进一在0到11循环计数;第三部分,做扫描显示六个七段数码管,通过选通信号6矢量cat来依次使六个数码管亮,数码管每两位对应相应的时分秒;第四部分,其他输入输出单元,比如数字钟的时间修正,闹铃等,这些都是基于前三个部分,做起来难度不大。 设计的关键是做好计数器和数码管显示,这是本实验最核心的部分。

基于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分后验证即可) ④.在系统校准模式时,系统具有快速校准时间的功能。 (注:按SET键进入校正模式可以对时钟进行校正,UP向上,DOWN键向下,按STOP键保存退出,遗憾的是,这个正在调节的参数无法反白显示) ⑤.在秒表计时模式时,可兼做比赛时间记录表。秒表记时的精度为0.1秒,由3个键分别控制秒表的启动、清零、记录功能,可连续记录3组时间,并能够显示记录时间。 (注:按SET键进入秒表模式,按0K键启动,STOP键清零,按UP键记录,可以对100ms的定时器开始计时,最大999.9秒,按下UP键盘,则记录一个,总共记3个,T1-T3,按SET键退出) ⑥.系统显示器采用LCD液晶显示器1602或其它显示器件,并采用键盘对相关数据进行设置与操作。 乖乖,真的是1602显示的啊。 /******************************************/ /*File Name: main.c */ /*Function : The entrance of all fuctions */ /*Author : WuYingjian */ /*V ersion : V1.0 */ /*Date : 2012.11.03 */ /* All Rights Reserved. */ /******************************************/ #include #include #define uint unsigned int #define uchar unsigned char #define nop _nop_ void write_command(uchar tempdata);

多功能数字电子钟_VHDL

《VHDL课程设计》实验报告 多功能数字电子钟 姓名: 班级: 学号: 指导老师: 成绩: 完成时间:2008年1月4日星期五 完成地点:502机房 一、实验目的 1.学习数字系统设计的自顶向下设计法及控制器的设计。 2.加深利用EDA技术实现数字系统的体会。 二、实验仪器及器件 1.EDA 开发软件(1套) 2.微机(1台) 3.实验开发系统(1台) 4.其他器件和材料(若干) 三、实验要求及设计方案 1.设计一个具有24进制计时、显示、整点报时、时间设置和闹钟功能的数字钟,要求时钟的最小分辨率时间为1s。 2.数字钟的设计方案如下: 系统输入:mode为计时显示和闹钟定时显示转换输入;set为校时和定时设置的时、分、秒转换输入;k为校时和定时设置的时、分、秒手动加1输入;clk为时钟信号;reset为系统复位信号。输入信号均由按键产生。 系统输出:LED显示输出;蜂鸣器(bell)声音信号输出。 3.多功能数字钟系统功能的具体描述如下: 计时:正常工作状态下,每日按24小时计时制计时并显示,蜂鸣器逢整点报时。

校时:在计时显示状态下,按下“set键”,进入“小时”校时状态,再次按下“set键”,进入“分”校时状态,继续按下“set键”,进入“秒”校时状态,第四次按下“set键”又回复到正常计时显示状态。 1)“小时”校时状态:进入“小时”校时状态后,显示“小时”的数码管闪烁,每按动“k”键一次,“小时”+1,若不按动“k”键则小时数不变,一直按下“k”键则小时数一4Hz的频率递增计数。 2)“分”校时状态:进入“分”校时状态后,显示“分”的数码管闪烁,每按动“k”键一次,“分”+1,若不按动“k”键则分数不变,一直按下“k”键则分数一4Hz的频率递增计数。 3)“秒”校时状态:进入“秒”校时状态后,显示“秒”的数码管闪烁,每按动“k”键一次,“秒”+1,若不按动“k”键则秒数不变,一直按下“k”键则秒数一4Hz的频率递增计数。 整点报时:蜂鸣器在“59”分钟的第51、53、55、57秒发出频率为512Hz的低音,在“59”秒发出频率为1024Hz的高音,结束时为整点。 显示:采用8个LED数码管分别显示时、分、秒并且他们之间用“—”隔开。 闹钟:闹钟定时时间到,蜂鸣器发出周期为1s的滴、滴声,持续时间为10秒;闹钟定时显示。 闹钟定时设置:在闹钟显示状态下,按下“set键”,进入“小时”校时状态,再次按下“set键”,进入“分”校时状态,继续按下“set键”,进入“秒”校时状态,第四次按下“set键”又回复到闹钟显示状态。 闹钟的时、分、秒设置过程和计时设置相同。 计时显示和闹钟显示之间的转换:按动“mode”键,数字钟将在计时显示和闹钟定时显示之间转换。 4)多功能数字钟系统结构逻辑框图如下:

面向对象程序设计课程设计报告《电子时钟》C

目录

1 前言 时钟在人们日常生活中必不可少,时钟的原理是怎么样的呢,本程序将模拟一个电子时钟。为了使程序更加美观,本程序是使用Visual C++编写一个可视化的模拟电子时钟程序。电子时钟的关键在于延时,为了达到延时的准确性,不受程序执行时间的影响,采用了系统两秒之间的间隔进行延时。该程序还加入了显示星期功能,在知道1901年每月1号是星期几的情况下,再根据年、月、日即可算出星期几。 2需求分析 要求 设计类结构,模拟电子时钟的行走,在屏幕上显示一个活动时钟。 任务 (1)显示日期的格式:XXXX年XX月XX日 (2)显示时间的格式:XX:XX:XX。 (3)添加显示星期的格式:星期X 运行环境 (1)WINDOWS2000/XP系统 (2)Visual C++ 编译环境或DEV C++ 编译环境 开发工具 C++语言 3分析和设计 + 系统分析及设计思路 为了使程序的显示更加美观,该程序使用了C++可视化程序设计方法进行设计。在可视化程序设计中,建立了一个MFC单文档应用程序工程,该工程包括了视图类、文档类对话框类和主框架类。在主框架类中修改窗口等属性,使整个时间的

显示更加协调。模拟电子时钟是一个显示和计时的小程序,因此只要在视图类和文档类添加相关的属性和方法即可完成模拟电子时钟的功能。 文档类定义时钟的相关属性,包括int类型的year、month、day、hour、minute、second,和包括CString类型的str_year、str_month、str_day、str_hour、str_minute、str_second等信息。int类型的时间日期属性用以计算,CSrting类型的时间日期属性用以显示,通过CString类中的成员函数Formart可以把int型的数据转成CString型的。 视图类实现时钟的主要功能,在该类的OnDraw函数里面对时间日期进行显示输出。向窗口输出信息时,为了保证高刷新率下绘图不闪烁,使用内存绘图的方法,在内存中创建一个与屏幕绘图区域一致的对象,使得重绘视图时可以大大提高运行速度。为了使计时能够达到几乎无误差,使用了一个获取系统两秒间隔作为计时间隔的方法,使得计时间隔和系统时间间隔一致。每次重绘视图的时候都重新获取系统时间,当该两次获得的秒不一致时,就对时间加一秒。通过一个计时器消息,使视图50ms刷新一次,以保证时间的准确性。 在视图类中需要添加几个方法:用于计算时间的方法RunTime()、计算星期的方法Week()、int型转CString型的方法Change()、获取系统时间的方法GetDateTime()、重获系统时间方法OnReset()和计时器消息。 在计算时间日期的时候,每达到1秒的时候对second进行加1,然后判断是否达到60秒,达到的话minute就加1,同样的方法对hour、day、month和year进行计算,在对day计数时,考虑到大小月和闰年,对day进行加1时,判断是哪一月和是否为闰年。在确定年、月、日之后,使用函数Week()进行对星期几的计算,根据1901年每月1号是星期几可以得出现在是星期几。 在这个程序中,还使用了一个对话框类,使用对话框来对时间日期的设置。在菜单栏里添加一个“设置时间”的选项和一个菜单消息,当点击这个选项就会弹出设置时间日期的对话框,对话框中编辑控件设定了每个值的取值范围,从而对输入错误进行排除。 主要类图 图主要类图

VHDL 语言设计数字时钟

数字时钟 DIGITAL CLOCK 电子信息科学与技术专业 关键词:VHDL,设计,数字钟,应用电路 英文关键词:VHDL; design; digital clock; application electro circuits 摘要:以一款数字钟设计为例,较详细的介绍了如何用VHDL语言设计数字电路,并给出了部分程序、仿真波形图,并在 MAX+plusII中进行编译、仿真、下载。由此说明利用VHDL 开发数字电路的优点。 英文摘要:By showing some program codes and emulational wave charts,the paper introduces the way to design digital electro circuits with VHDL in details and gives us an example of designing a digital clock.And it compiles,emulates and downloads them in MAX+plusII,which elucidates the advantages of developing digital electro circuits with VHDL

引言 20世纪末,数字电子技术得到了飞速发展,有力地推动和促进了社会生产力的发展和社会信息化的提高,数字电子技术的应用已经渗透到人类生活的各个方面。从计算机到手机,从数字电话到数字电视,从家用电器到军用设备,从工业自动化到航天技术,都尽可能采用了数字电子技术。 现代电子设计技术的核心是EDA技术。EDA(电子设计自动化)技术就是以计算机为工具,在EDA软件平台上,对硬件语言HDL为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、逻辑化简、逻辑综合及优化、逻辑仿真,直至对特定目标芯片的适配编译、逻辑映射和编程下载等工作(文本选用的开发工具为Altera公司的MAX+PLUSII)。EDA的仿真测试技术只需要通过计算机就能对所设计的电子系统从各种不同层次的系统性能特点完成一系列准确的测试与仿真操作,大大提高了大规模系统电子设计的自动化程度。设计者的工作仅限于利用软件方式,即利用硬件描述语言(如VHDL)来完成对系统硬件功能的描述。EDA技术使实现,极大地提高了设计效率,缩短了设计周期,节省了设计成本。 今天EDA技术已经成为电子设计的重要工具,无论是设计芯片还是设计系统,如果没有EDA工具的支持,都将是难以完成的。EDA工具已经成为现代电路设计工程师的重要武器,正在发挥越来越重要的作

相关文档
相关文档 最新文档