用6位数码管显示时间
基于PLC日期显示及闹钟定时与报时
前言数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。
可编程控制器(PLC)是以微处理为核心的通用工业控制装置,它将传统的继电器--接触器控制系统与计算机控制技术紧密结合,集计算机、控制、通信于一体,为工业自动化提供了几乎完美的现代化自动控制装置。
近几年,可编程控制器由于其优良的控制性能,极高的可靠性,在各行各业中的应用日益广泛普及。
为此,各高校的电器自动化、电气工程、供用电技术、机电一体化等相关专业相继开设了有关可编程控制器原理及应用的课程。
本设计以西门子公司的S7—200CN为基础,设计了PLC电子时钟的梯形图。
目录前言 (1)摘要 (3)第一章PLC的概要 (4)1.1课程设计准备知识 (4)1.11 PLC控制系统设计的基本原则 (4)1.12 PLC控制系统设计的基本内容 (4)1.13 PLC控制系统设计的一般步骤 (5)1.2 软件介绍 (6)1.21软件介绍 (6)第二章PLC控制电子钟设计 (8)2.1七段共阴数码管电子钟PLC程序设计原理 (8)2.11 控制要求: (8)2.12 总体设计思想 (8)2.13 具体设计过程 (8)2.2 编程元件地址分配 (10)2.3输入/输出继电器的地址分配 (13)2.31 输入/输出继电器的地址分配 (13)2.4数字电子钟控制系统的方案 (14)2.41 方案论证 (14)2.42 控制要求 (14)2.43 数码管显示原理 (15)2.44 数字电子钟的程序 (15)第三章数字电子钟梯形图程序 (16)第四章 PLC控制系统设计 (28)4.1. 1PLC控制系统设计的基本原则 (27)4.12PLC控制系统设计的一般步骤 (27)4.13PLC程序设计的一般步骤 (28)4.14PLC型号的选择 (28)4.15显示方式的方案比较 (29)4.16键盘 (29)4.2.1液晶显示器的特点 (30)4.221602字符型LCD简介 (31)4.231602LCD的基本参数及引脚功能 (33)4.3.1时间设定模块流程图 (35)重庆工业职业技术学院4.32闹铃功能的实现流程图 (36)4.33电子闹钟的显示电路设计 (37)4.34基本显示模块的实现流程图 (38)结束语 (39)致谢 (40)附录(1)参考文献 (41)附录(2) (42)摘要本系统采用计数器、显示器和校时电路组成。
VHDL数字时钟设计
VHDL数字时钟设计序⾔这个是我在做FPGA界的HelloWorld——数字钟设计时随⼿写下的,再现了数字钟设计的过程⽬标分析1. 时钟具有时分秒的显⽰,需6个数码管。
为了减⼩功耗采⽤扫描法显⽰2. 按键设置时间,需要对按键进⾏消抖3. 时分秒即为2个60进制计数器,⼀个24进制计数器。
模块设计综上所述,我采⽤模块化设计⽅法进⾏设计,绘制框图如下。
1. 时钟分频产⽣各个模块所需频率时钟。
2. 按键处理模块对按键信号进⾏消抖、变长脉冲为短脉冲等处理。
3. 时间控制模块产⽣时间信号或对时间进⾏设置。
4. 数码管驱动模块负责对时间信号BCD码译码为数码管的段码并且扫描输出到数码管。
下⾯对各个模块分别详细叙述时钟分频模块我打算把时钟分频模块做成“数控N分频器”,通过给分频器传⼊数值N来对时钟信号进⾏N分频。
得到的信号频率为原时钟信号的频率/N,占空⽐为1/N。
稍微考虑下其他模块所需时钟:按键处理模块100Hz ,时间控制模块1Hz,数码管驱动50Hz。
⽽输⼊时钟为33.8688MHz。
我不想传⼊的N数值过⼤,我打算先对时钟进⾏两次:第⼀次调⽤时钟分频模块得到1Mhz,第⼆次得到1Khz。
这样N的位数为10可以满⾜需求。
代码如下library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_UNSIGNED.all;entity ClkDiv isport(clk_i:IN STD_LOGIC;N_i: IN STD_LOGIC_VECTOR(9 DOWNTO 0);clk_o:OUT STD_LOGIC);end ClkDiv;architecture behavior of ClkDiv issignal count:STD_LOGIC_VECTOR(9 DOWNTO 0):="0000000001";signal clk_temp:STD_LOGIC:='0';beginprocess(clk_i)beginif(clk_i'EVENT and clk_i='1')thenif (count=N_i)thencount<="0000000001";clk_temp<='1';elsecount<=count+1;clk_temp<='0';end if;end if;end process;clk_o<=clk_temp;end behavior;仿真结果如下:2分频:输出信号为f/2Hz,占空⽐1:23分频:输出信号为f/3Hz,占空⽐1:3按键处理模块去抖动根据以往的经验,按键按下弹起电平会有⼀⼩段⽑刺,可能会引起电路误操作,所以要对按键进⾏消抖处理使变为⼲净的矩形信号。
HV系列多功能时间控制器使用说明书
HV系列是本公司研发的多功能时间控制仪表,它以高性 能的MCU芯片为主控处理器,采用多重滤波及防干扰电路, 工作稳定可靠。仪表采用双排LED数码管显示定时值及预置 值,采用轻触按钮开关设定仪表参数,可广泛应用于化工、 机械、轻工、冶金、纺织等行业。
基本特点
共有八种定时范围: 0.01S~9999.99S 0.1S~99999.9S 1S~999999S 0.1M~99999.9M
1M~999999M 1H~999999H 1S~9999M59S 1S~99H59M59S
7 MOD
8 HOL
9 CON
10 RAT
11 OUT
12 TIM
13 OT3
14 TM3
0.01S~9999.99S 0.1S~99999.9S 1S~999999S 0.1M~99999.9M
1M~999999M 1H~999999H 1S~9999M59S 1S~99H59M59S
1M~999999M 1H~999999H 1S~9999M59S 1S~99H59M59S
设定键
左移键 减少键 增加键
SET
型号说明
HV □- R □ □ □
MS
RST
空白:不带附加功能 T:带RS485通讯(Modbus-RTU) I :带 变 送 输 出( 4 ~ 2 0 m A , 0 ~ 1 0 V )
1:一段输出(OUT4) 2:两段输出(OUT3、OUT4) 3:三段输出(OUT2、OUT3、OUT4) 4: 四 段 输 出( O U T 1、O U T 2、O U T 3、O U T 4 )
★按键设定仪表参数,6位双排LED数码管显示;
基于51系列单片机与DS1302时钟芯片的电子时钟C语言Proteus仿真报告
基于单片机的电子时钟:班级:学号:指导教师:完成日期:I / 20目录摘要一、引言 (1)二、基于单片机的电子时钟硬件选择分析 (2)2.1主要IC芯片选择 (2)2.1.1微处理器选择 (2)2.1.2 DS1302简介 (4)2.1.3 DS1302引脚说明 (4)2.2电子时钟硬件电路设计 (5)2.2.1时钟电路设计 (6)2.2.2整点报时功能 (7)三、Protel软件画原理图 (8)3.1系统工作流程图 (8)3.2原理图 (9)四、proteus软件仿真与调试 (9)4.1电路板的仿真 (9)4.2软件调试 (9)五、源程序 (10)六、课设心得 (13)II / 20七、参考文献 (13)基于单片机电子时钟设计摘要电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。
另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。
本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。
本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。
本设计应用AT89C52芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。
这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。
该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。
关键词:电子时钟;多功能;AT89C52;时钟日历芯片III / 20一、引言时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。
从古代的水漏、十二天干地支,到后来的机械钟表以与当今的石英钟,都充分显现出了时间的重要,同时也代表着科技的进步。
致力于计时器的研究和充分发挥时钟的作用,将有着重要的意义。
第六章习题参考答案
第六章 MCS-51的定时/计数器1. 如果采用晶振的频率为3MHz ,定时器/计数器工作方式0、1、2下,其最大的定时时间为多少? 解答:因为机器周期)(410312126s f T OSC cy μ=⨯==, 所以定时器/计数器工作方式0下,其最大定时时间为)(768.321042261313ms T T C MAX =⨯⨯=⨯=-;同样可以求得方式1下的最大定时时间为262.144ms ;方式2下的最大定时时间为1.024ms 。
2. 定时/计数器用作定时器时,其计数脉冲由谁提供?定时时间与哪些因素有关?答:定时/计数器作定时时,其计数脉冲由系统振荡器产生的内部时钟信号12分频后提供。
定时时间与时钟频率和定时初值有关。
3. 定时/计数器用作定时器时,对外界计数频率有何限制?答:由于确认1次负跳变要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24。
4.采用定时器/计数器T0对外部脉冲进行计数,每计数100个脉冲后,T0转为定时工作方式。
定时1ms 后,又转为计数方式,如此循环不止。
假定MCS-51单片机的晶体振荡器的频率为6MHz ,请使用方式1实现,要求编写出程序。
解:定时器/计数器T0在计数和定时工作完成后,均采用中断方式工作。
除了第一次计数工作方式设置在主程序完成外,后面的定时或计数工作方式分别在中断程序完成,用一标志位识别下一轮定时器/计数器T0的工作方式。
编写程序如下:ORG 0000HLJMP MAINORG 000BHLJMP IT0PMAIN: M OV TMOD,#06H ;定时器/计数器T0为计数方式2 MOV TL0,#156 ;计数100个脉冲的初值赋值MOV TH0,#156SETB GATE ;打开计数门SETB TR0 ;启动T0,开始计数SETB ET0 ;允许T0中断SETB EA ;CPU开中断CLR F0 ;设置下一轮为定时方式的标志位W AIT: AJMP W AITIT0P: CLR EA ;关中断JB F0,COUNT ;F0=1,转计数方式设置MOV TMOD,#00H ;定时器/计数器T0为定时方式0MOV TH0,#0FEH ;定时1ms初值赋值MOV TL0,#0CHSETB EA RETICOUNT: MOV TMOD,#06HMOV TL0,#156SETB EARETI5. 定时器/计数器的工作方式2有什么特点?适用于哪些应用场合? 答:定时器/计数器的工作方式2具有自动恢复初值的特点,适用于精确定时,比如波特率的产生。
数码管功能
数码管功能数码管是一种常见的显示元件,由许多发光二极管(LED)组成,常用于显示数字和字符等信息。
在我们的日常生活中,数码管被广泛应用于各种设备中,如电子钟、电子秤、温度计、计时器等。
数码管的功能主要体现在以下几个方面:1. 数字显示:数码管最基本的功能就是显示数字。
它由七个发光二极管组成,用来表示不同的数字。
每个发光二极管代表一个数字,通过控制电流的通断来显示特定的数字。
数码管可以显示0-9的数字,通过不同的组合方式还能显示英文字母和特殊字符。
2. 字符显示:除了显示数字,数码管还可以显示一些英文字母和特殊字符。
通过特定的电流通断组合,数码管可以显示A-F的英文字母,以及一些特殊字符如"-"、"."等。
这样就可以在数码管上显示更多的信息,方便用户获取更多的信息。
3. 多位显示:常见的数码管有单位数码管和多位数码管。
单位数码管只能显示一个数字或字符,而多位数码管可以同时显示多个数字或字符。
多位数码管通常由4位或6位单元组成,每个单元可以显示一个数字或字符。
通过控制不同单元的电流通断,多位数码管可以显示更多的数字或字符,提供更多的信息。
4. 时钟显示:数码管可以用于显示时间。
通过在数码管上显示不同的数字,就可以构成一个时钟。
通常使用4位数码管,前两位显示小时,后两位显示分钟。
通过不断刷新数码管上的数字,就可以实现实时的时钟显示。
5. 其他应用:除了上述常见的功能,数码管还可以用于其他许多应用。
比如在电子秤上,数码管可以显示重量;在温度计上,数码管可以显示温度;在计时器上,数码管可以显示计时的时间等等。
这些应用都将数码管的显示功能发挥到了极致,提供了更多的信息和便利。
总之,数码管作为一种常见的显示元件,具有多种功能。
它可以显示数字、字符和一些特殊字符,可以单独显示一个数字或字符,也可以通过多位数码管同时显示多个数字或字符。
数码管还可以用于显示时间、重量、温度等信息,满足不同设备的需求。
[整理]LED 电子钟 显示时间.
《单片机技术》课程设计任务1、本课题任务如下:设计一个具有特定功能的电子钟。
该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。
2、本课题要求如下:(1)在AT89S51的P0口和P2口外接由六个LED数码管(LED5~LED0)构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2.5~P2.0作LED的位控输出线(P2.5~P2.0对应于LED5~LED0),P1口外接四个按键A、B、C、D(对应于P1.0~P1.3)。
(2)、利用六个LED显示当前时间。
(3)、四个按键的功能:A键用于电子钟启动/调整;B键用于调时,范围0-23,0为24点,每按一次时加1;C键用于调分,范围0-59,0 为60分,每按一次分加1;D键用于调秒, 范围0-59,0为60秒,每按一次秒加1。
方案四: 独立式按键,LED动态显示。
该方案方框图如图1.2.4所示,独立式按键直接与单片机I/O口相连构成键盘,每个按键不会相互影响,因本系统用到的按键比较少,采用独立式键盘不会浪费I/O口线,所以本系统采用独立式键盘。
动态显示的亮度虽然不如静态显示,但其硬件电路较简单,可节省硬件成本,虽然动态扫描需占用CPU较多的时间,但本系统中的单片机没有很多实时测控任务,因此,本系统采用此种方案。
本设计中的电子钟的核心是AT89S51单片机,其内部带有4KB在线可编程Flash存储器的单片机,无须外扩程序存储器,硬件电路主要由四部分构成:时钟电路,复位电路,键盘以及显示电路。
时钟电路是电子表硬件电路的核心,没有时钟电路,电子表将无法正常工作计时。
本系统时钟电路采用的晶振的频率为12MHz,定时器采用的是定时器0工作在方式1定时,用于实现时、分、秒的计时,定时时间为62.5ms。
数字电子时钟设计原理
毕业设计论文论文题目:数字电子时钟设计原理某职业技术学院电气工程系毕业设计任务书1.能够利用软件设计数字电子钟电路原理图。
2.要求熟悉集成芯片功能。
3.具有时、分、秒显示功能。
三、毕业设计进程表毕业设计进程表起止日期设计内容备注第1周资料准备,查阅相关文献第2周设计电路第3-4周编写说明书,交指导老师审阅第5周整理资料,准备答辩前言目前市场上提供的无论是机械钟还是石英钟在晚上无照明的情况下都是不可见的。
要知道当前的时间,必须先开灯,故较为不便。
现在市场上出现了这样一类的电子钟,它以六只LED数码管来显示时分秒,与传统的以指针显示秒的方式不同,超越了人们传统的习惯与理念。
数字电子钟是一种用数字显示秒、分、时的计时装置,与传统的机械钟相比,具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛的应用。
如,日常生活中的电子手表,车站、码头、机场等公共场所的大型数显电子钟。
要实现数字电子钟的设计可以由单片机控制或者由数字IC构成。
这里我们要做的是一个由数字IC构成的数字电子钟设计。
目录1 设计功能要求 (1)2 设计方案 (1)3设计中所用到的元器件 (2)3.1译码器 (2)3.2计数器 (4)3.3显示器 (4)3.4振荡器 (5)4 电路设计 (6)4.1时分秒计数器 (6)4.1.1秒计数器的设计 (6)4.1.2分计数器的设计 (8)4.1.3时计数器的设计 (8)4.2校时电路 (8)4.3译码显示电路 (10)4.4总体电路 (11)5器件清单 (13)结束语 (14)致谢 (15)参考文献 (16)附录A 数字电子钟整体体电路图 (17)1 设计功能要求设计一数字钟,该数字钟能够准确计时,以数字形式显示时、分、秒的时间和校时功能。
在电路中,振荡电路提供的1Hz脉冲信号。
在计时出现误差时电路还可以进行校时、校分和校秒的功能。
并且要用数码管显示时、分、秒,各位均为两位显示。
具体要求如下:1.时的计时要求为“23置0”,分和秒的计时要求为60进制。
模块四答案电气控制与PLC课后习题答案
模块四PLC应用指令的应用任务一8盏流水灯控制程序思考和练习1.什么是位元件?什么是字元件?两者有什么区别?答:只具有接通(ON或1)或断开(OFF或0)两种状态的元件称为位元件。
将多个位元件按一定的规律组合起来就称为字元件,也称位组件。
位元件只能单个取用,而字元件是位元件的组合所以只用一条指令即可同时对多个字元件进行操作。
2.位元件如何组成字元件?请举例说明。
答:位元件组合以KnP的形式表示,每组由4个连续的位元件组成,称为位元件,其中P 为位元件的首地址,n为组数(n=1~8)。
4个单元K4组成16位操作数,如K4M10表示由M25~ M10组成的16位数据。
3.数据寄存器有哪些类型?具有什么特点?试简要说明。
32位数据寄存器如何组成?答:数据寄存器可分为:通用数据寄存器、锁存数据寄存器、文件寄存器、特殊数据寄存器、变址寄存器。
锁存数据寄存器有断电保持功能,文件寄存器只能用外部设备进行写入操作,特殊数据寄存器用来监控PLC内部的各种工作方式和元件,例如电池电压、扫描时间等,变址寄存器(V、Z)除了和普通的数据寄存器有相同的使用方法外,还常用于修改器件的地址编号。
32位数据寄存器由两个16为数据寄存器组成。
4.应用指令的组成要素有几个?其执行方式有几种?其操作数有几类?答:应用指令的组成要素共有五个(1)应用指令编号(2)助记符(3)数据长度(4)执行形式(5)操作数。
应用指令有脉冲执行型和连续执行型两种。
操作数分为源操作数、目标操作数和其它操作数。
5. 试问如下软元件为何种软元件?由几位组成?X1、D20、S20、K4X0、V2、X10、K2Y0、M19答:X1、S20、X10、M19是位元件;D20、K4X0、V2、K2Y0是字元件;D20、V2是16位数据寄存器,K4X0是16位、K2Y0是8位。
6.执行指令语句“MOV K5 K1Y0”后,Y0~Y3的位状态是什么?答:Y0~Y3的状态是“0101”7.执行指令语句“DMOV H5AA55 D0”后,D0、D1中存储的数据各是多少?答:D1存储的数据是(0000 0000 0000 0101),D0存储的数据是(1010 1010 0101 0101)8.试用MOV指令编写电动机Y-△降压起动程序。
DGJ-2型电工电子实验台使用说明书3
TH-DD、TH-TDTH-DT、DGJ-2、DGJ-3型电工实验装置使用说明书天煌教仪浙江天煌科技实业有限公司一、概述电工实验装置是根据目前“电工技术”、“电工学”教学大纲和实验大纲的要求,广泛吸收各高等院校从事该课程教学和实验教学教师的建议,并综合了国内各类实验装置的特点而设计的最新产品。
全套设备能满足各类学校“电工学”、“电工技术”课程的实验要求。
本装置是由实验屏、实验桌和若干实验组件挂箱等组成。
二、实验屏操作、使用说明实验屏为铁质喷塑结构,铝质面板。
屏上固定装置着交流电源的起动控制装置,三相电源电压指示切换装置,低压直流稳压电源、恒流源、受控源、数控智能函数信号发生器、定时器兼报警记录仪和各种测量仪表等。
1、交流电源的启动(1)实验屏的左后侧有一根接有三相四芯插头的电源线.先在电源线下方的接线柱上接好机壳的接地线,然后将三相四芯插头接通三相四芯380V 交流市电。
这时,屏左侧的三相四芯插座即可输出三相380V交流电.必要时此插座上可插另一实验装置的电源线插头.但请注意,连同本装置在内,串接的实验装置不能多于三台.(2)将实验屏左侧面的三相自耦调压器的手柄调至零位,即逆时针旋到底。
(3)将“电压指示切换”开关置于“三相电网输入”侧。
(4)开启钥匙式电源总开关,停止按钮灯亮(红色),三只电压表,(0~450V)指示出输入三相电源线电压之值,此时,实验屏左侧面单相二芯220V 电源插座和右侧面的单相三芯220V处均有相应的交流电压输出。
(5)按下启动按钮(绿色),红色按钮灯灭,绿色按钮灯亮,同时可听到屏内交流接触器的瞬间吸合声,面板上与U1 、V1 和W1相对应的黄、绿、红三个LED指示灯亮。
至此,实验屏启动完毕。
2、三相可调交流电源输出电压的调节(1)将三相“电源指示切换”开关置于右侧(三相调压输出),三只电压表指针回到零位。
(2)按顺时针方向缓缓旋转三相自耦调压器的旋转手柄,三只电压表将随之偏转,即指示出屏上三相可调电压输出端U、V、W两两之间的线电压之值,直至调节到某实验内容所需的电压值。
数字式秒表的课程设计
《电子技术》课程设计报告题目数字式秒表学院(部)电控学院专业自动化班级32010701学生姓名罗天美学号3712 月14 日至12 月24 日共2 周指导教师(签字)肖梅前言本课程设计是进一步的数电学习,是数电知识在实际生活当中的主要应用之一,我们本着学以致用的原则,对学过的知识进行进一步的深化理解,以达到最终掌握的目的。
因此本课程设计通过对所学电路的比较分析,选择最优方案,通过这个应用实例,我们在掌握有关知识的过程当中,即可以提高学习兴趣,又可以对数字集成电路器件的使用形成一个完整的概念。
本课设中的各项模块,没有不以仿真软件的结果为实际支撑,这样做的目的可以锻炼我们的动手能力。
在本次课程设计当中,我们通过上网查询我们这个题目的有关资料之外,还通过在图书馆找寻相关书籍,以及我们数电课本和数电实验指导书等众多途径获得相关资料。
首先,秒表的分辨率为0.01秒,故要获得频率为100 HZ的基准毫秒脉冲;其次,分、毫秒计数器为100进制计数器,秒计数器为60进制计数器,还要通过译码器对计数器的输出进行译码,再通过七段数码管进行最后的时间显示。
最后,用一个控制键实现秒表的启动/暂停/继续计数功能,用另一个控制健实现秒表的清零功能。
分别实现以上模块功能,即可设计出符合要求的数字秒表。
在秒表的设计过程中,杨莎莎,李勇霞,罗天美为一组,罗天美负责获取基准脉冲的电路的设计,杨莎莎负责控制电路选择这个模块功能实现的设计,李勇霞同学负责计数□译码□显示单元的设计,而设计的整体框图和最后的总图连接由我们三人共同讨论决定。
最终,经过我们三人的共同努力,实现了要求的功能的逻辑设计,尽管,在最终的仿真阶段还有一些问题未能解决。
在此过程当中,因为我们知识有限,不免会有错误出现,还望老师批评指正。
目录摘要 (5)第一章系统概述 (6)1.1 数字式秒表的设计意义 (6)1.2 数字式秒表的设计要求与分析 (6)1.3 设计方案论证 (6)1.4 总体设计方案框图及分析 (6)第二章单元电路的设计与分析 (7)2.1 基准脉冲的获取 (7)2.2 控制电路的选择 (12)2.3 计数、译码、显示单元的设计 (14)第三章整体电路图 (19)3.1 总体电路图 (19)第四章体会与收获 (19)4.1 遇到的问题及解决方案 (19)4.2 心得体会 (20)参考文献 (21)元器件明细表 (21)鸣谢 (21)附图 (22)摘要本次的设计任务是一个数字秒表,而秒表与普通的钟表不同,它的目的是对从某一时刻到另一时刻的时间间隔进行计时。
LED数字倒计时器实验报告
淮阴师范学院物理与电子电气工程学院课程设计报告学生姓名靖洋学号171206011班级12级4班专业电子信息科学与技术题目LED数字倒计时器指导教师魏东旭、陈勇2014 年12 月一、设计任务与要求LED倒计时器设计以AT89S52单片机为核心,系统包括6位数码管显示电按键电路、电源电路、复位电路、晶振电路及蜂鸣器电路几部分。
要求:1)LED数码管显示倒计时时间;2)倒计时过程中能设置多个闹钟,当倒计时值倒计到定值时会发出约2s的报警声音;3)通过按键可以对倒计时设定初值,倒计时初始值范围在24:00:00---00:00:60之间,用户可根据需要对其进行设置,设置成功后复位初始值为成功设定值。
二、框图设计2.1 LED数字倒计时器主要由AT89C51单片机、晶振电路、复位电路、按键电路、数码管电路、蜂鸣电路组成(如图2.1)。
图2.1 LED数字倒计时器系统设计框图2.2 晶振电路分析1)晶振电路原理:晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。
当电路中的激励电信号和晶振的标称频率相同时,电路就能输出信号强大,频率稳定的正弦波。
整形电路再将正弦波变成方波送到数字电路中供其使用。
2)晶振电路的特点:晶振是石英振荡器的简称,英文名为Crystal,晶振分为有源晶振和无源晶振两种,其作用是在电路产生震荡电流,发出时钟信号。
它是时钟电路中最重要的部件,它的作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题。
由于制造工艺不断提高,现在晶振的频率偏差、温度稳定性、老化率、密封性等重要技术指标都很好,已不容易出现故障,但在选用时仍可留意一下晶振的质量。
图2.2晶振电路原理图2.3 复位电路的分析1)复位电路的原理:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
单片机课程设计电子时钟
目录第一部分设计任务及要求 (2)1.1单片机设计设计内容 (2)1.2单片机课程设计要求 (2)1.3 系统运行流程 (2)第二部分设计方案 (3)2.1 总体设计方案说明 (3)2.2 系统方框图 (3)2.3 系统流程图 (3)第三部分主要器材及基本简介 (7)3.1 主要器材 (7)3.2主要器材简介 (7)第四部分系统硬件设计 (7)4.1 数码管显示电路 (7)4.2键盘输入电路 (8)4.3 蜂鸣器 (8)第五部分课程设计总结 (9)附录 (9)1. 系统源程序注释及功能说明 (9)2. 原理图 (17)毕竟是两年前写的东西了,在这里分享一下自己的思路,程序100%能运行,只不过是在我的那块板子上,要参考的话,最好去看看自己用的板子的接口和板子的原理图啥样。
第一部分设计任务及要求1.1单片机设计设计内容利用STC89C51RC单片机和LCD7407六段数码管实现可预置参数的电子钟,可由按键切换不同的功能。
1.2单片机课程设计要求80C51系列单片机的外围接口电路设计,掌握应用软件的编写及调试。
学会用软件调试硬件和用硬件调试软件。
1.硬件设计要求:CPU选用 STC89C51RC,内有 4KB Flash ROM。
显示用6位LED,LED共阴极接法,采用动态显示法。
用芯片7407作7段LED段选驱动,用芯片7406段LED位段选驱动。
要求有单片机复位键,功能选择键,加/减键,移位键,确认键。
要求用Protel绘制电路原理图2.软件编写要求:(1)基本要求:实时时钟:显示年月日时分秒,各两位,分二页显示。
可以上电自动按预置时间走时。
(2)提高要求:时钟上电后,显示时分秒,用按键切换年月日3秒后,返回时分秒。
可以手动预置年、月、日、时、分、秒后,时间走时。
预置的位要求闪烁。
闹钟功能:定时到报警(喇叭发声),手动预置定时时间。
定时器(倒计时)功能:定时清0报警(喇叭发声),手动预置定时时间。
AT89C2051做的数字电子时钟
AT89C2051做的数字钟采用AT89C2051的6位电子钟原理如下图所示,只要硬件连接无误,保证成功。
另外图中的SET按纽用于校准时间。
按住2秒以上进入校准时间状态及换档和退出,快速点触用于调节时间数值。
三极管采用9015即可。
数码管最好采用红色的共阳型LED数码管,亮度高些,因为是扫描的显示方式,所以各个数码管的abcdefg各脚采用了总线并联,改动510欧姆的电阻可以改变显示亮度。
电子钟原理图电子钟源程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AT89C2051时钟程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 定时器T0、T1溢出周期为50MS,T0为秒计数用,T1为调整时闪烁用,; P3.7为调整按钮,P1口为字符输出口,采用共阳显示管。
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中断入口程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ORG 0000H ;程序执行开始地址LJMP START ;跳到标号START执行ORG 0003H ;外中断0中断程序入口RETI ;外中断0中断返回ORG 000BH ;定时器T0中断程序入口LJMP INTT0 ;跳至INTTO执行ORG 0013H ;外中断1中断程序入口RETI ;外中断1中断返回ORG 001BH ;定时器T1中断程序入口LJMP INTT1 ;跳至INTT1执行ORG 0023H ;串行中断程序入口地址RETI ;串行中断程序返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 主程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;START: MOV R0,#70H ;清70H-7AH共11个内存单元MOV R7,#0BH ;CLEARDISP: MOV @R0,#00H ;INC R0 ;DJNZ R7,CLEARDISP ;MOV 20H,#00H ;清20H(标志用)MOV 7AH,#0AH ;放入"熄灭符"数据MOV TMOD,#11H ;设T0、T1为16位定时器MOV TL0,#0B0H ;50MS定时初值(T0计时用)MOV TH0,#3CH ;50MS定时初值MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)MOV TH1,#3CH ;50MS定时初值SETB EA ;总中断开放SETB ET0 ;允许T0中断SETB TR0 ;开启T0定时器MOV R4,#14H ;1秒定时用初值(50MS×20)START1: LCALL DISPLAY ;调用显示子程序JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序SJMP START1 ;P3.7口为1时跳回START1SETMM1: LJMP SETMM ;转到时间调整程序SETMM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1秒计时程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T0中断服务程序INTT0: PUSH ACC ;累加器入栈保护PUSH PSW ;状态字入栈保护CLR ET0 ;关T0中断允许CLR TR0 ;关闭定时器T0MOV A,#0B7H ;中断响应时间同步修正ADD A,TL0 ;低8位初值修正MOV TL0,A ;重装初值(低8位修正值)MOV A,#3CH ;高8位初值修正ADDC A,TH0 ;MOV TH0,A ;重装初值(高8位修正值)SETB TR0 ;开启定时器T0DJNZ R4, OUTT0 ;20次中断未到中断退出ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值MOV R0,#71H ;指向秒计时单元(71H-72H)ACALL ADD1 ;调用加1程序(加1秒操作)MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)CLR C ;清进位标志CJNE A,#60H,ADDMM ;ADDMM: JC OUTT0 ;小于60秒时中断退出ACALL CLR0 ;大于或等于60秒时对秒计时单元清0MOV R0,#77H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加1分钟MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于60分时中断退出ACALL CLR0 ;大于或等于60分时分计时单元清0MOV R0,#79H ;指向小时计时单元(78H-79H)ACALL ADD1 ;小时计时单元加1小时MOV A,R3 ;时数据放入ACLR C ;清进位标志CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于24小时中断退出ACALL CLR0 ;大于或等于24小时小时计时单元清0OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移MOV 73H,77H ;入对应显示单元MOV 74H,78H ;MOV 75H,79H ;POP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器SETB ET0 ;开放T0中断RETI ;中断返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 闪动调时程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断服务程序,用作时间调整时调整单元闪烁指示INTT1: PUSH ACC ;中断现场保护PUSH PSW ;MOV TL1, #0B0H ;装定时器T1定时初值MOV TH1, #3CH ;DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)MOV R2,#06H ;重装0.3秒定时用初值CPL 02H ;0.3秒定时到对闪烁标志取反JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"MOV 72H,76H ;02H位为0时正常显示MOV 73H,77H ;MOV 74H,78H ;MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场POP ACC ;RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据MOV 74H,78H ;MOV 75H,79H ;AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示MOV 74H,7AH ;MOV 75H,7AH ;AJMP INTT1OUT ;转中断退出; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 加1子序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADD1: MOV A,@R0 ;取当前计时单元数据到A DEC R0 ;指向前一地址SWAP A ;A中数据高四位与低四位交换ORL A,@R0 ;前一地址中数据放入A中低四位ADD A,#01H ;A加1操作DA A ;十进制调整MOV R3,A ;移入R3寄存器ANL A,#0FH ;高四位变0MOV @R0,A ;放回前一地址单元MOV A,R3 ;取回R3中暂存数据INC R0 ;指向当前地址单元SWAP A ;A中数据高四位与低四位交换ANL A,#0FH ;高四位变0MOV @R0,A ;数据放入当削地址单元中RET ;子程序返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 清零程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;对计时单元复零用CLR0: CLR A ;清累加器MOV @R0,A ;清当前地址单元DEC R0 ;指向前一地址MOV @R0,A ;前一地址单元清0RET ;子程序返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 时钟调整程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;当调时按键按下时进入此程序SETMM: cLR ET0 ;关定时器T0中断CLR TR0 ;关闭定时器T0LCALL DL1S ;调用1秒延时程序JB P3.7,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电)MOV R2,#06H ;进入调时状态,赋闪烁定时初值SETB ET1 ;允许T1中断SETB TR1 ;开启定时器T1SET2: JNB P3.7,SET1 ;P3.7口为0(键未释放),等待SETB 00H ;键释放,分调整闪烁标志置1SET4: JB P3.7,SET3 ;等待键按下LCALL DL05S ;有键按下,延时0.5秒JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态MOV R0,#77H ;按下时间小于0.5秒加1分钟操作LCALL ADD1 ;调用加1子程序MOV A,R3 ;取调整单元数据CLR C ;清进位标志CJNE A,#60H,HHH ;调整单元数据与60比较HHH: JC SET4 ;调整单元数据小于60转SET4循环LCALL CLR0 ;调整单元数据大于或等于60时清0CLR C ;清进位标志AJMP SET4 ;跳转到SET4循环CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。
设计一个电子时钟,要求可以显示时、分、秒,用户可以设置时间
EDA课程设计-电子钟一、设计要求1、基本功能要求:设计一个电子时钟,要求可以显示时、分、秒,用户可以设置时间。
扩展功能要求:2、跑表功能,闹钟功能,调整数码管的亮度。
二、系统结构控制键—jian5、jian4、jian7、jian8:数码管显示段选信号输出sg:——选择6位数码管中的某一个显示数据;发光二极管控制信号输出—led(7~0)闹钟声音输出—speaker通过一个10M信号分出各种所需频率功能介绍运行后,选择模式7,8位数码管分显示时间的时、分、秒,当前为模式0:时间显示模式,按键7为模式选择键,按下按键7,系统进入模式1,第二次按下为模式2,设置时间模式,第三次按下为跑表模式,第四次为闹钟设置模式,第五次为亮度调节模式:设置时间模式,按键4控制更改数码管的位,按键5控制选中数码管的数值,时间设置完成后,按键按键8,设置时间会保存住,并在模式0中显示;系统进入模式2:秒表模式,按键4为开始/结束键,按键5为清零键;系统进入模式3:闹钟设置模式,相关设置与模式1相同,当当前时间与闹钟设置时间相同时,喇叭就会响;系统进入模式4:亮度调节模式,通过按键4设置亮度,共三种亮度;再按下按键7,系统又会进入模式0。
4、RTL图三、VHDL源程序1、library ieee; --通过10M分出所需频率use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fenpin isport (clk_10M : in std_logic;clk_10000 : out std_logic;clk_100 : out std_logic;clk_1 : out std_logic);end entity;architecture sub1 of fenpin issignal Q_1 : std_logic_vector(8 downto 0);signal Q_2 : std_logic_vector(6 downto 0);signal Q_3 : std_logic_vector(6 downto 0);signal clk10000 : std_logic;signal clk100 : std_logic;signal clk1 : std_logic;beginprocess(clk_10M)beginif clk_10M'event and clk_10M='1' thenif Q_1=500 thenQ_1 <= "000000000";clk10000 <= not clk10000;if Q_2=100 thenQ_2 <= "0000000";clk100<= not clk100;if Q_3=100 thenQ_3 <= "0000000";clk1<=not clk1;else Q_3<=Q_3+1;end if;else Q_2<=Q_2+1;end if;else Q_1<=Q_1+1;end if;end if;end process;clk_10000 <= clk10000;clk_100 <= clk100;clk_1 <= clk1;end sub1;2、library ieee; --扫描数码管use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity xianshi isport(clk_10000:in std_logic;jian4:in std_logic;moshi:in integer range 0 to 4;a0,a1,a3,a4,a6,a7:in integer range 0 to 9;sg11:out std_logic_vector(6 downto 0);bt11:out std_logic_vector(7 downto 0));end;architecture one of xianshi issignal cnt8 :std_logic_vector(2 downto 0);signal a :integer range 0 to 15;signal light: std_logic;signal flash:integer range 0 to 2;signal count1,count2:integer range 0 to 10;beginp1: process(cnt8,light,a0,a1,a3,a4,a6,a7)begincase cnt8 iswhen "000" => bt11<= "0000000"&(light);a<=a0;when "001" => bt11<= "000000"&(light)&'0';a<=a1; when "010" => bt11<= "00000"&(light)&"00";a<=15; when "011" => bt11<= "0000"&(light)&"000";a<=a3; when "100" => bt11<= "000"&(light)&"0000";a<=a4; when "101" => bt11<= "00"&(light)&"00000";a<=15; when "110" => bt11<= '0'&(light)&"000000";a<=a6; when "111" => bt11<= (light)&"0000000";a<=a7;when others => null;end case;end process p1;p2:process(clk_10000)beginif clk_10000'event and clk_10000 ='1' then cnt8 <= cnt8+1; end if;end process p2;p3:process(a)begincase a iswhen 0 => sg11<= "0111111";when 1 => sg11<= "0000110";when 2 => sg11<= "1011011";when 3 => sg11<= "1001111";when 4 => sg11<= "1100110";when 5 => sg11<= "1101101";when 6 => sg11<= "1111101";when 7 => sg11<= "0000111";when 8 => sg11<= "1111111";when 9 => sg11<= "1101111";when 10 => sg11<= "1110111";when 11 => sg11<= "1111100";when 12 => sg11<= "0111001";when 13 => sg11<= "1011110";when 14 => sg11<= "1111001";when 15 => sg11<= "1000000";when others => null;end case;end process p3;process(jian4,moshi)beginif moshi=4 thenif jian4'event and jian4='1' thenif flash =2 thenflash<=0;else flash<=flash+1;end if;end if;end if;end process;process(clk_10000,flash)beginif clk_10000'event and clk_10000 ='1' thencase flash iswhen 0 => light<='1';when 1 => if count1=2 thencount1<=0; light<='1';else count1<=count1+1;light<='0';end if;when 2 => if count2=4 thencount2<=0; light<='1';else count2<=count2+1;light<='0';end if;end case;end if;end process;end;3、library ieee; --跑表开始暂停use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity paobiao isport(clk_1:in std_logic;jian8:in std_logic;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9; shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:out integer range 0 to 9); end entity;architecture bhv of paobiao issignal shi:integer range 0 to 100;signal fen:integer range 0 to 100;signal miao:integer range 0 to 100;beginprocess(clk_1,jian8,shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1)beginif jian8='1' thenshi<=shishi1*10+shige1;fen<=fenshi1*10+fenge1;miao<=miaoshi1*10+miaoge1;elsif clk_1'event and clk_1='1' thenif miao=59 thenmiao<=0;fen<=fen+1;elsif fen>59 thenfen<=0;shi<=shi+1;elsif shi>23 thenshi<=0;else miao<=miao+1;end if;end if;end process;miaoge2<=miao rem 10;miaoshi2<=miao/10;fenge2<=fen rem 10;fenshi2<=fen/10;shige2<=shi rem 10;shishi2<=shi/10;end;4、library ieee; --设置当前时间use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity settime isport(moshi:in integer range 0 to 4;jian4,jian5:in std_logic;shishi,shige,fenshi,fenge,miaoshi,miaoge:out integer range 0 to 9);end entity;architecture bav of settime issignal a:integer range 0 to 5;signal shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1: integer range 0 to 9; beginprocess(moshi,jian4)beginif moshi=1 thenif jian4'event and jian4='1' thenif a < 5 thena<=a+1;else a<=0;end if;end if;end if;end process;process(moshi,a,jian5)beginif moshi=1 thenif a=0 thenif jian5'event and jian5='1' thenif miaoge1 =9 thenmiaoge1<=0;else miaoge1<=miaoge1+1;end if;end if;end if;if a=1 thenif jian5'event and jian5='1' thenif miaoshi1 =5 thenmiaoshi1<=0;else miaoshi1<=miaoshi1+1;end if;end if;end if;if a=2 thenif jian5'event and jian5='1' thenif fenge1 =9 thenfenge1<=0;else fenge1<=fenge1+1;end if;end if;end if;if a=3 thenif jian5'event and jian5='1' thenif fenshi1 =5 thenfenshi1<=0;else fenshi1<=fenshi1+1;end if;end if;end if;if a=4 thenif jian5'event and jian5='1' thenif shige1 =9 thenshige1<=0;else shige1<=shige1+1;end if;end if;end if;if a=5 thenif jian5'event and jian5='1' thenif shishi1 =2 thenshishi1<=0;else shishi1<=shishi1+1;end if;end if;end if;end if;end process;miaoge<=miaoge1;miaoshi<=miaoshi1;fenge<=fenge1;fenshi<=fenshi1;shige<=shige1;shishi<=shishi1;end;5、library ieee; --秒表功能use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity miaobiao isport(clk_100:in std_logic;moshi:in integer range 0 to 4;jian5,jian4:in std_logic;fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge:out integer range 0 to 9); end entity;architecture bhv of miaobiao issignal fen,miao,xmiao:integer range 0 to 99;signal start:std_logic:='0';signal reset:std_logic:='0';beginprocess(clk_100,jian5,jian4,moshi,reset,start)beginif moshi=2 thenif reset='1' thenfen<=0;miao<=0;xmiao<=0;elsif start='1' thenelsif clk_100'event and clk_100='1' thenif xmiao=99 thenxmiao<=0;miao<=miao+1;elsif miao>59 thenmiao<=0;fen<=fen+1;elsif fen>23 thenfen<=0;else xmiao<=xmiao+1;end if;end if;end if;end process;process(jian4,start)beginif jian4'event and jian4='1' thenstart<=not start;else start<=start;end if;end process;process(jian5,reset)beginif jian5'event and jian5='1' thenreset<=not reset;else reset<= reset;end if;end process;xmiaoge<=xmiao rem 10;xmiaoshi<=xmiao/10;miaoge<=miao rem 10;miaoshi<=miao/10;fenge<=fen rem 10;fenshi<=fen/10;end;6、library ieee; --设置闹钟时间use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity naozhongset isport(moshi:in integer range 0 to 4;jian4,jian5:in std_logic;shishi,shige,fenshi,fenge,miaoshi,miaoge:out integer range 0 to 9); end entity;architecture bav of naozhongset issignal a:integer range 0 to 5;signal fenshi1,fenge1,miaoge1: integer range 0 to 9;signal shishi1: integer range 0 to 9:=1;signal shige1: integer range 0 to 9:=2;signal miaoshi1: integer range 0 to 9:=0;beginprocess(moshi,jian4)beginif moshi=3 thenif jian4'event and jian4='1' thenif a < 5 thena<=a+1;else a<=0;end if;end if;end if;end process;process(moshi,a,jian5)beginif moshi=3 thenif a=0 thenif jian5'event and jian5='1' thenif miaoge1 =9 thenmiaoge1<=0;else miaoge1<=miaoge1+1;end if;end if;end if;if a=1 thenif jian5'event and jian5='1' thenif miaoshi1 =5 thenmiaoshi1<=0;else miaoshi1<=miaoshi1+1;end if;end if;end if;if a=2 thenif jian5'event and jian5='1' thenif fenge1 =9 thenfenge1<=0;else fenge1<=fenge1+1;end if;end if;end if;if a=3 thenif jian5'event and jian5='1' thenif fenshi1 =5 thenfenshi1<=0;else fenshi1<=fenshi1+1;end if;end if;end if;if a=4 thenif jian5'event and jian5='1' thenif shige1 =9 thenshige1<=0;else shige1<=shige1+1;end if;end if;end if;if a=5 thenif jian5'event and jian5='1' thenif shishi1 =2 thenshishi1<=0;else shishi1<=shishi1+1;end if;end if;end if;end if;end process;miaoge<=miaoge1;miaoshi<=miaoshi1;fenge<=fenge1;fenshi<=fenshi1;shige<=shige1;shishi<=shishi1;end;7、library ieee; --闹钟喇叭输出use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity naozhongspeaker isport(clk_100:in std_logic;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9; shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:in integer range 0 to 9; speaker:out std_logic);end entity;architecture bav of naozhongspeaker isbeginprocess(clk_100,shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1,shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2)beginif shishi2=shishi1 and shige2=shige1 and fenshi2=fenshi1 andfenge2=fenge1 and miaoshi2=miaoshi1 thenspeaker<=clk_100;else speaker<='1';end if;end process;end;8、library ieee; --转换模式use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity moshi isport(jian7:in std_logic;moshi:out integer range 0 to 4);end;architecture one of moshi issignal moshis:integer range 0 to 4;beginprocess(jian7)beginif jian7'event and jian7='1' thenif moshis=4 thenmoshis<=0;else moshis<=moshis+1;end if;end if;end process;moshi<=moshis;end;9、library ieee; --五选一选择器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mux5_1 isport(moshi:in integer range 0 to 4 ;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9;shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:in integer range 0 to 9;shishi3,shige3,fenshi3,fenge3,miaoshi3,miaoge3:in integer range 0 to 9; fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge:in integer range 0 to 9;a0,a1,a3,a4,a6,a7:out integer range 0 to 9);end entity mux5_1;architecture bhv of mux5_1 isbeginprocess(shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1,shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2,shishi3,shige3,fenshi3,fenge3,miaoshi3,miaoge3,fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge,moshi)begincase moshi iswhen 0 =>a0<=shishi1;a1<=shige1;a3<=fenshi1;a4<=fenge1;a6<=miaoshi1;a7<=miaoge1;when 1 =>a0<=shishi2;a1<=shige2;a3<=fenshi2;a4<=fenge2;a6<=miaoshi2;a7<=miaoge2;when 2 =>a0<=fenshi;a1<=fenge;a3<=miaoshi;a4<=miaoge;a6<=xmiaoshi;a7<=xmiaoge;when 3 =>a0<=shishi3;a1<=shige3;a3<=fenshi3;a4<=fenge3;a6<=miaoshi3;a7<=miaoge3;when 4 => a0<=8;a1<=8;a3<=8;a4<=8;a6<=8;a7<=8;end case;end process;end;10、library ieee; --主程序置顶use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clock isport(clk_10M:in std_logic;jian5,jian4,jian7,jian8:in std_logic;sg:out std_logic_vector(6 downto 0);bt:out std_logic_vector(7 downto 0);speaker:out std_logic);end entity;调用声明语句architecture bav of clock iscomponent fenpin --分频port (clk_10M : in std_logic;clk_10000 : out std_logic;clk_100 : out std_logic;clk_1 : out std_logic);end component;component paobiao --跑表port(clk_1:in std_logic;jian8:in std_logic;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9; shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:out integer range 0 to 9);end component;component xianshi --扫描显示port(clk_10000:in std_logic;jian4:in std_logic;moshi:in integer range 0 to 4;a0,a1,a3,a4,a6,a7:in integer range 0 to 9;sg11:out std_logic_vector(6 downto 0);bt11:out std_logic_vector(7 downto 0));end component;component moshi --模式转换port(jian7:in std_logic;moshi:out integer range 0 to 4);end component;component mux5_1 --五选一选择器port(moshi:in integer range 0 to 4 ;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9;shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:in integer range 0 to 9;shishi3,shige3,fenshi3,fenge3,miaoshi3,miaoge3:in integer range 0 to 9;fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge:in integer range 0 to 9;a0,a1,a3,a4,a6,a7:out integer range 0 to 9);end component;component settime --设置当前时间port(moshi:in integer range 0 to 4;jian4,jian5:in std_logic;shishi,shige,fenshi,fenge,miaoshi,miaoge:out integer range 0 to 9);end component;component miaobiao is --秒表port(clk_100:in std_logic;moshi:in integer range 0 to 4;jian5,jian4:in std_logic;fenshi,fenge,miaoshi,miaoge,xmiaoshi,xmiaoge:out integer range 0 to 9);end component;component naozhongset is --闹钟时间设置port(moshi:in integer range 0 to 4;jian4,jian5:in std_logic;shishi,shige,fenshi,fenge,miaoshi,miaoge:out integer range 0 to 9);end component;component naozhongspeaker is --闹钟喇叭输出port(clk_100:in std_logic;shishi1,shige1,fenshi1,fenge1,miaoshi1,miaoge1:in integer range 0 to 9;shishi2,shige2,fenshi2,fenge2,miaoshi2,miaoge2:in integer range 0 to 9;speaker:out std_logic);end component;signal moshis:integer range 0 to 4; --信号声明signal shishi1s,shige1s,fenshi1s,fenge1s,miaoshi1s,miaoge1s:integer range 0 to 9;signal shishi2s,shige2s,fenshi2s,fenge2s,miaoshi2s,miaoge2s:integer range 0 to 9;signal shishi3s,shige3s,fenshi3s,fenge3s,miaoshi3s,miaoge3s:integer range 0 to 9;signal fenshis,fenges,miaoshis,miaoges,xmiaoshis,xmiaoges: integer range 0 to 9;signal a0s,a1s,a3s,a4s,a6s,a7s: integer range 0 to 9;signal clk_10000s,clk_100s, clk_1s: std_logic;begin --元件例化u1:paobiao port map(clk_1=>clk_1s,jian8=>jian8,shishi1=>shishi2s,shige1=>shige2s,fenshi1=>fenshi2s,fenge1=>fenge2s,miaoshi 1=>miaoshi2s,miaoge1=>miaoge2s,shishi2=>shishi1s,shige2=>shige1s,fenshi2=>fenshi1s,fenge2=>fenge1s,miaoshi2=>m iaoshi1s,miaoge2=>miaoge1s);u2:xianshi port map(clk_10000=>clk_10000s,jian4=>jian4,moshi=>moshis,a0=>a0s,a1=>a1s,a3=>a3s,a4=>a4s,a6=>a6s,a7=>a7s,sg11=>sg,bt11=>bt);u3:settime port map(moshi=>moshis,jian5=>jian5,jian4=>jian4,shishi=>shishi2s,shige=>shige2s,fenshi=>fenshi2s,fenge=>fenge2s,miaoshi=>miaosh i2s,miaoge=>miaoge2s);u4:moshi port map(jian7=>jian7,moshi=>moshis);u5:mux5_1 port map(moshi=>moshis,shishi1=>shishi1s,shige1=>shige1s,fenshi1=>fenshi1s,fenge1=>fenge1s,miaoshi1=>m iaoshi1s,miaoge1=>miaoge1s,shishi2=>shishi2s,shige2=>shige2s,fenshi2=>fenshi2s,fenge2=>fenge2s,miaoshi2=>m iaoshi2s,miaoge2=>miaoge2s,shishi3=>shishi3s,shige3=>shige3s,fenshi3=>fenshi3s,fenge3=>fenge3s,miaoshi3=>m iaoshi3s,miaoge3=>miaoge3s,fenshi=>fenshis,fenge=>fenges,miaoshi=>miaoshis,miaoge=>miaoges,xmiaoshi=>x miaoshis,xmiaoge=>xmiaoges,a0=>a0s,a1=>a1s,a3=>a3s,a4=>a4s,a6=>a6s,a7=>a7s);u6:miaobiao port map(clk_100=>clk_100s,moshi=>moshis,jian5=>jian5,jian4=>jian4,fenshi=>fenshis,fenge=>fenges,miaoshi=>miaoshis,miaoge=>miaoges,xmiaoshi=>xmiao shis,xmiaoge=>xmiaoges);u7:fenpin port map(clk_10M=>clk_10m,clk_10000=>clk_10000s,clk_100=>clk_100s,clk_1 =>clk_1s);u8:naozhongset port map(moshi=>moshis,jian5=>jian5,jian4=>jian4,shishi=>shishi3s,shige=>shige3s,fenshi=>fenshi3s,fenge=>fenge3s,miaoshi=>mi aoshi3s,miaoge=>miaoge3s);u9:naozhongspeaker port map(clk_100=>clk_100s,speaker=>speaker,shishi1=>shishi3s,shige1=>shige3s,fenshi1=>fenshi3s,fenge1=>fenge3s,miaoshi1=>m iaoshi3s,miaoge1=>miaoge3s,shishi2=>shishi1s,shige2=>shige1s,fenshi2=>fenshi1s,fenge2=>fenge1s,miaoshi2=>m iaoshi1s,miaoge2=>miaoge1s);end;。
使用Quartus进行多功能数字钟设计
.EDA设计使用Quartus II进行多功能数字钟设计院系:机械工程专业:车辆工程姓名:张小辉学号:115101000151指导老师:蒋立平、花汉兵时间:2016年5月25日摘要本实验是电类综合实验课程作业,需要使用到QuartusⅡ软件,(Quartus II 是Altera公司的综合性PLD/FPGA开发软件,原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware 支持Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程)。
本实验需要完成一个数字钟的设计,进行试验设计和仿真调试,实验目标是实现计时、校时、校分、清零、保持和整点报时等多种基本功能,并下载到SmartSOPC实验系统中进行调试和验证。
关键字:电类综合实验QuartusⅡ数字钟设计仿真AbstractThis experiment is electric comprehensive experimental course work and need to use the Quartus II software, Quartus II is Altera integrated PLD / FPGA development software, schematic and VHDL, Verilog HDL and AHDL (Altera hardware description language support) etc. a variety of design input form, embedded in its own synthesizer and simulator can complete hardware configuration complete PLD design process from design entry to). The need to complete the design of a digital clock, and debug the design of experiment and simulation, the experimental goal is to achieve timing, school, reset, keep and the whole point timekeeping and other basic functions, and then download to the smartsopc experimental system debugging and validation.Key words: Electric power integrated experiment Quartus II Digital clock design Simulation目录EDA设计 (1)摘要 (2)目录 (4)一、设计要求[1] (5)二、工作原理[2] (6)三、各模块说明[3] (7)1、分频模块 (7)2、计时模块 (9)3、动态显示模块[3] (11)4、校分与校时模块 (11)5、清零模块 (13)6、保持模块 (13)7、报时模块 (13)四、总电路的形成 (15)五、调试、编程下载 (16)六、试验中出现的问题及解决办法 (17)七、实验收获与感受 (18)八、参考文献 (19)一、设计要求[1]1.设计一个数字计时器,可以完成00:00:00到23:59:59的计时功能,并在控制电路的作用下具有保持、清零、快速校时、快速校分、整点报时等基本功能。
定时闹钟设计 课程设计报告
按时闹钟设计之马矢奏春创作摘要:本设计目的是利用单片机设计制作一个简易的按时闹铃时钟,可以放在宿舍或教室使用,在夜晚或黑暗的场所也可以使用.可以设置现在的时间以及闹铃的时间而且显示出来,若时间到则发出一阵声响.本次设计的按时闹钟在硬件方面就采纳了AT89C52芯片,用6位LED数码管进行显示.LED用P0口进行驱动,采纳的是静态扫描显示,能够比力准确显示时时—分分—秒秒.通过五个功能按键可以实现对时间的修改、按时和闹铃终止,闹钟设置的时间到时蜂鸣器可以发作声响.在软件方面用C51编程.整个按时闹钟系统能完成时间的显示,调时和设置闹钟、停止响铃等功能,并经过系统仿真后获得了正确的结果.关键词:按时闹钟;蜂鸣器;AT89C52;74HC245;目录第1章绪论11.2.1设计要求:11.2.2设计任务:1第2章系统总体设计2系统设计需求总体设计方案第3章系统硬件设计43.2.3 74HC245芯片7??????LED显示模块????????按键模块??第4章系统软件设计11第5章系统测试13??测试环境??????测试步伐??????测试环境的构建??结论15致谢16参考文献17附录18第1章绪论本次课程设计的主题是按时闹钟,其基础部份是一个数字钟.电路系统由秒信号发生器、“时、分、秒”计数器、显示器组成.其中秒信号发生器是整个系统的时基信号,它直接决定计时系统的精度,这里用51单片机的按时器来实现.利用按时器获得每一秒的时刻,然后在法式中,我们就可以给秒进行逐秒赋值,满60秒则进位为1分,满60分则进位为1小时,满24小时则时间重置实现一天24小时的循环.译码显示电路将“时”、“分”、“秒”计数器的输出状态送到七段显示译码器译码,通过一个六位八段数码管显示出来.这里利用51单片机的相关知识,来实现电子闹钟的相关功能.实验使用了AT89C52、74HC245等芯片,通过单片机的P0、P3管脚来驱动数码管显示出相应的时刻.本文将讲述AT89C52、74HC245等芯片的基本功能原理,偏重点介绍该电子闹钟的设计.1.2.1设计要求:使用6位七段LED显示器来显示现在的时间;显示格式为“时时分分秒秒”;具有4个按键来做功能设置,可以设置现在的时间及显示闹铃设置时间;时间到则发出一阵声响,可通过按键复位;对单片机系统设计的过程进行总结,认真书写课程设计陈说并按时上交.1.2.2设计任务:利用51单片机结合七段LED显示器设计一个简易的按时闹铃时钟,可以放在宿舍或教室使用,由于用七段LED显示器显示数据,在夜晚或黑暗的场所也可以使用.可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响.论文分别叙述从硬件和软件上实现该设计的过程.第2章为总体设计方案.第3章主要介绍设计实现需要解决的硬件问题.依次介绍所使用的各种硬件的使用方法,并附上仿真电路图和文字说明.第4章从软件的角度说明实现该设计需要解决的问题.第2章系统总体设计系统要求实现以下功能:1.当电源接通时,系统能正确显示以后时间.2.以后时间与实时时间有误差时,可以通过键盘调整以后时间.3.系统允许进行闹钟设置,开启闹钟功能时,当设置的闹钟时间与以后时间一致的时候,系统通过蜂鸣器发出警报声而且可以通过按键停止.功能组成:本次设计中的计时功能很容易实现,难点在于时钟功能和闹钟功能的切换和时间的设置.该电子闹钟设计对51单片机按时器0装初值,使其初值对应50ms,按时器0的中断次数达到20次就刚好为1s,当秒部份计数到60时置零,并向分部份进一;当分部份计数到60时置零,并向时部份进一,那时部份计数到24时置零,从而满足时钟的正常工作.在设计过程中,我发现通过4个按键来完成一个闹钟的基础功能虽然可以实现,可是用户用起来就会很麻烦,因为有的键必需有多种功能和分歧的触发方式,我认为可以增加少许按键来方便用户快速了解到我们的闹钟是如何进行控制的.所以本次设计设置5个键依次对其进行“时间校准”、“闹钟设置”、“秒分时切换/终止警报”、“加1按钮”、“减1按钮”.“秒分时切换/终止报警”键在调时状态中,起时分秒切换的作用,在非调试状态下,起闹钟终止的作用.当用户按下“时间校准”的按钮后,法式会关闭T0按时器,之后时钟停止工作,此时数码管会显示以后静止的时间,说明已经进入时间校准的界面了.在完成时间校准后,翻开T0按时器,时钟会在设置好的时间上继续工作走秒.当用户按下“闹钟设置”按钮后,会将以后时间复制出来提供给按时界面,注意此时我们的时钟仍然在继续工作,只是数码管显示的是按时模式的静止时间.当设置好后,此时用户设置的时间只要没有触发过闹铃,再次按“闹钟设置”按钮就能检查并修改,即闹钟会保管下用户最后一次未被触发的闹钟时间.当正常工作的时钟时刻达到了预设的闹铃时刻,蜂鸣器发出警报声,屏幕会闪烁并显示以后时间.考虑到用户可能已经被提醒而不想继续被闹铃声干扰,还提供了一个能够终止闹铃的功能,此功能与“时分秒切换”功能共用同一按键,按下后时钟继续正常工作,且闹钟功能又可以重新设置.本设计在Keil编程环境下,使用C语言进行编程的编纂.编纂胜利后,通过仿真软件Proteus进行仿真测试.LED显示屏×1主控芯片:AT89C52闹钟提示:蜂鸣器人机交互:按键×5晶振:12KHz×1排阻:RESPACK8×1电容:10nf×2总线收发器:74HC245×2第3章系统硬件设计系统硬件模块主要分为以下几个模块:1.主控模块:控制其他子模块.2.时钟模块:为系统提供实时时间.3.显示模块:显示系统时间信息.4.按键模块:用户通过按键进行人机交互,修改实时时间、设置闹钟时间和终止闹钟报警. 5.闹钟模块:在所设闹钟时间发出警报声.(1).AT89C52简介AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash 只读法式存储器和256 bytes的随机存取数据存储器(RAM),器件采纳ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS51指令系统,片内置通用8位中央处置器和Flash 存储单位,AT89C52单片机在电子行业中有着广泛的应用.AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程按时计数器,2个全双工串行通信口,2 个读写口线,AT89C52可以依照惯例方法进行编程,也可以在线编程.其将通用的微处置器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发本钱.AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应分歧产物的需求.AT89C52引脚图如图3.2.1:(2).工作原理AT89C52为8 位通用微处置器,采纳工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制.功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等.主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振.RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路.VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端.P0~P3 为可编程通用I/O 脚,其功能用途由软件界说,在本设计中,P0 端口(32~39 脚)被界说为N1 功能控制端口,分别与N1的相应功能管脚相连接,13 脚界说为IR输入端,10 脚和11脚界说为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚界说为握手信号功能端口,连接主板CPU 的相应功能端,用于以后制式的检测及会聚调整状态进入的控制功能.P0 口:P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口.作为输出口用时,每位能吸收电流的方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用.在访问外部数据存储器或法式存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻.在Flash编程时,P0 口接收指令字节,而在法式校验时,输出指令字节,校验时,要求外接上拉电阻.P1 口:P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路.对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口.作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).与AT89C51 分歧之处是,P1.0 和P1.1 还可分别作为按时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),Flash 编程和法式校验期间,P1 接收低8 位地址.P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路.对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL).在访问外部法式存储器或16 位地数据存储器(例如执行MOVX @DPTR 指令)时,P2 口送出高8 位地址数据.在访问8 位地址的外部数据存储器(如执行MOVX@RI 指令)时,P2 口输出P2锁存器的内容.Flash编程或校验时,P2亦接收高位地址和一些控制信号.P3 口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口.P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路.对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口.此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL).P3 口除作为一般的I/O 口线外,更重要的用途是它的第二功能P3 口还接收一些用于Flash闪速存储器编程和法式校验的控制信号.RST:复位输入.当振荡器工作时,RST引脚呈现两个机器周期以上高电平将使单片机复位.ALE/PROG:当访问外部法式存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节.一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于按时目的.要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲.对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG).如有需要,可通过对特殊功能寄存器(SFR)区中的8EH 单位的D0 位置位,可禁止ALE 把持.该位置位后,只有一条MOVX 和MOVC指令才华将ALE 激活.另外,该引脚会被微弱拉高,单片机执行外部法式时,应设置ALE 禁止位无效.PSEN:法式贮存允许(PSEN)输出是外部法式存储器的读选通信号,当AT89C52 由外部法式存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲.在此期间,当访问外部数据存储器,将跳过两次PSEN信号.EA/VPP:外部访问允许.欲使CPU 仅访问外部法式存储器(地址为0000H—FFFFH),EA 端必需坚持低电平(接地).需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态.如EA端为高电平(接Vcc端),CPU 则执行内部法式存储器中的指令.Flash存储器编程时,该引脚加上+12V 的编程允许电源Vpp,固然这必需是该器件是使用12V编程电压Vpp.XTAL1:振荡器反相放年夜器及内部时钟发生器的输入端.XTAL2:振荡器反相放年夜器的输出端.利用芯片内部的振荡电路,在XTAL1、XTAL2的引脚上外接按时元件,内部振荡器便能发生自激振荡.按时元件可以采纳石英晶体和电容组成的并联谐振电路,如图3.2.2所示.晶振可以在1.2~12MHZ之间任选,甚至可以达到24MHz,可是频率越高功耗也就越年夜.和晶振并联的电容C1、C2的年夜小对振荡频率有微小影响,可以起到频率微调作用.时钟电路如图3.2.2:3.2.3 74HC245芯片电路中用74HC245芯片充任总线收发器,作用是放年夜信号,它具有典范的CMOS型三态缓冲门电路.由于单片机或CPU的数据/地址/控制总线端口都有一定的负载能力,如果负载超越其负载能力,一般应加驱动器.引脚界说:1引脚DIR:未输入输出端口转换用,当它为高电平“1”时,信号由“A”端口输入“B”端口输出;当它为低电平“0”时,信号由“B”端口输入“A”端口输出.29引脚:“A”端口输入输出端,每个端口与“B”端口对应.1118引脚:“B”端口输入输出端,每个端口与“A”端口对应.10引脚:GUD,电源地.20引脚:VCC,电源正极.74HC245引脚图如图3.2.3(1):图3.2.3(1)仿真电路图如图3.2.3(2):图3.2.3(2)3.3 LED显示模块本次课程设计采纳了6位数码管显示电路.在6位LED显示时,为了简化电路,降低本钱,采纳静态显示的方式, 6个LED显示器共用一个8位的I/O, 6位LED数码管的位选线分别由相应的P2. 0~P2. 5控制,而将其相应的段选线并联在一起,由一个8位的I/O口控制,即P0口.译码显示电路将“时”、“分”、“秒”计数器的输出状态经七段显示译码器译码,通过6位LED七段显示器显示出来.达到按时电路时根据计时系统的输出状态发生脉冲信号,然后去触发音频发生器实现闹铃.校时电路时用来对“时”、“分”、“秒”显示数字进行校对换整的.LED仿真电路图如图3.3:图3.4 按键模块按键模块共设置了五个按键,功能分别如下:(1).时间校准键“CLOCK”: 自锁开关,按下后进入校准设置,再次按下后退出.(2).闹钟设置键“ALARM CLOCK”: 自锁开关,按下后进入闹钟设置,再次按下后退出.另外可供用户对已经设置的闹钟时间进行检查或修改.(3). 秒分时切换/终止报警键“SWITCH/STOP”: 按钮开关,在按下“CLOCK”或“ALARM CLOCK”键时,为时分秒切换功能,默认是“秒”,再次按下是“分”,然后是“时”之后是“秒”,以此类推.在“CLOCK”或“ALARM CLOCK”键未按下时,为终止报警功能.(4).时间增加键“+”:按钮开关,可以在进入校准设置和闹钟设置后,进行加一把持.(5).时间减少键“”: 按钮开关,可以在进入校准设置和闹钟设置后,进行减一把持.按键模块仿真电路图如图3.4:闹铃指示设置有声和光两种形式.声音形式的关键元件是蜂鸣器.蜂鸣器有无源和有源两种,前者需要输入声音频率信号才华正常发声,后者则只需外加适当直流电源电压即可,本次设计我们使用的是后者.闹钟电路是用比力器来比力计时系统和按时系统的输出状态,如果计时系统和按时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放年夜电路驱动扬声器发声,从而实现按时闹响的功能.蜂鸣器仿真电路图如图3.5:第4章系统软件设计该部份主要分为实时时钟模块、LED显示模块、键盘中断模块、闹钟模块.实时时钟部份主要包括实时时间的读写,时间的修改.LED显示模块主要包括显示屏的初始化,显示的命令字.键盘中断模块包括各键的界说和作用,按键的消抖,各按键跳转的子法式分配.闹钟模块包括闹钟时间的设置,以及对蜂鸣器启动和停止条件的设置和处置.主法式包括三个部份.一是主函数部份,负责系统的初始化把持;从中断服务取得实时时间;判断闹钟时间是否与实时时间相等并在相等时发出警报声.第二部份是按时中断部份,分两种情况:负责处置从中断服务获得的时间数据并送至LED显示缓冲显示,或者显示闹钟设置界面并显示闹钟时间的设置过程.第三部份是外部中断,主要界说5个按键的作用,分配每一个按键跳转的子法式.第三部份负责时间和日期的修改,闹钟时间的设置,停止蜂鸣器鸣叫的功能.断系统在单片机应用系统中起着十分重要的作用,是现代嵌入式控制系统广泛采纳的一种适时控制技术,能对突发事件进行及时处置,从而年夜年夜提高系统对外部事件的处置能力.正是有了中断技术,单片机才得以能够普及.因此,中断技术是单片机的一项重要技术,掌握中断技术能开发出灵活、高效的单机片应用系统.要让单机片停止以后的法式去执行其他法式,需要向它发出请求信号,CPU接收到中断请求信号后才华发生中断.让CPU发生中断的信号称为中断源(又称中断请求源).单片机提供5个中断源,其中两个为外部中断请求源INT0(P3.2)和INT1(P3.3),两个片内按时器/计数器T0和T1的溢出请求中断源TF0和TF1,1个片内串行口发送或接收中断请求源T1和R1.单片机内的CPU工作时,如果一个中断源向它发出中断请求信号,它就会发生中断.可是,如果同时有两个中断源发出中断请求信号,CPU就会优先接收级别高的中断请求源,然后再接收优先级别低的中断请求.表4.3.2列出5个自力中断请求源由其硬件结构决定的自然优先级排列顺序.表4.3.2 单片机中断源的自然优先级、入口地址及中断编号对应于单片机的5个自力中断源,应有相应的中断服务法式.这些中断服务法式有专门规定的寄存位置,即表4.3.2的中断入口地址.当有了中断请求后,CPU可以根据入口地址迅速找到中断服务法式并开始执行,年夜年夜提高执行效率.主法式见附录.第5章系统测试Proteus仿真模拟软件.(1).在Proteus软件中绘制好按时闹钟仿真模拟电路图.(2).将Keil编译器生成的.hex文件载入AT89C52芯片.(3).在Proteus软件中,点击左下角的“play”按钮启动按时闹钟.如下图,“play”按钮在第一个.图5.3.1(3)仿真电路运行控制按钮详细测试内容如下:按时闹钟是否能正确显示时间;是否能正确显示闹钟设置时的界面;是否能正确显示时间调整时的界面.(1).显示时间点击“play”键之后,时钟系统开始走时,如图5.5.2(1):图5.3.2(1)经测试,显示结果达到预期要求.(2).时间调整测试如果用户发现时间运行分歧毛病,要对时间进行修改和调整,就需要进入时间修改的界面.预期可以对时、分、秒进行调整和修改.系统能正确显示时间修改的界面.用户可以完成时间的修改.经测试,该部份运行正常.(3).闹钟设置测试在系统能正确显示时间之后,用户若想设置闹钟,可以通过按键完成闹钟时间的设置.设置时间到后蜂鸣器报警,按下“STOP”键后警报停止经测试,该部份能正常运行.结论:通过以上对仿真项目的全面测试,可知仿真部份运行正常.通过以上测试,证明本设计基本实现系统所有要求,即能够正确显示时间信息,能够对以后时间进行调整和修改,而且能够设定闹钟并在所设置的闹钟时间发出警报声,通过按键可以停止警报.结论该系统采纳单机片AT89C52作为核心芯片,结合一些其他外围设备,一起构成了一款能够显示时间而且能够对其进行修改和设置按时闹钟的按时闹钟系统.该系统采纳数码管显示屏,能够清晰显示时间信息,而且能够友好的引导用户进行时间的修改以及闹钟的设置.可以通过各个寄存地址对时间进行读写把持,即读取时间和修改时间.利用蜂鸣器为用户提供闹铃功能,能够在设按时间发出警报声提醒用户.采纳按键较少的自力式键盘供人机交互,把持简双方便.可以通过键盘修改时间,也可以设置闹铃时间和修改闹铃时间,另外,在闹铃时间与系统时间一致,蜂鸣器鸣叫时,可以通过按键中断警报声.总之,该按时闹钟系统完成了市场上一般闹钟应有的功能,能够显示时间和设置闹钟,可以给用户提供时间信息.该设计也存在一些缺点,就是实际生产时投入资金会比市场上一般闹钟价格昂贵,如果进行包装,价格还会上升一些.另外,外观不如市场销售的闹钟美观.致谢衷心感谢雷俊红老师的指导.参考文献[1] 李强,51系列单片机应用软件编程技术[M].北京:北京航空航天年夜学出书社,.4:134138.[2] 薛慧芳.MCS51单机片串行口的一口多用[J].南京化工年夜学学报(自然科学版),1998,S1:8486.[3] 王东锋,王会良,董冠强.单机片C语言应用100例[M].北京:电子工业出书社,.3:218219,148152.[4] 楼然苗,李光飞.单片机课程设计指导(第2版)[M].北京:北京航空航天年夜学出书社,.1:285289.附录:系统电路图如下:系统电路图系统法式如下:#include<reg52.h>sbit btnTime = P1^0;sbit btnClock = P1^1;sbit btnSwitch = P1^2;sbit btnUp = P1^3;sbit btnDown = P1^4;sbit pin1 = P2^0;sbit pin2 = P2^1;sbit pin3 = P2^2;sbit pin4 = P2^3;sbit pin5 = P2^4;sbit pin6 = P2^5;sbit pinBuz = P2^6;unsigned char timer = 0,sec,min,hour,count = 0,s = 60,m = 60,h = 24,flag = 0; unsigned char code numbers[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delayMs(unsigned int k){unsigned int i,j;for(i = k;i>0;i)for(j = 110;j>0;j);}void timeChange(){sec++;if(sec == 60){sec = 0;min++;if(min == 60){min = 0;hour++;if(hour == 24)hour = 0;}}}void showTime(unsigned char zs,unsigned char zm, unsigned char zh){ pin1 = 1;P0 = numbers[zh/10];delayMs(5);pin1 = 0;pin2 = 1;P0 = numbers[zh%10]&0x7f;delayMs(5);pin2 = 0;pin3 = 1;P0 = numbers[zm/10];delayMs(5);pin3 = 0;pin4 = 1;P0 = numbers[zm%10]&0x7f;delayMs(5);pin4 = 0;pin5 = 1;P0 = numbers[zs/10];delayMs(5);pin5 = 0;pin6 = 1;P0 = numbers[zs%10];delayMs(5);pin6 = 0;}void setTime(){unsigned char st,mt,ht;if(btnTime == 0){delayMs(10);if(btnTime == 0){st = sec,mt = min,ht = hour;TR0 = 0;while(btnTime == 0){showTime(st,mt,ht);if(btnSwitch == 0){delayMs(10);if(btnSwitch == 0){while(!btnSwitch);count++;if(count == 3)count = 0;}}if(btnUp == 0){delayMs(10);if(btnUp == 0){while(!btnUp);switch(count){case 0:st++;if(st == 60)st = 0;break;case 1:mt++;if(mt == 60)mt = 0;break;case 2:ht++;if(ht == 24)ht = 0;break;default:;}}}if(btnDown == 0){delayMs(10);if(btnDown == 0){while(!btnDown);switch(count){case 0:if(st>0)st;elsest = 0;break;case 1:if(mt>0)mt;elsemt = 0;break;case 2:if(ht>0)ht;elseht = 0;break;default : ;}}}}TR0 = 1;sec = st,min = mt,hour = ht;}}showTime(sec,min,hour);}void setClock(){if(btnClock == 0){delayMs(50);if(btnClock == 0){if(flag == 0){s = sec;m = min;h = hour;}flag = 1;while(btnClock == 0){showTime(s,m,h);if(btnSwitch == 0){delayMs(10);if(btnSwitch == 0){while(!btnSwitch);count++;if(count == 3)count = 0;}}if(btnUp == 0){delayMs(10);if(btnUp == 0){while(!btnUp);switch(count){case 0:s++;if(s == 60)s = 0;break;case 1:m++;if(m == 60)m = 0;break;case 2:h++;if(h == 24)h = 0;break;default:;}}}if(btnDown == 0){delayMs(10);if(btnDown == 0){while(!btnDown);switch(count){case 0:if(s>0)s;elses = 0;break;case 1:if(m>0)m;elsem = 0;break;case 2:if(h>0)h;elseh = 0;break;default:;}}}}}}}void buzzer(){if((hour == h)&&(min == m)&&(sec == s)){int i;for(i = 1;i<30;i++){if(btnSwitch == 0){delayMs(20);if(btnSwitch == 0){break;}}pinBuz = 1;delayMs(450);showTime(sec,min,hour);pinBuz = 0;delayMs(300);showTime(sec,min,hour);}flag = 0;}}void init(){TMOD = 0x01;TH0 = (6553645872)/256;TL0 = (6553645872)%256;EA = 1;ET0 = 1;TR0 = 1;pinBuz = 0;}void main(){init();while(1){setTime();setClock();buzzer();}}void T0_ms() interrupt 1{TH0 = (6553645872)/256;TL0 = (6553645872)%256;timer++;if(timer == 20){timer = 0;timeChange();}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
uchar num,num1,num2,num3,temp;
void init();
void keyscan();
//void jianpan();
void delay(uint a)
{
uint x,z;
for(x=a;x>0;x--)
for(z=10;z>0;z--);
}
{
if(key4==0)
{
delay(4);
if(key4==0)
TR0=~TR0;
}
}
}
}*/
void t0() interrupt 1 //定时器1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
num++;
0x87,0xff,0xef};
void display1(uchar numdi) //秒钟显示函数
{
uchar fen,miao;
fen=numdi/10;
miao=numdi%10;
dula=1;
P0=table[fen];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
}
/*void jianpan()
{
if(key1==0)
{
delay(5);
if(key1==0)
{
num++;
if(num==60)
num=0;
}
}
while(!key1);
delay(5);
while(!key1);
if(key2==0)
{
delay(5);
if(key2==0)
{
num--;
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit key4=P3^7;
wela=1;
P0=0xfd;
wela=0;
delay(20);
}
void main()//主函数
{
init();
while(1)
{
display(num);
display1(num2);
display2(num3);
//jianpan();
keyscan();
fm=1;
if(num3==11)
{
if(num2==11)
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(20);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(20);
}
void display2(uchar numd2)//小时显示函数
{
uchar xshi,xfen;
xshi=numd2/10;
xfen=numd2%10;
dula=1;
P0=table[xshi];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(20);
dula=1;
P0=table1[xfen];
dula=0;
P0=0xff;
if(num==0)
num=60;
}
}
while(!key2);
delay(5);
while(!key2);
if(key3==0)
{
delay(5);
if(key3==0)
num=0;
}
while(!key3);
delay(5);
while(!key3);
if(key4==0)
{
delay(5);
if(key4==0)
{
if(num==11)
TR0=0;
delay(10000);
TR0=1;
}
}
}
}
void init()//初始化函数
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
P3=0xff;
num=0;
num1=0;
num2=0;
if(num==60)
{
num=0;
num2++;
if(num2==60)
{
num2=0;
fm=0;
delay(1);
num3++ ;
if(num3==24)
{
num3=0;
}
}
}
}
}
void keyscan()//键盘扫描
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{temp=P3;
switch(temp)
{
case 0xee:num2++;
if(num2==60)
num2=0;
break;
case 0xde:num2--;
if(num2==0)
num2=60;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0)
{temp=P3;
TR0=~TR0;
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
break;
case 0xbe:num3++;
if(num3==24)
num3=0;
break;
case 0x7e:num3--;
if(num3==0)
num3=24;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
P3=0xfd;
temp=P3;
delay(20);
dula=1;
P0=table1[miao];
dula=0;
P0=பைடு நூலகம்xff;
wela=1;
P0=0xf7;
wela=0;
delay(20);
}
void display(uchar numdis)//分钟显示函数
{
uchar shi,ge;
shi=numdis/10;
ge=numdis%10;