数字电子课程设计报告

时间:2024.4.20

数字电子课程设计报告

——多功能电子钟


一、设计题目

    多功能数字电子钟的设计

二、设计要求

1、有“时”、“ 分”、“ 秒”(23小时59分59秒)显示且有校时功能。(设计秒脉冲发生器);

2、有整点报时功能。(选:上下午、日期、闹钟等)

3、用中规模、小规模集成电路及模拟器件实现。

4、供电方式: 5V直流电源

三、设计任务

1、画出数字电子钟的电路图。

2、用EWB进行功能仿真。

3、撰写课程设计说明书

四、设计总体框图和总电路图

 

图1 多功能数字电子钟系统框图

图2  总电路图

五、设计方案及论证

主电路是由TTL集成电路功能部件和单元电路构成。

本方案主要功能特点:

1、实现“时”、“ 分”、“ 秒”(23小时59分59秒)显示且有校时功能;

2、自行设计的用555定时器组成的多谐振荡器和分频器组合的秒脉冲发生器,可以代替1Hz方波信号源是电路正常运作;

3、有星期的显示功能,以及时钟12/24进制的转换,并能同步正常进位;

4、实现整点报时功能。

1、振荡器的设计

   振荡器是数字电子钟的核心部件。有以下两种方案:

方案一:选用石英晶体构成的振荡器电路

    石英晶体振荡器的精度较高,由于振荡器的稳定度及频率的精确度决定了数字钟的及时的准确程度,而且,通常情况下,震荡器的频率越高,计数精度越高,所以多数都采用石英晶体振荡器,如:电子手表中的晶体振荡器电路。

方案二:555定时器构成的振荡器

555定时器构成的晶体振荡器的精度不比石英晶体振荡器,不过考虑到555定时器在数字电子中有广泛的应用,而且本设计中不要求很高的精度,所以这里采用555定时器构成多谐振荡器,设置振荡频率为1kHz。电路图如下:

图3  555定时器接成的秒脉冲发生器

555定时器频率计算公式:添加公式  周期 T=1/f

根据公式,设置R1=R2=4.77M Ohm ,C=0.1uf 则f1Hz,T1s

2、分频器设计

分频器的设计目的:产生等间距的频率稳定的标准秒脉冲信号。

设计原理:由于由555定时器构成的多谐振荡器,虽然频率达到要求,但初始时输入信号从0V变为1/3Vcc的过程中,对555定时器来说,它的逻辑值一直是0(低电平),此期间的周期与设计的1s的周期相差较大,使得直接接入电路的秒脉冲发生器从数字2开始计时。如果提高555的振荡频率,则会使得首次触发的周期和稳定后的周期相差越来越小。如果我们在电路中设计分频器,我们就需要将555定时器接成的多谐振荡器的频率重新设置,例如:将其输出的频率设置为1000Hz,那么我们就需要三片74LS90级联,并且每一片都接成是十分频,经过第一片74LS90后,输出的频率为100Hz,第二片输出的频率为10Hz,第三片输出的频率为1Hz。如果振荡器的频率为10Hz,那就只需要一片74LS90就可以了,然后将QD作为最后的输出端口。

分频器原理:74ls90实际上是异步二-五-十进制加法计数器。通过不同的连接方式,能够实现多种功能。下图是将74ls90连成十进制,达到十分频的作用,把555构成的多谐振荡器产生的10hz信号通过十次累加进位分为1Hz的信号,而波形的占空比没有发生变化,使得整个脉冲电路产生了相对标准的秒脉冲信号。下图为连接方式:

图4   一片74LS90接成十分频的分频器

图5 由555定时器构成的多谐振荡器产生的1hz的波形图

图6 由555定时器构成的多谐振荡器产生的10hz的波形图

图7 接入十分频分频器后脉冲电路产生的波形图

   经无数次试验与调试,通过微调R1,R2和C的值,得到R2=R1=4.669M Ohm,C=0.001uf,C’=0.012uf,使得周期T=1.00007s,使误差相对较小。

3、时分秒计数器设计

   分秒计时器都是60进制的,个位都为十进制,十位为六进制,当十位为5并且个位为9的时候进位,当分和秒的时间都为“59”时,向小时个位进位。

   时计数器的设计可以有两种情况,一种是24小时制,另一种是12小时制。在此处采用的是24/12进制,从“00”显示到“23/11”。(进制可调)

在此处采用的是74160进行设计:

(1)秒钟/分钟计时电路的设计

利用十进制计数器74160和带译码器的七段显示数码管组成的数字时钟电路。根据计数器74160的真值表,利用两片74160组成同步60进制递增计数器如图:                                                                                             

                      图8 分钟计时电路图

其中个位计数器接成十进制形式。其中选择Qc,Qb做反馈端,经与非门输出控制清零端(CLR’),接成六十进制形式。个位与十位之间采用同步级联复位的方式,将个位计数器的进位输出端(RCO)接至十位计数器的进位容许端(ENT),完成个位对十位的进位控制。将个位计数器的RCO端和十位计数器的Qc和Qa端经过两个与门由Co端输出,作为六十进制的输出脉冲信号。当计数器状态为59时。Co端输出高电平,在同步级联方式下,容许高位计数器计数。电路创建完成后,用1Hz方波信号作为脉冲源进行仿真。

  (2)24/12进制计数器的设计

   同样利用两个74160芯片、两个译码与数码显示器连接成十二/二十四进制的时计数器,通过开关[H]对小时进行校对,开关[W]通过相应与非门的连接控制十二进制与二十四进制间的切换电路图如下:

图9 时钟计时电路图

选择十位计数器的输出端Qb和个位计数器的输出端Qc通过与非门控制两片计数器的清零端(CLR’),当计数器的输出状态为00100100时,立即译码反馈清零,实现24进制递增计数;若选择十位计数器的输出端Qa与个位计数器的输出端Qb经与非门控制两片计数器的清零端,当计数器的输出状态为00010010时,立即译码反馈清零,实现12进制递增计数。敲击【W】键控制12/24进制的转换。

                         图10 12/24进制转换及进位装置图

值得注意的是:当进行12和24进制转换时,时钟计时电路向星期计时电路的进位将发生变化。12进制时,应当跳变循环两次(24小时为一天)进位一次,24进制时,跳变循环一次就进位一次。本设计采用74160设计的二进制计数器(图中名为222的子电路),与12进制的进位支路相连,因为星期是从星期一开始计数,所以将二进制内部的非门去掉,使七进制计数器的输入从高电平开始跳变,显示为1、2、3、4、5、6、0。另一支路接24进制的进位端,用同名为【W】的开关控制转换。达到了进制与进位的同步切换。

4、校时电路设计

   当电子钟计时出现误差时,需要对电子钟进行校时,因此校时是电子钟比不可少的内容之一。本设计是对秒钟、分钟、时钟分别进行校时,分别通过[S]、[M]、[H]开关键进行控制,且互不影响。

       本设计使用过两种校时电路方案:

方案1:按照《电子设计与仿真技术》(李忠波)中的设计将分和时的ENT端通过加控制开关控制CLK脉冲信号的输入,实现分、时的校时。但是当显示数字09时,校时出现错误,数字的十位开始从0到1跳变。初步分析原因,可能由于是同步级联,当出现数字9时开始进位,使得十位计数器单独跳变,呈现十进制计数器的功能。

  

图11 方案一校时电路设计

方案2:在方案1的基础上,将计时子电路的ENP端接高电平,使进位从CLK中进入,然后将开关加在CLK支路上,控制脉冲信号的有无,从而达到校时的目的。此时不会出现到数字09时的进位跳变。

图12 方案二校时电路设计

5、整点报时电路

   整点报时电路的功能是:每当电子钟计时到整点时,小灯泡发光,并且蜂鸣器发出响声。为了简化设计,蜂鸣器要用三极管放大驱动。

与门的下端接分钟的进位,上端接秒的进位,即:只有当分钟和秒同时由59跳至00时报时。电路图如下:

                   

                              图13  整点报时

6、日期和星期设计

(1)星期的设计:

   同样使用74160进行设计,将其接成是7进制的计数器,状态从“0000”到“0110”,其中,数字“0”代表星期日,其余的以此排序。其中的space键控制星期的校时。

   设计电路图如下:

图14 星期电路图

(2)“日”、“月”、“年”的设计。

    均是采用74160的设计,但设置的是日期是31进制,月份是12进制,年是10进制,其中日期的进制无法与实际的相符,实际有30、28天的情况。所以没有接入主电路,只是作为改进的参考。

六、仿真过程与结论

1、秒脉冲发生器

   方案一:可直接使用方波信号源

   这样设计比较简单,输出的直接就可设为1Hz,在仿真时,可以直接使用。在校时演示、进位演示中,可以任意改变其频率,方便演示。

   方案二:使用用555定时器构成的多谐振荡器与分频器组成的脉冲源

   这种设计可一将555定时器的输出频率设置为10Hz,然后在设计一个十分频的分频器,将二者连接在一起。也可以将频率设置的更高,然后将多片74LS90级联在一起即可。仿真时的效果与方案一完全一样。但不方便修改频率进行演示。

2、秒、分钟、小时电路的仿真

   秒和分显示从“00”开始到“59”,向下一级电路进位,在分钟和秒均为“59”时,整点报时,小灯泡发光,理论上继电器会发出响声,但由于电脑原因没有听到。

3、日期和星期电路的仿真

   当小时为“23”,分和秒为“59”时,向“日”个位和星期同时进位,其中星期为7进制,显示为“1”~“0”,“0”代表是星期日;“日”显示为“00”~“31”,如果当前显示为“31”下一次显示为“01”。当“日”为“31”,时间为“23时59分59秒”时向月进位,不足之处在于没有区分开“30”和“28”天的月份,这里需要手动校时。当“月”为“12”,“日”为“31”,时间为“23时59分59秒”时向年进位。

4、校时电路的仿真

如果电子表的时间有误,可以按下响应的开关,将其接到信号源上,并开始校时,当达到想要的值时,再拨回开关。也可以用此来单独检验各个计数器的进制是否正确。

七、仿真过程中遇到的问题及解决方案

问题1:555定时器接成的秒脉冲发生器的作为信号源接入电路,显示从数字“2”开始。

解决方案:将多谐震荡器的频率升高10倍,接入一个十分频的分频器。使得显示数字从“0”开始。

问题2:电子钟走一会就会自动停下来

原因:将秒脉冲发生器和方波信号发生器放到同一ebw文件中,这样会影响到电子钟的运行。

解决方案:将秒脉冲发生器放与方波信号源分开使用,分别放进不同的ewb文件中。

问题3:方案一的校时电路出现错误,无法设置数字09。

解决方案:使用方案二的校时电路进行设计。

问题4:在全电路仿真时,时钟校时电路和时钟电路的进制之间存在相互的影响。12进制时,电路功能正常, 24进制时,必须使星期显示从“1”开始(即先打到12进制再立即切换为24进制),方可对时钟进行校准。此外,星期校准电路与时钟电路之间也存在着影响。

改进:可以考虑在星期的校准电路里加一个非门,使脉冲信号反相输出,从而使星期的校准功能正常。目前尚未找到更有效的解决方案解决整个问题。

问题5:仿真过程中,软件显示出错,之后不能打开。

原因:可能是电脑问题,也可能是软件问题。

八、元件清单

表2  元件清单

九、改进方向

1、日期的设计应当将30天和28天的情况考虑在内,并研究设计方案。

2、设计闹钟电路。

3、设计上下午。

4、解决时钟校时电路和时钟电路进制之间的相互影响问题。

十、课程设计心得

在课程设计过程当中,体会最多的就是必须得细心耐心,思维要严密,并且要牢固的掌握所学的电子技术基础知识。。比如在做7进制计数器时,才发现所用的数码管都有内置的译码器这个问题,这说明从一开始对整个方案的设计就没有明确思路,只是照书去做,也对电子元件的基础知识没有很好的掌握,才会犯这种低级错误。

我们应当有不轻言放弃和精益求精的精神,遇到问题后积极询问或上网查阅相关知识,从而大胆的提出自己的想法,而如果我们真的想设计出自己的东西来,是没有一个确切的答案和你的想法是一致的,这样我们就必须得有很好的基础知识,熟悉功能表,无论是使用自己熟悉的芯片还是要重新选择,你都必须得先了解它最基本的功能。

还有一个重要的就是仿真软件,这也是我们必须要学习的东西,对于每一个软件的操作都有其技巧性,比如说快捷键,在此次设计中我开始的时候做的很慢,很多步骤都是重复的工作,浪费了不少时间。元件的分布和摆放也是有一定的学问的,设计一个电路,我们不是只要实现了功能就可以了,如何使电路图美观、便于修改,节省时间,如何使其他人可以在短时间内看得懂,这都是需要研究的。比如我在电路图中用了3个5v电源,就是为了使电路看起来更加清晰而不冗杂。在节省元件方面,如果是做实物的话则应当予以考虑。

最重要的是设计的周密和严禁程度,例如在设计日期时,我考虑的就很单一,而且在时钟电路与星期电路之间,我只是努力去实现正确的功能,而对电路功能的实现机理模棱两可,导致我设计的电路存在一定的问题而难于发现,所以我觉得严密性才是设计的关键,也是我们改进和努力的方向。

参考文献:

【1】阎石主编.《数字电子技术基础(第五版)》高等教育出版社  

【2】李忠波、袁宏等主编《电子技术与仿真技术》机械工业出版社

【3】蔡忠法主编《电子技术·实验与课程设计》· 浙江大学出版社

【4】姚福安主编《电子电路设计与实践》 山东科学技术出版社

【5】彭介华主编《电子技术课程设计指导》高等教育出版社


第二篇:数字电子钟课程设计报告


目  录

 摘  要………………………………………………………………………………3

关键词………………………………………………………………………………3

一、设计任务与要求………………………………………………………………4

二、方案设计与论证………………………………………………………………4

方案一…………………………………………………………………………4

方案二…………………………………………………………………………5

三、硬件单元电路设计与参数计算………………………………………………5

1. 电源电路………………………………………………………………5

2. 按键电路………………………………………………………………5

3. 时钟电路…………………………………………………………………5

4. 驱动电路…………………………………………………………………5

5. LED显示电路………………………………………………………………5

 6. 单片机电路………………………………………………………………6

四、软件设计与流程图……………………………………………………………10

五、总原电路及元器件清单………………………………………………………10

  1.总原理图……………………………………………………………………10

  2.PCB制板图…………………………………………………………………11

  3.整体电路仿真图……………………………………………………………12

  4.元件清单……………………………………………………………………12

   六、安装与调试……………………………………………………………………13

  1. 电路安装……………………………………………………………………13

  2. 电路调试……………………………………………………………………13

  3. 软件调试……………………………………………………………………13

   七、性能测试与分析………………………………………………………………14

   八、结论与心得……………………………………………………………………14

   九、参考文献………………………………………………………………………15

   十、致谢……………………………………………………………………………15

   十一、程序清单……………………………………………………………………15

摘要:本论文基于单片机原理技术介绍了一款于AT89C52芯片作为核心控制器的单片机数字电子钟的设计与制作,包括硬件电路原理的实现方案设计、软件程序编辑的实现、数字电子钟正常工作的流程、原理图仿真实现、硬件实物的安装制作与硬件实物的调试过程。该单片机数字电子钟采用LED 数码管能够准确显示时间(显示格式为:时时,分分,秒秒),可随时进行时间调整,时间可采用12 小时制显示或24 小时制显示,采用12 小时显示时可在标志位数码管上显示A(表示上午)或B(表示下午),可暂停时间的变动,暂停时一位数码管上显示字母H,可按自己的要求设置扩展的小键盘个数。

关键词:单片机 ;数字电子钟 ;数码管 ;AT89C52


一、  设计任务与要求

1、设计任务

    用单片机设计一个数字电子钟,采用LED 数码管来显示时间。

2、设计要求

    (1)显示格式为:XX:XX:XX, 即:时:分:秒。

    (2)时间可采用12 小时制显示或24 小时制显示,采用12 小时显示时必须

在另外一个数码管上显示A(表示上午)或B(表示下午)。

(3)设置一个按键用于时间显示方式的切换。

(4)系统上电后从上电时初始化显示:  12-00-00开始计时。

(5)能进行时间的调整,可暂停时间的变动,暂停时一位数码管上显示字母H

可按自己的要求设置扩展的小键盘个数。

二、  方案设计与论证

 

图1  系统整体框图

整个系统用单片机作为中央控制器,由单片机执行采集芯片内部时钟信号,时钟信号通过单片机I/O口传给单片机,单片机模块控制驱动模块驱动显示模块,通过显示模块来实现信号的输出、LED的显示及相关的控制功能。系统设有按键模块用于对时间进行调整及扩展多个小键盘,系统整体框图如图1所示。

1、 单片机芯片选择方案

方案一:AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器。主要性能有:与MCS-51单片机产品兼容、全静态操作:0Hz~33Hz、 三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器、八个中断源、全双工UART串行通道、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符、易编程。

方案二:AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM)。主要性能有:兼容MCS51指令系统、32个双向I/O口、256x8bit内部RAM、3个16位可编程定时/计数器中断、时钟频率0-24MHz、2个串行中断、可编程UART串行通道、2个外部中断源、6个中断源、2个读写中断口线、3级加密位、低功耗空闲和掉电模式、软件设置睡眠和唤醒功能。

从单片机芯片主要性能角度出发,本数字电子钟单片机芯片选择设计采用方案一。

2、数码管显示选择方案

方案一:静态显示。静态显示,即当显示器显示某一字符时,相应的发光二极管恒定导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小电流能获得较高的亮度,且字符不闪烁。但因当所需显示的位数较多时,静态显示所需的I/O口数较大,造成资源的浪费。

方案二:动态显示。动态显示,即各位数码管轮流点亮,对于显示器各位数码管,每隔一段延时时间循环点亮一次。利用人的视觉暂留功能可以看到整个显示,但须保证扫描速度足够快,人的视觉暂留功能才可察觉不到字符闪烁。显示器的亮度与导通电流、点亮时间及间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。

从节省单片机芯片I/O口和降低能耗角度出发,本数字电子钟数码管显示选择设计采用方案二。

3、数码管驱动选择方案

方案一:上拉电阻驱动方式。数码管段码与接有上拉电阻的单片机芯片I/O口相连,通过编程,单片机芯片即控制段码电平的高低。该方式经费低,但实物制作较复杂。

方案二:74LS245芯片驱动方式。数码管段码与74LS245芯片B口相连,74LS245芯片A口与单片机芯片I/O口,通过编程,单片机芯片即可控制段码电平的高低。该方式实物制作简单,增强驱动数码管段码能力。

  从实物制作简易程度与驱动数码管段码能力角度出发,本数字电子钟数码管驱动选择设计采用方案二。

三、  硬件单元电路设计与参数计算

1、电源电路

     本数字电子钟设计所需电源电压为直流、电压值大小5V的电压源 。从硬件实物设计简易程度与经费方面考虑,用两节电压值大小2.5V干电池与电路电压源引脚相连接即可达到硬件设计要求。即本数字电子钟设计用两节电压值大小2.5V干电池做硬件电路电压源。

2、按键电路

   本数字电子钟设计所需按键用于进行显示时间的调整与设置扩展的小键盘。

单片机芯片4个I/O口可与按键直接相连,通过编程,单片机芯片即可控制按键接口电平的高低,即按键的开与关,以达到用按键进行显示时间的调整与设置扩展的小键盘的设计要求。

3、时钟电路

单片机芯片可使用内部时钟电路和外部时钟电路两种方式产生电路所需的时钟脉冲,内部时钟电路实现可用石英晶体和微调电容外接即可达到,外部时钟电路实现需要一个外部脉冲源引入脉冲信号以保证个单片机之间时钟信号的同步。从硬件实现难易角度考虑,内部时钟电路的实现比外部时钟电路的实现更简易。既本数字电子钟设计所需的时钟源采用内部时钟电路实现。所用定时方式为工作方式1,石英晶振为12M,即最小定时时间为1us,最大定时时间约为65.5ms,其电路图如下图2所示。


                       图2  时钟电路图

4、驱动电路

       从实物制作简易程度与驱动数码管段码能力角度出发,本数字电子钟设计采用数码管段码与74LS245芯片B口相连,74LS245芯片A口与单片机芯片I/O口,通过编程,单片机芯片即可控制段码电平的高低的方式实现数码管段码控制,74LS245芯片图如下图3所示。

                     

                        图3 74LS245芯片图

5、LED显示电路

       数字电子钟设计的显示模块用8个一位数码管实现,也可用两个四位一体数码管实现。两种实现方式实现效果一样。从实物制作的难易程度出,本数字电子钟设计采用两个四位一体数码管实现。即数码管引脚与单片机芯片和74LS245对应引脚相连接。

单片机电路

       本数字电子钟设计采用AT89S52单片机芯片作为中央控制器,实现信号的输出、LED的显示及相关的控制功能。

四、  软件设计与流程图

1、数字电子时钟主程序流程图

    主程序流程图如下图图4所示。

                  图4   数字电子时钟主程序流程图

2、中断服务程序流程图

   中断服务程序流程图如下图图5所示。

         

                      图5  中断服务程序流程图

3、显示子程序流程图

     显示子程序流程图如下图图6所示。        

                图6  显示子程序流程图

五、总原电路及元器件清单

     1.总原理图

  最小系统控制原理图如下图图7所示, 数码管原理图如下图图8所示。

                   图7 最小系统控制原理图

图8  数码管原理图

  2.PCB制板图

  数码管PCB图如下图图9所示,最小系统控制PCB图如下图图10所示。

 

                        图9   数码管PCB图

                     图10   最小系统PCB图

3.整体电路仿真图

整体电路仿真图如下图图11所示。

                             图11  整体电路仿真图

4.元件清单

六、安装与调试

 1. 电路安装

     安照电路原理图把元器件安装到已打好的铜板对应的位置,把个元器件固定在铜板后,用导线把对应的元器件的引脚相连接,再用焊锡焊接好即可。

注意事项:(1)元器件的布局应尽量集中,且各个元器件间引脚的连线应尽量短、不弯曲,跳线尽量少。(2)各个元器件引脚的焊接不要虚焊。

2. 电路调试

   把相应编译好的目标程序代码加载到单片机芯片AT89S52,可接上5V电压源即开始进行硬件电路的调试工作。如果显示结果不符合设计要求,即检查电路各连接点是否正确连接,再次进行硬件电路的调试工作,或是检查代码程序是否符合硬件电路的设计,若有错即进行相应的修改,编译后,再进行硬件电路的调试工作。如此反复操作,直到调试出正确结果。

3. 软件调试

   (1) 在计算机上运行程序调试软件Keil,进行程序调试,若显示0错误(S),0警告(S)即证明程序代码正确。

(2)在Proteus软件画好的电路原理图中加载程序代码到单片机芯片AT89S52中,进行模拟仿真。若出现错误,查看错误后进行相应修改再进行调试与模拟仿真,直到调试出正确结果。

七、性能测试与分析

1、系统上电后进行功能的测试,通过测试观察到,系统上电后数码管上显示时间:12-00-00,

                          图12  实物图一

接着按下K1按键调整时间小时数的显示,即小时加1,按下K2按键调整时间分钟数的显示,即分钟加1,按下K3按键调整时间秒数的显示,即秒数加1,实物图二如下图图13所示。

                        图13  实物图二

然后按下K5按键调整时间12 小时制的显示或24 小时制的显示。在24小时制的显示的情况下,显示时间制的数码管上不显示,只显示时,分,秒;在12 小时制的显示的情况下,如果小时数大于12小时的情况,一个数码管上显示B(表示下午);反之如果小时数小于12小时的情况,一个数码管上显示A(表示上午);,实物图三如图14所示。

                        图13 实物图三

通过测试,本作品设计实现了数字电子钟的基本功能,还增加了时间制转换的功能,且系统工作稳定。

八、结论与心得

1、结论

     本单片机数字电子钟系统的功能基本符合显示格式为:XX:XX:XX, 即

时:分:秒。时间可采用12 小时制显示或24 小时制显示,采用12 小时显示时

必须在另外一个数码管上显示A(表示上午)或B(表示下午)。设置一个按键用

于时间显示方式的切换。系统上电后从上电时初始化显示:  12-00-00开始计时,

能进行时间的调整,可暂停时间的变动,暂停时一位数码管上显示字母H,可按自

己的要求设置扩展的小键盘个数设计任务的要求,经过测试数据显示, 系统的

可靠性已经基本能够达到实际电子钟的设计要求,同时本单片机数字电子钟系统

具有扩展性。

课程设计是培养学生综合运用所学知识,发现实际问题、提出实际问题、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际学习能力、动手能力的具体训练和考察过程。

在此次数字钟设计过程中, 在学习新知识的同时,把在课程中学到的理论知识运用到实际作品设计、操作中,更进一步地熟悉了单片机芯片的结构及掌握了其工作原理和具体的使用方法与相关元器件的参数计算方法、使用方法,了解了电路的开发和制作及课程设计报告的编写。加深了对相关理论知识及专业知识的掌握度,增强自身的动手能力,锻炼及提高了理解问题、分析问题、解决问题的能力,更深刻的体会到了理论联系实际的重要性,进一步掌握画图软件的使用和提高相应的画图操作水平及技巧。

九、参考文献

[1] 沈精虎.Protel 99SE基础教程[J].

[2] 李广弟,朱月秀,冷祖祁. 单片机的硬件结构[J] . 页码148。

[3] 谭丙煜.怎样撰写科学论文[M].2版.沈阳:辽宁人民出版社,1982:5-6.(本条为中文图书著录格式)

[3] 陈正义. 单片机控制实习[D].页码148。

十、致谢

  从课题的开始到最终的完成,本课程设计及报告论文是在指导老师的精心指导和同学的热心帮助下顺利完成的。

本课程设计能顺利地完成,与父母多年来一如既往的支持和关怀是分不开的,在此,向任劳任怨、含辛茹苦的父母致以衷心的感谢!

  此外衷心感谢在本次课程设计中指点和帮助我的指导老师与同学!

感谢学院为我们提供了良好课程设计仪器设备及学习环境。

十一、程序清单

/********************************************************************

*  描述*                                                                      *                 电子时钟,LED数码管显示,晶振使用12MHz        *

*                    K1---时调整                                    *

  K2---分调整                                          *                   K3---秒调整                                                     K4---时间暂停                                    K5---12小时制和24小时制切换

*                    上电时初始化显示:12-00-00                                   *

*********************************************************************#include <reg51.h>

#include <intrins.h>

unsigned char data dis_digit;

unsigned char key_s, key_v;

unsigned char code dis_code[11]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00   

              };//0,1,2,3 4, 5, 6, 7, 8, 9, off  //共阴数码管

unsigned char data dis_buf[8];

unsigned char data dis_index;

unsigned char hour,min,sec;

unsigned char sec100;

unsigned char flag,flag1,flag2;    //falg用于时间停止和启动标志,falg1为12小时和24小时的切换标志,falg2为12小时的上午和下午的切换标志

sbit K1 = P1^0;      //用于时的调整

sbit K2 = P1^1;      //用于分的调整

sbit K3 = P1^2;      //用于秒的调整

sbit K4 = P1^3;      //用于时间调整的开关,按下一次暂停时间,再按一次时则开始计时

sbit K5 = P1^4;      //用于24小时制和12小时制的切换

bit scan_key();

void proc_key();

void inc_sec();

void inc_min();

void inc_hour();

void inc_hour1();

void delayms(unsigned char ms);

void main(void)

{

 P0 = 0xff;

 P2 = 0xff;

 TMOD = 0x11;  // 定时器0, 1工作模式1, 16位定时方式

 TH1 = 0xd8;  //使用12MHz的晶振,定时时间为:10ms

 TL1 = 0xf0;

 TH0 = 0xf8;  //定时时间为2ms,用于数码管的动态扫描

 TL0 = 0x30;

 hour = 12;

 min = 00;

 sec = 00;

 sec100 = 0;

 flag = 0;

 flag1 = 0;

 dis_buf[0] = dis_code[hour / 10];  // 时十位

 dis_buf[1] = dis_code[hour % 10];  // 时个位

 dis_buf[2] = dis_code[min / 10];  // 分十位   

 dis_buf[3] = dis_code[min % 10];  // 分个位

 dis_buf[4] = dis_code[sec / 10];  // 秒十位

 dis_buf[5] = dis_code[sec % 10];  // 秒个位 

 dis_buf[6] =  0x00;   // 关闭该位数码管

 dis_buf[7] =  0x7f;   // 显示 B 表示下午

  

 dis_digit = 0xfe;

 dis_index = 0;

 TCON = 0x01; //T1:TF1 TR1    T0:TF0 TR0    定时中断:IE1 IT1 IE0 IT0 //外部中断0的触发方式为下降沿触发

 IE = 0x8a;    // 使能timer0,1 中断,控制IE寄存器的格式:EA - - ES ET1 EX1 ET0 EX0

              //                                  1 0 0  0  1   0   1 0

 TR0 = 1;     //开定时器0

 TR1 = 1;     //开定时器1

 key_v = 0x1f;    //定义为K1,K2,K3,K4,K5相应的按键,当没有按下时则为,K1,K2,K3,K4,K5,都为高电平,0x1f

 while(1)

 {

  if(scan_key())  //先扫描一次是否有按键按下

  {

   delayms(10);         //延时

   if(scan_key())    //再次扫描一次是否有按键 按下

   {

    key_v = key_s;       //将key_s的值传给key_v

    proc_key();

   }

  }

 

 }

}

bit scan_key()

{

 key_s = 0x00;         //设置key_s先为0

 key_s |=K5;

 key_s <<= 1;

 key_s |= K4;

 key_s <<= 1;

 key_s |= K3;

 key_s <<= 1;

 key_s |= K2;       //K2 -> P1.1,若K2按下则为0,当K2按下时key_s与K2或的结果会使得key_s为0x00,未按下时K2则为1,key_s与K2或的结果会使得key_s为0x01

 key_s <<= 1;       //将key_s左移一位,

 key_s |= K1;        //K1 -> P1.0,若K1按下则为0,当K1按下时key_s与K1或的结果会使得key_s为0x00或是0x02,没有按下时则得到的结果为0x01或是0x03

 return(key_s ^ key_v);     //进行逻辑异或运算,相同为0,不同为1.   已经定义了变量:key_v = 0x1f;  如果两个按键都没有按下则是得到0x03,异或的结果是为0

}

void proc_key()

{

     if(K4==0)    //K4是否按下

     {

        flag++;   //关闭定时器

        TR1=0;       //关闭定时器1

        dis_buf[6] =  0x76;   // 显示 H,用于表示设定时间的标志

     }

     if(K5==0)

     {

      flag1++;      //flag1的初始值是0,falg1为12小时和24小时的切换标志

       if(flag1==1)         //24小时制

       {

          if(dis_buf[7]==0x7f)    //判断是不是下午

           {

               hour=hour+12;

              dis_buf[7]=0x00;

           }

           dis_buf[7] =  0x00;    // 关闭显示

           if(hour >23)

           {

                hour = 0;

           }

           if(hour > 9)

               dis_buf[0] = dis_code[hour / 10];  // 时十位

           else

               dis_buf[0] = 0x00;     // 当小时的十位为0时不显示

               dis_buf[1] = dis_code[hour % 10];  // 时个位

       }

       if(flag1==2)  //12小时制

       {

           flag1=0;

           if(hour>12||hour==0)    //判断是不是下午,并用于处理24小时制的大于13和等于0的处理

           {  

              if(hour>12)

               hour=hour-12;

              if(hour==0)

              hour=12;

              dis_buf[7]=0x7f;  //显示下午  B

           }

           else

              dis_buf[7] =  0x77;    // 显示 A 表示上午

           if(hour > 9)

               dis_buf[0] = dis_code[hour / 10];  // 时十位

           else

               dis_buf[0] = 0x00;     // 当小时的十位为0时不显示

               dis_buf[1] = dis_code[hour % 10];  // 时个位        

       }

       }

     if((key_v & 0x01) == 0)   // K1,当只有K1按下时,则key_s为0x02,没有按下时key_s则为0x03

     {

      if(flag1==0)

        inc_hour();

      if(flag1==1)

         inc_hour1();

     }

     else if((key_v & 0x02) == 0) // K2, 当只有K2按下时,则key_s为0x01,没有按下时key_s则为0x03

     {

      min++;

      if(min > 59)

      {

       min = 0;

      }

      dis_buf[2] = dis_code[min / 10];  // 分十位

      dis_buf[3] = dis_code[min % 10];  // 分个位

     }

    else if((key_v & 0x04) == 0) // K3是否按下

     {

      sec++;

      if(sec > 59)

      {

       sec = 0;

      }

      dis_buf[4] = dis_code[sec / 10];  // 秒十位

      dis_buf[5] = dis_code[sec % 10];  // 秒个位

     }

     if(flag==2)

     {

        flag=0;

       TR1=1;

       dis_buf[6] =  0x00;

       if(flag1==0)

       {

           if(flag2)

               dis_buf[7] =  0x77;    // 显示 A 表示上午

           else

               dis_buf[7] =  0x7f;    // 显示 B 表示下午

       }

     }

 }

void timer0() interrupt 1

// 定时器0中断服务程序, 用于数码管的动态扫描

// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量

// dis_digit --- 位选通值, 传送到P0口用于选通当前数码管的数值, 如等于0xfe时,

//    选通P2.0口数码管

// dis_buf   --- 显于缓冲区基地址

{

 TH0 = 0xf8;  //定时时间为2ms

 TL0 = 0x30;

 P2 = 0xff;       // 先关闭所有数码管

 P0 = dis_buf[dis_index];   // 显示代码传送到P0口

 P2 = dis_digit;      //

 dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管

 dis_index++;      //

    

 dis_index &= 0x07;   // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 ,限定了只扫描8位,当为超过8位时则开始清零.

}                   //0x07=0000 0111  dis_index在一个个加一时,则为加到8次。

 //定时器1的定时时间为10ms

void timer1() interrupt 3

{

 TH1 = 0xd8;

 TL1 = 0xf0;

 sec100++;

 if(sec100 >= 100) //定时1秒的时间

 {

  sec100 = 0;

  inc_sec();

 }

}

void inc_sec()

{

 sec++;

 if(sec > 59)

 {

  sec = 0;

  inc_min();

 }

 dis_buf[4] = dis_code[sec / 10];  // 秒十位

 dis_buf[5] = dis_code[sec % 10];  // 秒个位

}

void inc_min()

{

 min++;

 if(min > 59)

 {

  min = 0;

  if(flag1==0)

    inc_hour();

  if(flag1==1)

    inc_hour1();

 

 }

 dis_buf[2] = dis_code[min / 10];  // 分十位

 dis_buf[3] = dis_code[min % 10];  // 分个位

}

void inc_hour()        //12小时制

{

     hour++;

      if(hour > 12)

     {

      flag2=~flag2;

      hour = 1;

     }

     if(hour > 9)

      dis_buf[0] = dis_code[hour / 10];  // 时十位

     else

      dis_buf[0] = 0x00;                // 当小时的十位为0时不显示

     dis_buf[1] = dis_code[hour % 10]; // 时个位

     if(flag2)

        dis_buf[7] =  0x77;           // 显示 A 表示上午

     else

        dis_buf[7] =  0x7f;          // 显示 B 表示下午

void inc_hour1()                  //24小时制时间

{  

 hour++;

 if(hour >23)

 {

  hour = 0;

 }

 if(hour > 9)

  dis_buf[0] = dis_code[hour / 10];   // 时十位

 else

  dis_buf[0] = 0x00;                 // 当小时的十位为0时不显示

 dis_buf[1] = dis_code[hour % 10];  // 时个位

}  

void delayms(unsigned char ms)

// 延时子程序

{     

 unsigned char i;

 while(ms--)

 {

  for(i = 0; i < 120; i++);

 }

}

更多相关推荐:
数字电子技术课程设计报告

吉林建筑大学电气与电子信息工程学院数字电子技术课程设计报告设计题目:数字钟的电路设计专业班级:电气112班学生姓名:学号:指导教师:设计时间:20XX.06.17-20XX.06.28数字钟的电路设计报告一、设…

数电课程设计报告

数电课程设计说明题目数字电子钟的设计部班级名号书系专业姓学指导教师起止日期摘要这次课程设计采用的课题是数字电子钟的设计数字钟是一种用数字电路技术实现时分秒计时的装置与机械式始终相比具有更高的准确性和直观性且无机...

数字电子钟课程设计报告

数字电子钟课程设计报告姓名学号学院电子与信息工程学院班级自动化目录一引言3二方案论证选择421设计目的422设计要求423系统框图4三电路仿真与设计531所需芯片及芯片管脚图532时分秒显示电路模块设计833校...

数字电子技术课程设计报告

南京航空航天大学数字电路课程设计之数字钟作品名称数字钟所属学院管理单位作者联系电话电子邮件指导教师时间数字电子技术课程设计报告一设计目的数字钟是一种用数字电路技术实现时分秒计时的装置与机械式时钟相比具有更高的准...

数字电子技术课程设计报告

课程设计课程名称数字电子技术课程设计题目名称四人智力竞赛抢答器学生学院专业班级学号学生姓名指导教师200年月日1目录一设计题目3二设计任务和要求31设计任务32设计要求3三原理电路31以锁存器为中心的编码显示电...

数字电子钟课程设计报告-数电

华东交通大学理工学院课程设计报告书所属课程名称数字电子技术课程设计题目数字电子钟课程设计分院电信分院专业班级10电信2班学号20xx0210410201学生姓名陈晓娟指导教师徐涢基2012年12月18日目录第1...

数字电子技术课程设计报告(数字钟)

目录一设计目的1二实现功能1三制作过程1四原理框图341数字钟构成342设计脉冲源443设计整形电路544设计分频器545实际计数器646译码驱动器电路的设计747校时电路848整点报时电路949绘制总体电路图...

西安邮电大学数字电路课程设计实验报告多路彩灯

西安邮电学院数字电路课程设计报告书多路彩灯控制器系部名称学生姓名专业名称班级实习时间一实验目的根据知识掌握情况和兴趣选择题目给出功能设计方案插接调试电路完成要求的任务达到巩固和应用电子技术基础和数字电路与逻辑设...

课程设计报告数字钟

湖北民族学院信息工程学院课程设计报告书题目多功能数字钟课程电子线路课程设计专业电子信息科学与技术班级0310411学号031041132学生姓名杭晓慧指导教师杨庆20xx年12月8日1信息工程学院课程设计任务书...

数 字 电 路 课 程 设 计 报 告

数字电路课程设计报告课题名称:篮球竞赛30秒计时器姓名:学号:专业班级:通信工程1指导教师:设计日期:20##年1月5日摘要:随着信息时代的到来,电子技术在社会生活中发挥着越来越重要的作用,运用模电和数电知识设…

数字电路课程设计报告

五邑大学数字电路课程设计报告题目出租车计价器院系信息学院专业电子信息工程学号学生姓名指导教师数字电路课程设计报告报告题目出租车计价器一题目的要求和意义随着社会的进步以及人们生活水平的日益提高都促使交通工具的不断...

多功能数字钟—数电课程设计报告

多功能数字钟电路设计与制作课程设计报告班级建筑设施智能技术二班姓名学号指导教师20xx年11月19日1目录一内容摘要3二设计内容及要求3三总设计原理3四单元电路的设计61基于NE555的秒方波发生器的设计52基...

数字电子课程设计报告(24篇)