文档库 最新最全的文档下载
当前位置:文档库 › VHDL语言设计的电子时钟

VHDL语言设计的电子时钟

VHDL语言设计的电子时钟
VHDL语言设计的电子时钟

VHDL语言设计的电子时钟

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity szz is

port(inclk,reset,pause,settime,tszhh,set:in std_logic;

light:in std_logic;

outa,outb,outc:out std_logic_vector(0 to 6);

bitout:out std_logic_vector(2 downto 0));

end szz;

architecture arth_szz of szz is

signal a,b,c,d,e,f,g,h,i,j,h1,h2,m1,m2,f1,f2:std_logic_vector(3 downto 0); signal mda:std_logic_vector(14 downto 0);

signal mdb:std_logic_vector(9 downto 0);

signal mseg:std_logic_vector(3 downto 0);

signal bit:std_logic_vector(2 downto 0);

signal fpa,fpb:std_logic;

signal fpc:std_logic_vector(0 to 6);

signal led:std_logic_vector(24 downto 0);

signal outaa,outbb,outcc:std_logic_vector(0 to 6);

type tshzh_st is (s0,s1,s2);

signal cs,ns:tshzh_st;

begin

process(light)

begin

if light'event and light='1' then

if led>=20000 then

led<=(others=>'0');

else

led<=led+1000;

end if;

end if;

end process;

process(inclk)

begin

if (inclk'event and inclk='1') then

if mda<=led then

mda<=mda+1;

fpa<='1';fpc<=(others=>'1'); else

if mda<=24999 then

mda<=mda+1;

fpa<='0';fpc<=(others=>'0'); else mda<=(others=>'0');

end if;

end if;

end if;

end process;

process(fpa,inclk)

begin

if (fpa'event and fpa='1') then

if mdb=9 then

mdb<=(others=>'0');

fpb<=not fpb;

else

mdb<=mdb+1;

end if;

end if;

end process;

process(fpb,inclk)

begin

if (fpb'event and fpb='1') then

if pause='0' then

if a=9 then

a<=(others=>'0');

if b=9 then

b<=(others=>'0');

if settime='0' then

if c=9 then

c<=(others=>'0');

if d=5 then

d<=(others=>'0');

if e=9 then

e<=(others=>'0');

if f=5 then

f<=(others=>'0');

if g=3 and h=2 then

g<="0000";h<="0000";

elsif g=9 then

g<=(others=>'0');h<=h+1;

else

g<=g+1;

end if;

else f<=f+1;

end if;

else e<=e+1;

end if;

else d<=d+1;

end if;

else c<=c+1;

end if;

else

c<=f1;d<=f2;e<=m1;f<=m2;g<=h1;h<=h2;

end if;

else

b<=b+1;

if settime='1' then

c<=f1;d<=f2;e<=m1;f<=m2;g<=h1;h<=h2;

end if;

end if;

else

a<=a+1;

if settime='1' then

c<=f1;d<=f2;e<=m1;f<=m2;g<=h1;h<=h2;

end if;

end if;

else

if settime='1' then

c<=f1;d<=f2;e<=m1;f<=m2;g<=h1;h<=h2;

end if;

end if;

end if;

if reset='1' then

a<="0000";b<="0000";c<="0000";d<="0000";e<="0000";f<="0000";g<="0000";h<="000 end if;

i<="1111";j<="1111";

end process;

process(tszhh,settime)

begin

if settime='0' then

cs<=s0;

elsif (tszhh'event and tszhh='1')then

cs<=ns;

end if;

end process;

process(cs)

begin

case cs is

when s0 =>ns<=s1;

when s1 =>ns<=s2;

when s2 =>ns<=s0;

end case;

end process;

process(settime,cs,set)

begin

if settime='1' then

case cs is

when s0=>if (set'event and set='1')then

if f1=9 then

f1<=(others=>'0');

if f2=5 then

f2<=(others=>'0');

else

f2<=f2+1;

end if;

else

f1<=f1+1;

end if;

end if;

when s1=>if (set'event and set='1')then

if m1=9 then

m1<=(others=>'0');

if m2=5 then

m2<=(others=>'0');

else

m2<=m2+1;

end if;

else

m1<=m1+1;

end if;

end if;

when s2=> if (set'event and set='1') then

if h1=3 and h2=2 then

h1<="0000";h2<="0000";

elsif h1=9 then

h1<=(others=>'0');h2<=h2+1; else

h1<=h1+1;

end if;

end if;

end case;

else

f1<=c;f2<=d;m1<=e;m2<=f;h1<=g;h2<=h; end if;

end process;

process(fpa,inclk)

begin

if (fpa'event and fpa='1') then

bit<=bit+1;

end if;

case bit is

when "000"=>mseg<=c;

when "001"=>mseg<=d;

when "010"=>mseg<=i;

when "011"=>mseg<=e;

when "100"=>mseg<=f;

when "101"=>mseg<=j;

when "110"=>mseg<=g;

when "111"=>mseg<=h;

when others=>NULL;

end case;

end process;

bitout<=bit;

with mseg select

outaa<="0110000" when "0001",

"1101101" when "0010",

"1111001" when "0011",

"0110011" when "0100",

"1011011" when "0101",

"1011111" when "0110",

"1110000" when "0111",

"1111111" when "1000",

"1111011" when "1001",

"1110111" when "1010",

"0011111" when "1011",

"1001110" when "1100",

"0111101" when "1101",

"1001111" when "1110",

"0000001" when "1111",

"1111110" when others;

with a select

outbb<="0110000" when "0001", "1101101" when "0010",

"1111001" when "0011",

"0110011" when "0100",

"1011011" when "0101",

"1011111" when "0110",

"1110000" when "0111",

"1111111" when "1000",

"1111011" when "1001",

"1110111" when "1010",

"0011111" when "1011",

"1001110" when "1100",

"0111101" when "1101",

"1001111" when "1110",

"1000111" when "1111",

"1111110" when others;

with b select

outcc<="0110000" when "0001", "1101101" when "0010",

"1111001" when "0011",

"0110011" when "0100",

"1011011" when "0101",

"1011111" when "0110",

"1110000" when "0111",

"1111111" when "1000",

"1111011" when "1001",

"1110111" when "1010",

"0011111" when "1011",

"1001110" when "1100",

"0111101" when "1101",

"1001111" when "1110",

"1000111" when "1111",

"1111110" when others;

outa<=(outaa and fpc);

outb<=(outbb and fpc);

outc<=(outcc and fpc);

end arth_szz;

单片机电子时钟程序

程序开始 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]

收稿日期:2007-06-04 第一作者 刘竹林 男 27岁 助教 用V HDL 实现数字时钟的设计 刘竹林 李晶骅 (十堰职业技术学院电子工程系,湖北十堰442000) 摘 要:以一款数字钟设计为例,较详细的介绍了如何用VHDL 语言设计数字电路,并给出了部分程序、仿真 波形图,并在MAX +plusII 中进行编译、仿真、下载。由此说明利用VHDL 开发数字电路的优点。 关键词:VHDL ;设计;数字钟;应用电路中图分类号:TN953 文献标识码:A 0 引言 VHDL 硬件描述语言在电子设计自动化(EDA )中扮演 着重要的角色,它的出现极大的改变了传统的设计方法、设 计过程乃至设计观念。由于采用了“自顶向下” (Top 2Down )的全新设计方法,使设计师们摆脱了大量的辅助设计工作, 而把精力集中于创造性的方案与概念构思上,用新的思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短了产品的研制周期。 这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后用综合优化工具生成具体门电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这不仅有利于早期发现结构设计上的错误,避免设计工作的浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。 1 用V HDL 设计一款数字钟 我们设计的数字时钟原理框图如图1。其基本功能划 分为:计数模块(包括秒、分、时)、译码模块、扫描显示控制模块。计数模块由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计数,当计数到23点59分59秒的时候,即一天结束,计数器清零, 新的一天重新开始计数。 图1 数字时钟原理框图 秒计数器的计数时钟信号为1Hz 的标准信号,可以由系 统板上提供的4MHz 信号通过222分频得到。秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号。设计一个同时显示时、分、秒6个数字的数字钟,则需要6个七段显示器。若同时点亮这6个七段显示器,则电路中会产生一个比较大的电流,很容易造成电路烧坏,我们通过扫描电路来解决这一问题,通过产生一个扫描信号CS (0)-CS (5)来控制6个七段显示器,依次点亮6个七段显示器,也就是每次只点亮一个七段显示器。只要扫描信号CS (0)-CS (5)的频率超过人的眼睛视觉暂留频率24Hz 以上,就可以达到尽管每次点亮单个七段显示器,却能具有6个同时显示的视觉效果,而且显示也不致闪烁抖动。 其中6位扫描信号一方面控制七段显示器依次点亮,一方面控制6选1选择器输出相应显示数字。 2 模块设计 2.1 VHDL 语言的基本结构 一个独立的设计实体通常包括:实体(EN TIT Y )、结构体(ARCHITECTURE )、配置(CONFIGURA TION )、包集合(PACKGE )、和库(L IBRAR Y )5个部分。其中实体用于描述所设计的系统的外部接口信号;构造体用于描述系统内部的结构和行为;建立输入和输出之间的关系;配置语句安装具体元件到实体—结构体对,可以被看作是设计的零件清单;包集合存放各个设计模块共享的数据类型、常数和子程序等;库是专门存放预编译程序包的地方。VHDL 程序设计基本结构如图2 。 图2 VHDL 程序设计基本结构 2.2 各模块的实现 2.2.1 计数模块(建立VHDL 语言的工程文件) 计数模块由两个60进制计数器和一个24进制计数器组成,分别对秒、分、小时进行计数。其VHDL 源程序相差不大由于篇幅有限,这里我们以秒模块的实现为例。程序如下: library ieee ; use ieee.std -logic -1164.all ;entity counter -60-bcd is 山西电子技术 2008年第1期 应用实践

基于VHDL的电子计时器的设计

EDA技术及应用课程设计 题目:基于VHDL的数字计时器 班级:电气1202班 姓名:李玉靖 学号:20121131080 指导老师:汪媛 (课程设计时间:2015年1月5日——2015年1月9日) 华中科技大学武昌分校

目录 1引言 (1) 1.1 EDA简介 (1) 1.2 VHDL简介 (2) 1.3 VHDL的特点 (3) 1.4 VHDL的设计结构 (4) 1.5 VHDL的设计步骤 (4) 2设计主要内容 (5) 3内部各功能模块 (6) 3.1六十进制计数模块 (6) 3.2二十四进制计数模块 (8) 3.3分频器模块 (10) 3.4LED显示模块 (11) 4顶层系统联调 (15) 5结语 (21) 6参考文献 (22) 7附录 (23)

1.引言 随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展。基于这种情况,可编程逻辑器件的出现和发展大大改变了传统的系统设计方法。可编程逻辑器件和相应的设计技术体现在三个主要方面:一是可编程逻辑器件的芯片技术;二是适用于可逻辑编程器件的硬件编程技术,三是可编程逻辑器件设计的EDA开发工具,它主要用来进行可编程逻辑器件应用的具体实现。在本实验中采用了集成度较高的FPGA 可编程逻辑器件, 选用了VHDL硬件描述语言和MAX + p lusⅡ开发软件。VHDL硬件描述语言在电子设计自动化( EDA)中扮演着重要的角色。由于采用了具有多层次描述系统硬件功能的能力的“自顶向下”( Top - Down)和基于库(L ibrary - Based)的全新设计方法,它使设计师们摆脱了大量的辅助设计工作,而把精力集中于创造性的方案与概念构思上,用新的思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短 了产品的研制周期。MAX + p lusⅡ是集成了编辑器、仿真工具、检查/分析工具和优化/综合工具的这些所有开发工具的一种集成的开发环境,通过该开发环境能够很方便的检验设计的仿真结果以及建立起与可编程逻辑器件的管脚之间对应的关系。 1.1 EDA简介 20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。 EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL 完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射

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

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

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

基于VHDL的多功能数字钟设计报告

基于VHDL的多功能数字钟 设计报告 021215班 卫时章 02121451

一、设计要求 1、具有以二十四小时制计时、显示、整点报时、时间设置和闹钟的功能。 2、设计精度要求为1秒。 二、设计环境:Quartus II 三、系统功能描述 1、系统输入:时钟信号clk采用50MHz;系统状态及较时、定时转换的控制信号为k、set,校时复位信号为reset,均由按键信号产生。 2、系统输出:LED显示输出;蜂鸣器声音信号输出。 3、多功能数字电子钟系统功能的具体描述如下: (一)计时:正常工作状态下,每日按24h计时制计时并显示,蜂鸣器无声,逢整点报时。 (二)校时:在计时显示状态下,按下“k”键,进入“小时”待校准状态,若此时按下“set”键,小时开始校准;之后按下“k”键则进入“分”待校准状态;继续按下“k”键则进入“秒”待复零状态;再次按下“k”键数码管显示闹钟时间,并进入闹钟“小时”待校准状态;再次按下“k”键则进入闹钟“分”待校准状态;若再按下“k”键恢复到正常计时显示状态。若校时过程中按下“reset”键,则系统恢复到正常计数状态。 (1)“小时”校准状态:在“小时”校准状态下,显示“小时”的数码管以2Hz 闪烁,并按下“set”键时以2Hz的频率递增计数。 (2)“分”校准状态:在“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。 (3)“秒”校准状态:在“秒复零”状态下,显示“秒”的数码管以2Hz闪烁,并以1Hz的频率递增计数。 (4)闹钟“小时”校准状态:在闹钟“小时”校准状态下,显示“小时”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。 (5)闹钟“分”校准状态:在闹钟“分”校准状态下,显示“分”的数码管以2Hz闪烁,并按下“set”键时以2Hz的频率递增计数。 (三)整点报时:蜂鸣器在“59”分钟的第“51”、“53”、“55”、“57”秒发频率为500Hz的低音,在“59”分钟的第“59”秒发频率为1000Hz的高音,结束时为整点。 (四)显示:采用扫描显示方式驱动4个LED数码管显示小时、分,秒由两组led灯以4位BCD 码显示。 (五)闹钟:闹钟定时时间到,蜂鸣器发出频率为1000Hz的高音,持续时间为60秒。 四、各个模块分析说明 1、分频器模块(freq.vhd) (1)模块说明:输入一个频率为50MHz的CLK,利用计数器分出 1KHz的q1KHz,500Hz的q500Hz,2Hz的q2Hz和1Hz的q1Hz。 (2)源程序: library ieee;

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课程设计(电子钟+闹铃)

数字钟的设计 一、系统功能概述 (一)、系统实现的功能: 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进制。 终上所述,考虑到试验时的简单性,故我选择了方案二。 三、细化框图 根据自顶向下的方法以及各功能模块的的功能实现上述设计方案应系统细化框图:

电子时钟程序代码

#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数字电子钟的设计与实现

基于VHDL数字电子钟的设计与实现 摘要:本课程设计完成了数字电子钟的设计,数字电子钟是一种用数字显示秒、分、时的计时装置,由于数字集成电路技术的发展和采用了先进的石英技术,它使数字钟具有走时准确、性能稳定、携带方便等优点。数字钟已成为人们日常生活中必不可少的必需品,广泛用于个人家庭以及办公室等公共场所,给人们的生活带来极大的方便。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路的能力。 关键词:电子钟;门电路及单次按键;琴键开关

目录 第一章引言----------------------------------------------------------------1 1.1 课题的背景、目的------------------------------------------1 1.2 课程设计的内容------------------------------------------1 第二章EDA与VHDL简介--------------------------------------------------2 2.1 EDA的介绍---------------------------------------------2 2.2 VHDL的介绍--------------------------------------------3 2.2.1 VHDL的用途与优点-----------------------------------------------------------------3 2.2.2 VHDL的主要特点---------------------------------------------------------------------- 2.2.3 用VHDL语言开发的流程------------------------------------------------------------ 第三章数字电子钟的设计方案------------------------------------------6 3.1秒脉冲发生器--------------------------------------------7 3.2可调时钟模块--------------------------------------------8 3.3校正电路------------------------------------------------8 3.4闹铃功能------------------------------------------------10 3.5日历系统------------------------------------------------11 第四章结束语---------------------------------------------------------------13 4.1致谢----------------------------------------------------14 4.2参考文献------------------------------------------------15

可调电子时钟程序

#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

电子时钟程序设计

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

实验十七数字时钟 实验目的 设计一个可以计时的数字时钟,其显示时间范围是00:00:00~23:59:59,且该时钟具有暂停计时、清零等功能。 实验器材 1、SOPC实验箱 2、计算机(装有Quartus II 7.0软件) 实验预习 1、了解时钟设计原理和各主要模块的设计方法。 2、提前预习,编写好主模块的VHDL程序。 实验原理 数字时钟框图如图17.1所示,一个完整的时钟应由4部分组成:秒脉冲发生电路、计数部分、译码显示部分和时钟调整部分。 1、秒脉冲发生:一个时钟的准确与否主要取决秒脉冲的精确度。可以设计分频电路对系统时钟50MHz进行50000000分频从而得到稳定的1Hz基准信号。定义一个50000000进制的计数器,将系统时钟作为时钟输入引脚clk,进位输出即为分频后的1Hz信号。 2、计数部分:应设计1个60进制秒计数器、1个60进制分计数器、1个24进制时计数器用于计时。秒计数器应定义clk(时钟输入)、rst(复位)两个输入引脚,Q3~Q0(秒位)、Q7~Q4(十秒位)、Co(进位位)9个输出引脚。分、时计数器类似。如需要设置时间可再增加置数控制引脚Set和置数输入引脚d0~d7。 3、译码显示部分:此模块应定义控制时钟输入、时分秒计数数据输入共25个输入引脚;8位显示码输出(XQ7~XQ0)、6位数码管选通信号(DIG0~DIG5)共14个输出引脚。在时钟信号的控制下轮流选择对十时、时、十分、分、十秒、秒输入信号进行译码输出至XQ7~XQ0,并通过DIG0~DIG5输出相应的选通信号选择数码管。每位显示时间控制在1ms 左右。时钟信号可由分频电路引出。 4、各模块连接方式如图17.1所示。 图17.1 数字时钟框图

基于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语言实现数字电子钟的设计 一.设计要求: 1、设计内容 选用合适的可编程逻辑器件及外围电子元器件,设计一个数字电子钟,利用EDA软件(QUARTUS Ⅱ)进行编译及仿真,设计输入可采用VHDL硬件描述语言输入法)和原理图输入法,并下载到EDA实验开发系统,连接外围电路,完成实际测试。 2、设计要求 (1)具有时、分、秒计数显示功能。 (2)具有清零的功能,且能够对计时系统的小时、分钟进行调整。 (3)小时为十二小时制。 二.实验目的: 1.通过这次EDA设计中,提高手动能力。 2.深入了解时事时钟的工作原理,以及时事时钟外围硬件设备的组成。 3.掌握多位计数器相连的设计方法。 4.掌握十进制,六进制,二十四进制计数器的设计方法。 5.继续巩固多位共阴极扫描显示数码管的驱动,及编码。 6.掌握扬声器的驱动。 7.LED灯的花样显示。 8.掌握CPLD技术的层次化设计方法 三.实验方案: 数字系统的设计采用自顶向下、由粗到细, 逐步分解的设计方法, 最顶层电路是指系统的整体要求, 最下层是具体的逻辑电路的实现。自顶向下的设计方法将一个复杂的系统逐渐分解成若干功能模块, 从而进行设计描述, 并且应用EDA 软件平台自动完成各功能模块的逻辑综合与优化, 门级电路的布局, 再下载到硬件中实现设计。因此对于数字钟来说首先是时分秒的计数功能,然后能显示,附带功能是清零、调整时分。通过参考EDA 课程设计指导书,现有以下方案: 1.作为顶层文件有输入端口:时钟信号,清零按键,调时按键,调分按键;输出端口有:用于接数码管的八段码

输出口,扫描用于显示的六个数码管的输出口。 2.底层文件分为: (1)时间计数模块。分秒计数模块计数为60计数,时计数模块为12计数。 (2)显示模块。显示模块由一个六进制计数器模块和一个七段译码器组成。进制计数器为六选一选择器的选择判断端提供输入信号, 六选一选择器的选择输出端分别接秒个位、秒十位、分个位、分十位和时个位、时十位的选通位用来完成动态扫描显示,同时依次输出秒个位、秒十位、分个位、分十位和时个位、时十位数向给译码模块。 (3)报警模块当时间到整点时就报时。输入有时分秒计数,时钟脉冲。 (4)采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以不用此种作为显示.采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,但无法显示图形文字,在显示星期是也只能用数字表示,而且采用动态扫描法与单片机连接时,在编程时比较复杂。所以也不采用了LED数码管作为显示。采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示文字,图形,显示多样,清晰可见,所以在此设计中采用LCD液晶显示屏。 四.实验原理: 1. 实验主控系统原理图: 模块设计原理图:

VHDL电子钟实验报告

期末大作业课程设计实验报告设计题目:基于VHDL电子钟的设计

目录 一、概述 (3) 1.1目的 (3) 1.2课程设计的要求和功能 (3) 二、总结 (3) 2.1课程设计进行过程及步骤 (3) 2.2所遇到的问题,如何解决问题 (15) 2.3体会收获以及建议 (15) 3.4参考资料(书,网络资料) (15) 三、教师评语 (16) 四、成绩 (16)

一、概述 1.1目的 1. 基于CPLD系统模块板,设计一个电子钟。来熟悉CPLD的工作原理以及 对VHDL的使用。 2. 通过设计出一个电子钟具有校时功能,来巩固分频,键盘扫描,计数,动 态扫描等知识内容。 1.2课程设计的要求和功能 设计一个电子钟,能进行正常的时分秒计时功能,分别有六个数码管显示24小时,60分钟,60秒的计数器显示。 利用实验箱系统上的按键实现“校时”、“校分”功能: (1)按下“SA”键时,计时器快速递增,按24小时循环,进行时校正; (2)按下“SB”键时,计分器快速递增,按60分循环,进行分校正 (3)按下“SC”键时,秒清零,进行秒校正; 二、总结 2.1课程设计进行及步骤 1.设计提示 系统框图见下

2.系统结构设计描述(1)系统顶层文件 1.顶层原理图见下

2.各个模块的解释 (1)五个输入量clk50MHz,SA,SB,SC,reset: 其中clk50MHz为总体系统提供时钟,并且经过分频来分别对电子 钟模块提供时钟,产生一秒一秒的进位信号,对显示模块的计数器 提供时钟实现显示模块的扫描功能,对按键去抖动提供时钟,实现 键盘扫描的功能。SA,SB,SC用来控制按键,实现按键控制,SA是 实现“时”加一,SB是实现“分”加一,SC是实现“秒”清零。 Reset是来控制按键功能的使能。 (2)按键功能模块 三个输入chos ,date0,date1的功能是:chos接受来自按键的信号, 若按键按下,则将date0的内容,也就是通过按键产生的脉冲来控 制电子钟进行加一,若按键没有按下,则将“秒”分频信号接入电 子钟的clk计数输入端,通过时钟脉冲来控制电子钟。 (3)电子钟计数模块 有5个输入ci,nreset,load,clk,d[7..0],作用分别是ci是使能端,直 接接高电位,nreset是复位,load和d[7..0]是用来置数的,clk提供 计数时钟,也就是一秒一个脉冲。 输出端有三个,co是进位功能,只有“秒”和“分”模块有效, qh[3..0],ql[3..0]是分位的数字输出端,一个是十位,一个是个位。

相关文档