首页 > 教学资源 > 课件
数字电路电子时钟课件设计
编辑:暖阳如梦 识别码:72-650230 课件 发布时间: 2023-08-22 12:20:56 来源:网络

第一篇:数字电路电子时钟课件设计

数字电路电子时钟课程设计

数字电路电子时钟课程设计

整个数字钟由时间计数电路、晶体振荡电路、校正电路、整点报时电路组成。其中以校正电路代替时间计数电路中的时、分、秒之间的进位,当校时电路处于正常输入信号时,时间计数电路正常计时,但当分校正时,其不会产生向时进位,而分与时的校位是分开的,而校正电路也是一个独立的电路。电路的信号输入由晶振电路产生,并输入各电路

方案论证:方案一数字电子钟由信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路等组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用555构成的振荡器加分频器来实现。

优点:数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。

方案二秒、分计数器为60进制计数器,小时计数器为24进制计数器。实现这两种模数的计数器采用中规模集成计数器74LS90构成。

优点:简单易懂,比较好调试。设计原理数字电子钟由信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路等组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用555构成的振荡器加分频器来实现。将标准秒脉冲信号送入“秒计数器”,该计数器采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计数器,可以实现一天24h的累计。译码显示电路将“时、分、秒”计数器的输出状态经七段显示译码器译码,通过六位LED显示器显示出来。整点报时电路是根据计时系统的输出状态产生一个脉冲信号,然后去触发音频发生器实现报时。校时电路是来对“时、分、秒”显示数字

数字电路电子时钟课程设计

进行校对调整。其数字电子钟系统框图如下:

时显示器分显示器秒显示器时译码器分译码器秒译码器整点报时时计数器分计数器秒计数器时钟校准振荡器分频器秒脉冲

图 1 数 字 电 子 钟 系 统 框 图 详细设计及实验步骤

4.1 秒脉冲信号发生器

秒脉冲信号发生器是数字电子钟的核心部分,它的精度和稳定度决定了数字钟的质量。由振荡器与分频器组合产生秒脉冲信号。

振荡器: 通常用555定时器与RC构成的多谐振荡器,经过调整输出1000Hz脉冲。

分频器: 分频器功能主要有两个,一是产生标准秒脉冲信号,一是提供功能扩展电路所需要的信号,选用三片74LS90进行级联,因为每片为1/10分频器,三片级联好获得1Hz标准秒脉冲。其电路图如下:

数字电路电子时钟课程设计

图2 秒 脉 冲 信 号 发 生 器

4.2 秒、分、时计时器电路设计

秒、分计数器为60进制计数器,小时计数器为24进制计数器。实现这两种模数的计数器采用中规模集成计数器74LS90构成。

60进制计数器:由74LS90构成的60进制计数器,将一片74LS90设计成10进制加法计数器,另一片设置6进制加法计数器。两片74LS90按反馈清零法串接而成。秒计数器的十位和个位,输出脉冲除用作自身清零外,同时还作为分计数器的输入脉冲CP1。下图电路即可作为秒计数器,也可作为分计数器。24进制计数器:由74LS90构成的二十进制计数器,将一片74LS90设计成4进制加法计数器,另一片设置2进制加法计数器。即个位计数状态为Qd Qc Qb Qa = 0100十位计数状态为Qd Qc Qb Qa = 0010时,要求计数器归零。通过把个位Qc、十位Qb相与后的信号送到个位、十位计数器的清零端,使计数器清零,从而构成24进制计数器。电路图如下:

数字电路电子时钟课程设计

图3 60 进 制 计 数 器

图4 24 进 制 计 数 器

4.3 译码显示电路

译码电路的功能是将秒、分、时计数器的输出代码进行翻译,变成相应的数字。用与驱动LED七段数码管的译码器常用的有74LS48。74LS48是BCD-7段译码器/驱动器,输出高电平有效,专用于驱动LED七段共阴极显示数码管。若将秒、分、时计数器的每位输出分别送到相应七段译吗管的输入端,便可以进行不同数字的显示。在译码管输出与数码管之间串联电阻R作为限流电阻。

数字电路电子时钟课程设计

图5 译码显示电路 校时电路

校时电路是数字钟不可缺少的部分,每当数字钟与实际时间不符时,需要根据标准时间进行校时。K1、K2分别是时校正、分校正开关。不校正时,K1、K2开关是闭和的。当校正时位时,需要把K1开关打开,然后用手拨动K3开关,来回拨动一次,就能使时位增加1,根据需要去拨动开关的次数,校正完毕后把K1开关闭上。校正分位时和校正时位的方法一样。其电路图如下:

数字电路电子时钟课程设计

图6 校 正 电 路 课程设计原理图

数字电路电子时钟课程设计

图8 设计结果与分析

数字电路电子时钟课程设计

整个数字钟由时间计数电路、晶体振荡电路、校正电路、整点报时电路组成。其中以校正电路代替时间计数电路中的时、分、秒之间的进位,当校时电路处于正常输入信号时,时间计数电路正常计时,但当分校正时,其不会产生向时进位,而分与时的校位是分开的,而校正电路也是一个独立的电路。电路的信号输入由晶振电路产生,并输入各电路。

把显示器与CD4511相连,第一次接时,数码管完全没有显示数字,检查后发现是数码管未接地而造成的,接地后发现还是无法正确显示数字,用万用表检测后,发现是因芯片引脚有些接触不良而造成的,所以确认芯片是否接触良好是非常重要的一件事。

六进制、十进制都没有什么大的问题,只是芯片引脚的老问题,只要重新插过芯片就可以解决了。但在六十进制时,按图接线后发现,显示器上的数字总是100进制的,而不是六十进制,检测后发现无论是线路的连通还是芯片的接触都没有问题。最后,在重对连线时发现是线路接错引脚造成的,改过之后,显示就正常了。

因上面程因引脚接错而造成错误,所以校正电路是完全按照仿真图所连的,在测试时,开始进行时校时时,没有出现问题,但当进行到分校时时,发现计数电路的秒电路开始乱跳出错。因此,电路一定是有地方出错了,在反复对照后,发现是因为在接入校正电路时忘了把秒十位和分个位之间的连线拿掉而造成的,因此,在接线时一定要注意把不要的多余的线拿掉

在整个设计的过程中,虽然遇到了一些问题,可是经过我们的努力都一一解决了,总的来说,整个设计还是比较成功的,实现了时钟模块、闹钟模块、显示模块以及控制模块的相互联接。心得体会

通过这次数字钟的课程设计与制作,让我知道设计电路的一些程序,也让我初步了解了关于数字钟的一般原理与设计理念,加深了对各种芯片逻辑功能的了解,更重要的是掌握了许多实际操作技能。由于数字钟包括组合逻辑电路和时序电路,通过它也让我进一步学习与掌握了各种组合逻辑电路与时序电路的原理与使用方法。这次课程设计时间只有五天,而安排在前期原理图设计上的时间就用

数字电路电子时钟课程设计

了两天,占总时间的40%,可见前期准备的重要性,前期的准备充分与否,直接关系到设计的成败。当我得知这次课程设计的任务是数字钟之后,马上就去图书馆查找相关资料,先对数字钟的设计有个总体的把握,顺利画出了它的总体设计框图。接下来就是对组成数字钟的各个功能模块的设计了,这一步是本次设计的重中之重,它需要考虑很多东西,像选择什么样的芯片,多大的电阻、电容等等。经过上网查找和与同学讨论确定了各个模块的电路,一个完整的数字钟的电路图已经形成。

设计方案经过老师肯定之后就是数字钟的制作与调试了,它占了总时间的一半,这是一个难点也是重点。在这个过程中吸取了许多教训,我在接下了的制作过程中就显得异常轻松,比较快的完成了这次任务。这就是好事多磨吧!

通过这次课程设计,让我对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手设计操作才会有深刻理解和达到学习的目的。

参考文献

数字电路电子时钟课程设计

[1].阎石.数字电子技术基础[M] ;高等教育出版社,1996-02 [2].余孟尝.数字电子技术基础简明教程[M] ;高等教育出版社,2008-03 [3]康华光.电子技术基础数字部分[J]; 高等教育出版社,1999-06 [4]童诗白.模拟电子技术基础第二版[J]; 北京高等教育出版社,2001-01 [5]陈永.555集成电路应用[J]; 电子工业出版社,2003-05 [6]阎石.数字电子技术基础(第5版)[M];高等教育出版社,2002-03 [7]郝鸿安.555集成电路使用电路集[M];上海科学普及出版社,2005-06 [8]孙余凯,吴鸣山,项绮明.555时基电路识图[J];电子工业出板社,2003-03 [9]卢结成.电子电路实验及应用课题设计[J].中国科学技术大学出版社,2007-09 [10]魏绍亮,陈新华.电子技术实践[M];机械工业出版社,1999-03

致 谢

数字电路电子时钟课程设计

在此次设计中,指导老师给了我很大的帮助,在我的设计中给予了很多的宝贵指导意见,才能使我的设计得以顺利完成,在此我向李敏君老师表示衷心的感谢。此外,本次设计的完成也离不开同学的热情帮忙。同时,在本次设计中不仅我学会了很多关于触发器的知识,同时也提高了我的实际动手能力,再次对关心帮助我的老师同学给予衷心的感谢。

第二篇:数字电子时钟设计

(电子技术课程)

设计说明书

数字电子时钟

起止日期:

2016 年

11月23日 至

2016年 11月 27 日

学生姓名

班级 学号

成绩

指导教师(签字)

交通工程学院(部)2016年

11月

29日

数字电子钟

设计一个数字电子钟,具体要求:

1、以24小时为一个计数周期;具有“时”、“分”、“秒”数字数码管显示电路;

2、具有校时功能;

3、整点前10秒,数字钟会自动报时,以示提醒;

4、设计+5V直流电源。(设计220V输入,+5V输出)

5、启动电路。

6、用PROTEUS画出电路原理图仿真成功再用数字电子技术实验箱验证。;

设计步骤及内容:

一、首先对本次设计所需要用到的器件的引脚及功能进行详细的了解 1、555定时器

“1”脚为公共接地端GND;“8”脚为正电源电压VCC;“2”脚是触发端;“4”脚为复位输出端; “7”脚为放电端;“6”脚位阈值端;“5”脚为控制电压输入端;“3”脚是输出端。2、74LS163

CEP、CET:计数使能输入端,高电平有效;CLK:时钟脉冲,上升沿触发;

MR:清零端,低电平有效;LOAD:并行置数使能端,低电平有效;RCO:进位信号输出端; D[0:3]:并行二进制数据输入端;Q[3:0]:计数状态输出端。

二、实验步骤

1、连接555定时器,产生1Hz方波。

首先将555定时器按照如图所示的接法连接起来,并根据555定时器电容充放电时间的计算确定各元件的取值。

电容充电时间T=0.7(R1+R2)C1 为使555定时器输入1Hz的方波,经计算各元件的取值为 R1=43K,R2=51K,C1=10u F,C2=0.01u F。3脚作为时钟脉冲的输出连接到各个计数器的CLK。

2、时钟电路的连接

本次设计使用的是74LS163芯片,因为它是16进制计数器,所以需要在控制端加上适当的门电路使其构成十进制计数器,将计数器按照如图所示的方式连接起来。

a、秒各位

将输出端的Q3、Q1用与门(74LS08)连接起来并输入到清零端MR,其目的是为了构成十进制,当计数器计数到9时,与门U1打开,经过非门U1A输出低电平使得MR在下一个脉冲上升沿时清零。

b、秒十位

与秒各位不同的是,秒十位的使能端是由各位Q3、Q1相与的电平控制的,秒十位的进位的条件是当各位为9时,在下一个脉冲的上升沿来临时进位。秒十位的清零需要等到个位为9且十位为5时,U2与U3经过U4输出高电平再经过U3A输出低电平,是的MR在下一个脉冲上升沿是清零。

c、分个位

分各位的构成原理与秒个位相似,不同的是控制端上的门电路换成了与非门U4(为了使之后方便连接门电路),分个位的使能信号由U3输入,清零条件为分个位为9,秒为59时清零,清零信号由U5A输出的低电平提供。

d、分十位

分十位的构成原理与秒十位相似,使能信号由U4输出的高电平提供,清零条件为分为59,秒为59,清零信号由U7A输出的低电平提供。

e、时

时个位的使能信号由U7提供,时十位的使能信号由U9提供。时个位有两个清零信号,一个是当它自身为9时,等到下一个时钟脉冲的上升沿时清零,另一个是当十位为2,个位为3时,十位和个位同时清零。用与非门U12将个位Q2和十位Q1相连,再将两个清零信号相与,实现清零工作。

完整的时钟电路如下图所示

3、校准电路

校准电路连线图如图所示,当开关打在右边时,U14B关闭不工作,U14C送出一个高电平信 6

号,等到秒对分的进位信号来临时和进位信号通过U15A送出一个低电平,使得U15B打开,又因为U15B接入了分个位的使能端,所以相当于开关打在右边时校准电路成为分个位的使能信号进位信号;开关打在左边时,U14C关闭不工作,U14B送出一个高电平信号,然后与秒脉冲信号通过U14D送出一个低电平接入分个位的使能端,所以相当于开关打在左边时,分个位接收了一个秒脉冲信号,使得它能像秒钟一样计时并且能向十位进位,就相当于校准功能,当分钟跳到你想要的时间时把开关打到右边(此时时钟电路照常工作)从你调整好的时间继续计数,达到校准的目的。(时的校准电路与分的校准电路一样)

但是直接把校准电路这样连入时钟电路会出现一些问题,就是在校准的时候分会出现16进制,所以就需要在电路中加入反馈,将它控制到10进制,具体的反馈连接方式如图所示(不能接在MR端,不然会使电路出现问题)时钟电路与校准电路如图所示 将开关打到左边进行校准:

完成之后将开关打到右边继续计数:

4、报时电路

报时电路使用的是74HC30芯片,它是一个8输入与非门芯片,只有当所有输入都为1时输出为0,使得喇叭能够正常工作(喇叭一端接高电平一端接低电平),因为是整点报时,所以秒个位就不用接入芯片,只需在多余的两个引脚接入电源就可以实现在59分50秒到59秒的报时,具体接法如下图所示

整个可校准可报时的数字电路如图所示

三、心得体会

本次数字电子课程设计是我觉得收获非常大的一次实习,而这次课程设计给我们提供了一个应用自己所学知识来设计作品的平台。

在本次课程设计中,我更加熟悉Proteus软件的操作了,同时对74LS163、74LS161、74HC30、555等芯片加深了了解,和对它们的使用,对于数字、模拟电路的综合运用有了更深一步理解,为以后的电路分析和设计奠定了一定的基础。

本次课程设计很遗憾没能选择最有挑战性的课题来做,因为基础知识不够扎实,做数字电子时钟也是费了很大劲。

这次设计我主要觉得有两个难点:

一、从一开始没选择十进制计数器来做,所以使设计的电路看起来很复杂,并且进位需要考虑的很周全,越高位必要条件越多,所以用了许多门电路;

二、校准电路直接连入电路会产生十六进制,所以需要加反馈,在最开始不太理解反馈的意思,又去翻了数电书还问了老师很多次,接了很多遍才将反馈接出来。

但是最后成功了看着自己能把理论知识运用到实际,心里还是非常开心的,在做课题的这几天学会了很多,对仿真也产生了浓厚的兴趣,想自己试着在课余时间再做做几个课题。

第三篇:数字电路课程设计数字时钟实现

应用科技学院

《电子技术课程设计报告》

设计题目:数字钟的设计与制作

专业班级:13级《物联网工程》2班 姓名:白雪 王贞 张莹 学号:068 108 131 指导老师:刘烨

时间:2015年5月15日~ 2015年 5 月30日 地点:四教4414实验室

海南大学儋州校区应用科技学院

摘要:

数字时钟是一种用数字电路技术实现秒﹑分﹑时的计时装置,与传统的机械钟相比,它具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因而得到了广泛的应用。小到人们的日常生活中的电子手表,大到车站﹑机场等公共场所的大型数显电子钟。数字时钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。

本课程设计要用通过简单的逻辑芯片实现数字时钟。要点在于用555芯片连接输出为一秒的多谐振荡器用于时钟的秒脉冲,用14位二进制计数器CC4060芯片、7双BCD同步加计数器CD4518芯片、十进制加计数器/7段译码器CD4033芯片等连接成60和12进制的计数器,再通过七段数码管显示,构成了简单数字时钟。关键词:数字时钟;555芯片;计数器;数码管

海南大学儋州校区应用科技学院

1设计目的................................................................................................................................4 1.1设计指标.........................................................................................................................4 2课程设计任务及要求............................................................................................................4 2.1 设计任务........................................................................................................................4 2.2 设计要求........................................................................................................................4 3系统设计................................................................................................................................4 3.1 设计思路........................................................................................................................4 3.2 系统设计........................................................................................................................5 3.2.1 原理图及说明.......................................................................................................5 3.2.2 具体设计.................................................................................................................6

3.2.2.1.小时计时电路...............................................................................................6 3.2.2.2.分钟计时电路...............................................................................................6 3.2.2.3.秒钟计时电路...............................................................................................6 3.2.2.4.手动时间校准电路的设计...........................................................................6 3.2.2.5.光敏电阻的设计...........................................................................................6 主要元器件的介绍...............................................................................................................7 4.1 40161------4位二进制同步计数器(有预置端,异步清除).....................................7 4.2 CD40106..........................................................................................................................7 4.3 CD4009............................................................................................................................8 5 电路板的安装与测试...........................................................................................................8

海南大学儋州校区应用科技学院

1设计目的数字电子钟是一种用数字显示秒﹑分﹑时的记时装置,与传统的机械钟相比,他具有走时准确﹑显示直观﹑无机械传动装置等优点,因而得到了广泛的应用:小到人们的日常生活中的电子手表,大到车站﹑机场等公共场所的大型数显电子钟。

我们此次设计数字钟就是为了了解数字钟的原理,从而学会制作数字钟。而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。且由于数字钟包括组合逻辑电路和时叙电路。通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。

1.1设计指标

1.时间以12小时为一个周期; 2.显示时、分、秒; 3.具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;

2课程设计任务及要求

2.1 设计任务

1、设计一个有“时”,“分”,“秒”(11小时59分59秒)显示且有校时功能的数字时钟钟;

2、用中小规模集成电路组成数字时钟。

2.2 设计要求

1.用555定时器设计一个秒钟脉冲发生器,输入1HZ的时钟;(对已有1kHz频率时钟脉冲进行分频);

2.能显示时、分、秒,12小时制; 3.设计晶体震荡电路来输入时钟脉冲;

4.用双BCD同步加计数器CD4518芯片设计一个分秒钟计数器,即六十进制计数器.;

5.用十进制加计数器/7段译码器CD4033芯片设计一个12小时计数器, 6.译码显示电路显示时间。

3系统设计

3.1 设计思路

数字电子钟由信号发生器、“时、分、秒”计数器、LED数码管、校时电路、整点报时电路等组成。工作原理为时钟源用以产生稳定的脉冲信号,作为数字种的时间基准,要求震荡频率为1HZ,为标准秒脉冲。将标准秒脉冲信号送入“秒计数器”,该计数器采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每 累计60分,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用12进制计数器,可以实现12小时的累计。LED数码管将“时、分、秒”计数器的输出状态显示。校时电路是来对“时、分、秒”显示数字进行校对调整。

海南大学儋州校区应用科技学院

本设计使用芯片数最少、计时准确、动态显示的节电工作方式(耗电量仅为静态显示模式的1.8%)、调试方便、时间校准方便。电路中的振荡器XT为目前多数石英晶体电子表中使用的频率为215=32768HZ的石英晶体,经IC(2CC4060)组成的14级2分频和IC3A(CD4518)组成的一级2分频后可得到1HZ的“秒”脉冲信号。用6个40161分别控制6个数码管,用逻辑门电路选择各个数码管的最大数字,比如说输出9,就要对应的输入二进制数1001,输出3对应0011,1对应 0001。逻辑门电路选择好最大数,就接入下一个40161的 CLK 端,来进位。MR端要接入与非门和40106之间,读取最大数。我们设计的是实现0~9,0~5,0~1,0~2的进位方式。从秒开始,0~59,分0~59,时0~11.3.2 系统设计

3.2.1 原理图及说明

时LED数码管分LED 数码管秒LED数码管时计数(十二进制)分计数(六十进制)秒计数(六十进制)时校准分校准晶体振荡器分频器(1)电路原理框图

(2)电路原理图

海南大学儋州校区应用科技学院

用555电路构成的1KHz多谐振荡器,调节电阻R3可以改变输出信号频率。74LS160是二,五,十进制同步加法器,用三片74LS90构成三级十分频器,将1KHz矩形波分频得到1Hz基准秒计时信号。由于74LS160是十进制计数器,分别将个位接成十进制计数器,十位接成六进制计数器,分别将个位的RCO输出端接十位的9脚端,就构成60进制计数器,用两个相同的60进制计数器分别做作为秒,分计时,并在个位和十位输出端接上数码显示管显示小时计数器直接采用整体反馈清零法构成24进制计数器。工作原理:振荡电路产生的1KHZ脉冲信号经三级十分频电路分频后产生的1HZ脉冲信号输入74LS90N连成的60进制秒计数器,再由秒计数器每60秒进位输出给60进制分钟计数器,分钟计数器满60后产生进位信号输入给24进制小时计数器,从而实现12小时制电子钟的功能。

3.2.2 具体设计

3.2.2.1.小时计时电路

小时计时电路由两块4033B和4081芯片7段译码器组成12进制计数电路。该电路译码器能识别数字00到11的计数,当接收到从“分”传来信号到芯片4033的第1个管脚时,使得在小时的计数模块进行加1,每接收到一次信号,即进行一次计数,计一次为一小时,同时将信号反馈回“分”,使得将计数清零。即可可以将小时从“00”到“11”后,在继续计时时,计数器计数将会被置回“00”。使整个计数器在小时的计数模块成为从“00”到“11”到清零循环回“00”到“11”这样的12进制的12个稳定状态的计时方法。3.2.2.2.分钟计时电路

与小时计时模块相比,分钟计时模块相对简单些。它的电路原理是由于两块4033B芯片组成的60进制的分钟计数方式,该译码器电路能识别信号59,整个计数计时方式是从“00”到“01”“02”.....“59”在到“00”的共60个稳定状态的自动连续循环模式。3.2.2.3.秒钟计时电路

秒钟的计数又有些相同与不同。它同样是由4033B两块芯片进行构成60进制计数。该译码器识别信号至59,然后清零循环计数。计数方式与分钟计数方式一样。但除了4033B芯片外,外加了4060和4518两块芯片。外加了两块芯片使得在秒钟计数模块有了自动的计数方法。而不是通过外来校准不停的进行调整计数。

3.2.2.4.手动时间校准电路的设计

S1和S2分别为“小时”与“分”的手动校准电路。S1按动一次,在小时计时部位计数加1,S2按动一次,在分钟计时计数数码管显示上显示加1,。滤波电路C3、R10和C4、R13分别用来吸收S1和S2的动作产生的电压抖动。二极管D1、D2分别为“小时”与“分”校准电路与相邻下一级计数器“清零”端R之间的单向隔离文件。R11、R12为手动校准电路的限流范围。3.2.2.5.光敏电阻的设计

光敏电阻R1~R6分别为数码管DS1~DS6夜间工作在节电模式时的亮度自动控制电路。光敏电阻可选用MG41-22或MG45-

12、或5606、6106型(亮电阻≤2KΩ,暗电阻≥900KΩ)。每只数码管的公共端第3(8)脚通过一光敏电阻串联晶体开关管9013接地。当夜晚室内光线较暗时,数码管自动降低亮度。数码管DS1~DS6采用超高亮度的数码管5011型,这种LED数码管耗电为普通数码管的十分之一,每个段码的驱动电流仅为1mA,就可以发出普通数码管20mA

海南大学儋州校区应用科技学院

工作电流时相同的亮度。当其工作电流达20mA时,发出光亮足以保证在室外阳光下正常显示。该控制电路可使数码管显示的供电电流降低到原来的1/30,即为10~15 mA的水平。开关管Q1~Q3选用9013(40V、0.5A、0.625W、低频)可满足控制两个数码管阴极电流通断的要求。本设计还充分利用芯片CD4033的“零”数字消隐功能,即当十位上海数字为零时,该数码管不亮。例如,当时间为9时8分5秒,不是显示“09”时“08”分“05”秒,而是显示“9”时“8”分“5”秒,该设计方案可使数码管显示的供电电流降低到原来的1.8%,即为5~9 mA的水平,可大大降低电源的能耗。主要元器件的介绍

4.1 40161------4位二进制同步计数器(有预置端,异步清除)

40161是4位可编程计数器,复位采用异步方式,当CLEAR为低电平时,使四个输出端均置为低电平,而与CLOCK、/LOAD或PE、TE输入的状态无关,/LOAD为低电平时,计数器无效,使输出端在下一时钟脉冲与设置的数据一致,并与PE、TE输入端的状态无关。

N位同步级联计数器可由超前进位电路实现,不需要外加控制,此功能由两个计数控制输入端和进位输出端完成。PE、TE输入端均为高电平时,计数有效,当计数超过“15”时,进位输出端CARRY OUT(CO)即产生一正向输出脉冲,其脉冲宽度约等于Q1输出正向宽度,此正向溢出进位脉冲可使下一级联电路有效,时钟无论为高电平或低电平,均可实现PE或TE输出的逻辑转换。

4.2 CD40106 CD40106由六个施密特触发器电路组成。每个电路均为在两输入端具有施密特触发器功能的反相器。触发器在信号的上升和下降沿的不同点开、关。上升电压(V T+)和下降电压(V T-)之差定义为滞后电压。它的2 4 6 8 10 12引脚是数据输出端,1 3 5 9 11 13是数据输入端,14是电源正,7接地。

CD4016引脚图

海南大学儋州校区应用科技学院

4.3 CD4009 CD4009是十六进制的CMOS缓冲器/变换器 电路板的安装与测试

为了方便检测,电路有6位数码管安装在CD4033的上方,分别显示出时“00~11”分“00~59”秒“00~59”的时钟显示。根据电路的设计特点,在安装过程中,基于测试同时进行。在安装测试顺序是①1HZ脉冲信号的产生电路,运用逻辑笔测试芯片IC34的Q0端的“1HZ”的脉冲输出信号;②“秒钟”计数/译码/显示电路,显示0秒钟~59秒钟,运用逻辑笔测试芯片IC5A第3期的“满60秒进一”的进位脉冲输出信号;③“分”钟计数/译码/显示电路,显示0分钟~59分钟,运用逻辑笔测试芯片IC58第四脚的“满60进一”的进位脉冲输出信号;④“小时”计数/译码/显示电路,显示0小时~12小时,运用逻辑笔测试芯片IC5C第10脚的“清零”脉冲输出信号;⑤分别按动开关S1、S2,测试时间校准电路的功能及可靠性;⑥用厚纸片遮蔽敏光电阻的上方,观测数码管亮度显示接受控制前后的响应情况。6个单元电路组装合格后,电路可以显示12小时内的任一时间。时间校准电路组装完成后,可以校准当前时间,并验证一昼夜

海南大学儋州校区应用科技学院

24小时的计时误差是否在一定范围内;然后在一定电源内测量整机最大工作电流是否也在一定范围之间。

海南大学儋州校区应用科技学院

海南大学儋州校区应用科技学院

海南大学儋州校区应用科技学院

第四篇:EDA嵌入式电子时钟设计

目 录

摘要…………………………………………………………...………………………1 第一章 前言..………………………………………………………………………1 第二章 系统设计.…………………………………………………...……….……2 2.1 题目标及总体方案…………………………………………………...………..2

2.2 元器件的选择和连线……………………………………………………...…..2

2.3 程序和芯片的初始化……………………………………………………...…..3

2.4 构建功能模块………………………………..…………………………….…..4 第三章 实验(测试)结果及讨论……….……………………………….…….9

3.1 ads1.2 软件的编译连接和运行………………………………………….....9

3.2 protues 7.4仿真软件的联合调试……………………………………….….10 第四章 结论………………………………………………………………………11 心得体会………………………………………………………………………...…12 参考文献………………………………………………………………………13 附 录………………………………………………………………………14

摘要

近年来,随着计算机技术及集成电路技术的发展,嵌入式技术日渐普及,在通讯、网络、工控、医疗、电子等领域发挥着越来越重要的作用。嵌入式系统无疑成为当前最热门最有发展前途的IT应用领域之一。

实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。随着集成电路技术的不断发展,RTC器件的新品也不断推出。这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。

summary In recent years, along with the computer technology and integrated circuit technology development, the embedded technology, growing popularity in communication, network, industrial, medical and electronic field plays a more and more important role.The embedded system has become the most popular most promising IT application field of one.Real time clock(RTC)device is a kind of can provide calendar/clock, data storage function application-specific integrated circuit, commonly used all kinds of computer system clock signal source and the parameters set store circuit.With timing accurate RTC, low power consumption, and small volume and other characteristics, especially suitable for all kinds of embedded system loyal record in the timing of events and related information, especially in communication engineering, power automation, industry control, high automation field of unmanned their duties environment.Along with the development of the integrated circuit technology, the new product of RTC device also has introduced.These new product not only has accurate RTC, and high capacity memory, temperature sensor and A/D data acquisition channel etc, has become the collection of data collection and storage, RTC in an integrated function device, especially suitable for to micro controller as the core of the embedded system.第一章 前 言

通常我们常用的LCD显示模块,有两种,一是带有驱动电路的LCD显示模块,一是不带驱动电路的LCD显示屏。大部分ARM处理器中都集成了LCD的控制器,所以,针对ARM芯片,一般不使用带驱动电路的LCD显示模块。

S3C44B0X 中具有内置的LCD 控制器,它能将显示缓存(在SDRAM存储器中)中的LCD图像数据传输到外部的LCD驱动电路上的逻辑功能。它支持单色、4级、16级灰度LCD显示,以及256彩色LCD显示。在显示灰度时,它采用时间抖动算法(time-based dithering algorithm)和帧率控制(Frame Rate Control)方法,在显示彩色时,它采用RGB的格式,即RED、GREEN、BLUE,三色混合调色。通过软件编程,可以实现233或332的RGB调色的格式。对于不同尺寸的LCD显示器,它们会有不同的垂直和水平象素点、不同的数据宽度、不同的接口时间及刷新率,通过对LCD 控制器中的相应寄存器写入不同的值,来配置不同的LCD 显示板。

实时时钟(RTC)器件是一种能提供日历/时钟、数据存储等功能的专用集成电路,常用作各种计算机系统的时钟信号源和参数设置存储电路。RTC具有计时准确、耗电低和体积小等特点,特别适用于在各种嵌入式系统忠记录事件发生的时间和相关信息,尤其是在通信工程、电力自动化、工业控制等自动化程度较高领域的无人职守环境。随着集成电路技术的不断发展,RTC器件的新品也不断推出。这些新品不仅具有准确的RTC,还有大容量的存储器、温度传感器和A/D数据采集通道等,已成为集RTC、数据采集和存储于一体的综合功能器件,特别适用于以微控制器为核心的嵌入式系统。

第二章 系统设计

2.1课题目标及总体方案

利用lpc 2104芯片和LCD显示器,通过汇编和C语言编译,完成实时时钟的显示。

2.2元器件的选择和连线

选用嵌入式arm 7系列的lpc 2104芯片和Lcd pg160128a显示器:

图 2.2.2

图 2.2.1

根据使用的需要配置端口连线:

图 2.2.3 图 2.2.4

2.3程序和芯片的初始化

程序中包括:Lcd的初始化:

中断向量的初始化:

RTC的初始化:

芯片Lpc2104 基础配置: 中间使用了上接正电源配合 电容的交流特性,为芯片提供电 源和复位功能。

其他引脚根据芯片要求配置 连接。

图 2.3.1 2.4构建功能模块

LCD重要的函数实现画圆和画直线。以下为画圆函数:

void Shouw_Cricle()// 整 点 { Set_Color(GUI_YELLOW);Fill_Circle(160, 30,2);// 12点(x,y,r)Fill_Circle(135, 35,2);// 11 点(x,y,r)Fill_Circle(115, 55,2);// 10 点(x,y,r)Fill_Circle(110, 80,2);// 9 点(x,y,r)Fill_Circle(115, 105,2);// 8 点(x,y,r)Fill_Circle(135, 125,2);// 7 点(x,y,r)Fill_Circle(160, 130,2);// 6 点(x,y,r)Fill_Circle(185, 125,2);// 5 点(x,y,r)Fill_Circle(205, 105,2);// 4 点(x,y,r)Fill_Circle(210, 80,2);// 3 点(x,y,r)Fill_Circle(205, 55,2);// 2点(x,y,r)

Fill_Circle(185, 35,2);// 1点(x,y,r)}

该算法是通过X变量的自增,补偿1 修正正方形控制Y变量自减,找到距中心恒定距离的点,其中rs=45,X自0加1增至45。和原点坐标运算,可以在第一象限找到一点,再通过折叠对称找到其他象限的三个点,通过画点函数描绘出。再画他的45度镜像就好了。

画线函数:void line(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2,unsigned char draw)以中心的坐标为起点,使用while函数与指针最外圈的点比较,不断延长直至相等,所以事先计算出时针,分针和秒针三个同心圆最外圈点的坐标,以便带入函数。也同圆类似,要考虑不同象限点的情况,根据不同的位置带参数到画点函数中描绘。

2.4.1画指针模块

int SpaceXS[61]={160,165,170,175,180,185, 189,193,197,201,205,206,207,208,209,210, 209,208,207,206,205, 201,197,193,189,185, 180,175,170,165,160, 155,150,145,140,135, 131,127,123,119,115, 114,113,112,111,110, 111,112,113,114,115, 119,123,127,131,135, 140,145,150,155,160, }, SpaceYS[61]={30,31,32,33,34,35,39,43,47,51, 55,60,65,70,75, 80,85,90,95,100, 105,109,113,117,121, 125,126,127,128,129,130,129,128,127,126, 125,121,117,113,109, 105,100,95,90,85, 80,75,70,65,60, 55,51,47,43,39, 35,34,33,32,31,30}, SpaceXM[61]={160,164,168,172,176,180,183,186,189,192,195,196,197,198,199,200,199,198,197,196,195,192,189,186,183,180,176,172,168,164, 160,156,152,148,144,140,137,134,131,128, 125,124,123,122,121,120,121,122,123,124,125,128,131,134,137,140,144,148,152,156, 160 }, SpaceYM[61]={40,41,42,43,44,45,48,51,54,57,60,64,68,72,76,80,84,88,92,96, 100,103,106,109,112,115,116,117,118,119, 120,119,118,117,116,115,112,109,106,103, 100,96,92,88,84,80,76,72,68,64, 60,57,54,51,48,45,44,43,42,41, 40},SpaceXH[13]={160,175,185,190,185,175,160,145,135,130,135,145,160}, SpaceYH[13]={50,55,65,80,95,105,110,105,95,80,65,55,50},2.4.2显示模块

void Shows(){ show(sec);Set_Color(GUI_GRAY);//擦除上一秒的 Draw_Line(x_line,y_line,*Placex,*Placey);Placex=Placex+1;Placey=Placey+1;Set_Color(GUI_YELLOW);//显示下一秒的 Draw_Line(x_line,y_line,*Placex,*Placey);Set_Color(GUI_RED);//显示下一分的 Draw_Line(x_line,y_line,*Placexm,*Placeym);Set_Color(GUI_GREEN);//显示下一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh);if(Placex==&SpaceXS[60]&&Placey==&SpaceYS[60]){ Placex=&SpaceXS[0];Placey=&SpaceYS[0];} } 小时,分显示类似。

2.4.3计时模块

oid Task_2(void *pdata){

for(;;)

{ Show_Color();Shouw_Cricle();

Set_Color(GUI_RED);sec = 0;Set_Color(GUI_YELLOW);//显示

Draw_Line(x_line,y_line,*Placex,*Placey);Display_Time(130, 160);//时间

do { Delay(1200);sec++;Shows();if(sec >= 60)

{ sec = 0;min++;Showm();if(min >= 60){ min = 0;hour++;Showh();if(hour >= 23)

} { hour = 0;day++;if(day >=32){

day = 1;mon++;if(mon >= 13){

}

mon = 1;yea1++;} } } }

Display_Time(130, 160);//时间 日期 }while(1);} 第三章 实验(测试)结果及讨论

3.1 ads1.2 软件的编译,连接和运行

构建完整的程序:

添加头文件,中断处理汇编程序段,初始化函数和主函数:

编译 所有的文件:

图 3.1.1

编译器提示:成功生成所需Hex文件,将得到的Hex文件导入仿真芯片 Lpc 2104中,观察实时时钟。

3.2 protues 7.4仿真软件的联合调试

为Lpc 2104 芯片选择Hex文件路径:

图 3.2.1

连接芯片与LCD端口,运行程序,观察效果。显示如下时钟界面:

动态显示当前的时间,包括:年、月、日、时、分、秒,时针、分针和秒针为动态实时指示当前的时间。

图 3.2.2

第四章 结 论

综合效果图:

图 4.1

以上为protues部分设计的,ads程序见附录。

心得体会

通过短短一个星期的嵌入式课程设计,我获益匪浅。在课程设计的过程中,我发现我们专业在半个学期里所修的嵌入式课程的知识点都仅仅是基础中的基础,要完成老师交给我们的任务还是有一些距离的,于是我自发上网搜集了许多嵌入式的资料,在完成方案设计和程序修改调试以后,就可初步实现本课题课程设计的要求。但当我们将程序烧入实验箱后,发现最初的版本并不完美,存在许多使用上的不方便与可以进一步改进的地方,譬如功能不全、外观粗糙……

通过这次课设,我发现了自己在课本知识上掌握的不足,同时把以前所学过的知识重新温故,巩固了所学的知识。我觉得这次的成功很大部分取决与同学的帮助与冷静、耐心和细心。团队合作可以增强我们的创新能力与加大我们的完成速度,而程序的修改,调试,编译则离不开冷静、耐心和细心等心理素质。另外,这次课设的完满结束,给了我们日后毕业设计宝贵的经验,使我们受益匪浅。

参考文献

[1] 谢自美,电子线路设计、实验、测试,华中理工大学出版社,2003。[2] 宋春荣,通用集成电路速查手册,山东科学技术出版社,1995。[3] Arnold Berger,嵌入式系统设计,吕骏 译,北京:电子工业出版社, 2002 [4] 桑楠.嵌入式系统原理及应用开发技术,北京:北京航空航天大学出版社, 2002

附 录

源程序:

#include “..incconfig.h” #define STACKSIZE 256 #define x_line 160 #define y_line 80 OS_STK_DATA stk;extern GUI_FONT CHINESE_FONT12;extern GUI_FONT CHINESE_FONT16;extern GUI_FONT GUI_Font8x16;OS_EVENT * Send_LCD_Sem;OS_EVENT *Key_Mbox;

I8 Hour[3],Min[3],Sec[3];I8 hour = 0, min = 0, sec = 0,ms;I8 YEA1[3],YEA2[3],MON[3],DAY[3];int yea1 = 20,yea2=11, mon = 6, day = 23;I8 XH0[3],XH1[3],XH2[3],XH3[3];I8 XH4[3],XH5[3],XH6[3],XH7[3];char xh0=01,xh1=62,xh2=31,xh3=03;char xh4=32,xh5=36,xh6=02,xh7=12;//int TimeCount = 0;int SpaceXS[61]={160,165,170,175,180,185,189,193,197,201,205, 206,207,208,209,210, 209,208,207,206,205, 201,197,193,189,185, 180,175,170,165,160, 155,150,145,140,135, 131,127,123,119,115,114,113,112,111,110, 111,112,113,114,115, 119,123,127,131,135, 140,145,150,155,160, }, SpaceYS[61]={30,31,32,33,34,35,39,43,47,51, 55,60,65,70,75, 80,85,90,95,100, 105,109,113,117,121, 125,126,127,128,129, 130,129,128,127,126,125,121,117,113,109, 105,100,95,90,85, 80,75,70,65,60, 55,51,47,43,39, 35,34,33,32,31,30}, SpaceXM[61]={160,164,168,172,176,180,183,186,189,192,195,196,197,198,199,200,199,198,197,196, 195,192,189,186,183,180,176,172,168,164, 160,156,152,148,144,140,137,134,131,128, 125,124,123,122,121,120,121,122,123,124, 125,128,131,134,137,140,144,148,152,156, 160 }, SpaceYM[61]={40,41,42,43,44,45,48,51,54,57,60,64,68,72,76,80,84,88,92,96, 100,103,106,109,112,115,116,117,118,119, 120,119,118,117,116,115,112,109,106,103, 100,96,92,88,84,80,76,72,68,64, 60,57,54,51,48,45,44,43,42,41,40 },SpaceXH[13]={160,175,185,190,185,175,160,145,135,130,135,145,160}, SpaceYH[13]={50,55,65,80,95,105,110,105,95,80,65,55,50}, *Placex=&SpaceXS[0],*Placey=&SpaceYS[0],*Placexm=&SpaceXM

[0],*Placeym=&SpaceYM[0], *Placexh=&SpaceXH[0],*Placeyh=&SpaceYH[0];void Display_xh1(char xx1,char yy1);void Display_xh2(char xx2,char yy2);void Display_xh3(char xx3,char yy3);

void Shows(){ show(sec);Set_Color(GUI_GRAY);//擦除上一秒的 Draw_Line(x_line,y_line,*Placex,*Placey);Placex=Placex+1;Placey=Placey+1;Set_Color(GUI_YELLOW);//显示下一秒的 Draw_Line(x_line,y_line,*Placex,*Placey);

Set_Color(GUI_RED);//显示下一分的

Draw_Line(x_line,y_line,*Placexm,*Placeym);Set_Color(GUI_GREEN);//显示下一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh);if(Placex==&SpaceXS[60]&&Placey==&SpaceYS[60]){ Placex=&SpaceXS[0];Placey=&SpaceYS[0];} }

void Showm(){

Set_Color(GUI_GRAY);//擦除上一分的 Draw_Line(x_line,y_line,*Placexm,*Placeym);Placexm=Placexm+1;

Placeym=Placeym+1;Set_Color(GUI_RED);//显示下一分的 Draw_Line(x_line,y_line,*Placexm,*Placeym);Set_Color(GUI_GREEN);//显示下一时的

Draw_Line(x_line,y_line,*Placexh,*Placeyh);

}

void Showh(){

Set_Color(GUI_GRAY);//擦除上一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh);Placexh=Placexh+1;Placeyh=Placeyh+1;Set_Color(GUI_GREEN);//显示下一时的 Draw_Line(x_line,y_line,*Placexh,*Placeyh);if(Placexm==&SpaceXM[60]&&Placeym==&SpaceYM[60]){

} Placexm=&SpaceXM[0];Placeym=&SpaceYM[0];

if(Placexh==&SpaceXH[12]&&Placeyh==&SpaceYH[12]){ Placexh=&SpaceXH[0];

} } Placeyh=&SpaceYH[0];void Shouw_Cricle()// 整 点 { Set_Color(GUI_YELLOW);Fill_Circle(160, 30,2);// 12点(x,y,r)Fill_Circle(135, 35,2);// 11 点(x,y,r)Fill_Circle(115, 55,2);// 10 点(x,y,r)Fill_Circle(110, 80,2);// 9 点(x,y,r)Fill_Circle(115, 105,2);// 8 点(x,y,r)Fill_Circle(135, 125,2);// 7 点(x,y,r)Fill_Circle(160, 130,2);// 6 点(x,y,r)Fill_Circle(185, 125,2);// 5 点(x,y,r)Fill_Circle(205, 105,2);// 4 点(x,y,r)Fill_Circle(210, 80,2);// 3 点(x,y,r)Fill_Circle(205, 55,2);// 2点(x,y,r)Fill_Circle(185, 35,2);// 1点(x,y,r)}

void Delay(int time);void ChangeForm(char Time[],char time){ Time[0] = time / 10 + 48;Time[1] = time % 10 + 48;Time[2] = '';} void Display_Time(char x,char y){ ChangeForm(Hour, hour);ChangeForm(Min, min);ChangeForm(Sec, sec);ChangeForm(MON, mon);ChangeForm(DAY, day);ChangeForm(YEA1, yea1);ChangeForm(YEA2, yea2);Disp_String(Hour,x,160);Disp_String(“:”,x + 16,160);Disp_String(Min,x + 24,160);Disp_String(“:”,x + 40,160);Disp_String(Sec,x + 48,160);Disp_String(YEA1,x , 180);Disp_String(YEA2,x +16,180);Disp_String(“,”,x + 32,180);Disp_String(MON,x + 40,180);Disp_String(“,”,x + 56,180);Disp_String(DAY,x + 64,180);/*分配各任务的堆栈容量 */ OS_STK Stack_Task_1[STACKSIZE];OS_STK Stack_Task_2[STACKSIZE*3];

void Task_3(I8 s){ I8 display;for(;;){

Delay(100);display++;Set_Color(GUI_RED);Display_xh1(5,180);if(display==1000)

} } /* { } display=0;函数说明 : GUI任务,优先级为9输出参数 : 无 */ void Task_2(void *pdata){ for(;;){ Show_Color();

Shouw_Cricle();

Set_Color(GUI_RED);sec = 0;Set_Color(GUI_YELLOW);//显示

Draw_Line(x_line,y_line,*Placex,*Placey);Display_Time(130, 160);//时间

do { Delay(1200);sec++;Shows();if(sec >= 60)

{ sec = 0;min++;

} Showm();if(min >= 60){ min = 0;hour++;Showh();if(hour >= 23){ hour = 0;day++;if(day >=32){ day = 1;mon++;if(mon >= 13){

} } } } }

Display_Time(130, 160);//时间 日期 }while(1);

mon = 1;yea1++;}

void Task_1(void *pdata){ Rtc_Tick_Init();//打开时钟节拍,让操作系统跑起来

OSTaskCreate(Task_2,(void *)0,(OS_STK *)&Stack_Task_2 [(STACKSIZE*3)(void

第五篇:基于51单片机电子时钟设计

基于51单片机的电子时钟设计

摘要

本电子时钟以STC89C52单片机作为主控芯片,采用DS12C887时钟芯片,使用1602液晶作为显示输出。该时钟走时精确,具有闹钟设置,以及可同时显示时间、日期等多种功能。本文将详细介绍该电子时钟涉及到的一些基本原理,从硬件和软件两方面进行分析。

【关键词】

STC89C52单片机

DS12C887时钟芯片

1602液晶

蜂鸣器

目录

一、绪论…………………………………………………………4

1.1 电子时钟功能…………………………………………1.2设计方案………………………………………………4

二、硬件设计……………………………………………………4

2.151

2.2 单片机部分设计………………………………4

USB供电电路设计………………………………5

2.3 串行通信电路设计………………………………6

2.4DS12C887时钟芯片电路的设计…………………6

2.51602LCD液晶屏显示电路设计………………7

2.6

蜂鸣器电路设计………………………………8

2.7

按键调整电路设计…………………………8

三、软件设计…………………………………………9

3.1 系统程序流程图设计…………………………9

3.2程序设计……………………………………11

四、心得体会………………………………………………22 参考文献……………………………………………………23

一、绪

1.1电子时钟功能

(1)在1602液晶上显示年、月、日、星期、时、分、秒,并且按秒实时更新显示。(2)具有闹铃设定即到时报警功能,报警响起时按任意键可取消报警。

(3)能够使用实验板上的按键随时调节各个参数,四个有效键分别为功能选择键、数值增大键、数值减小键和闹钟查看键。

(4)每次有键按下时,蜂鸣器都以短“滴”声报警。

(5)利用DS12C887自身掉电可继续走时的特性,该时钟可实现断电时间不停、再次上电时时间仍准确显示在液晶上的功能。

1.2设计方案

DS12C887时钟芯片+1602LCD液晶屏

DS12C887时钟芯片功能丰富、价格适中,能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部含有世纪寄存器,从而利用硬件电路解决“千年”问题。DS12C887中自带锂电池,外部掉电时,其内部时间信息还能保持10年之久。1602LCD液晶屏可以输出2行,每行显示16个字符。1602LCD液晶屏显示清晰且不会闪烁,由于液晶屏是数字式的,因此和单片机系统的接口简单,操作方便。

以STC89C52为主控芯片,DS12C887为时钟芯片,1602LCD液晶屏作为显示器。程序控制DS12C887时钟芯片实现小时、分、秒和年、月、日的计时,并在1602LCD液晶屏上显示出来。当时间走到程序所设定的时间时,蜂鸣器响起,起到闹钟功能。

二、硬

2.1 51单片机部分设计

单片机部分如图2—1所示:

以STC89C52单片机为核心,选用12MHZ的晶振,由于晶振的频率越高,单片机的运行速度就越快,考虑到单片机的运行速度快会导致对存储器的要求就会变高,因此12MHZ为最佳选择。外接电容的值虽然没有严格的要求,但是外接电容的大小会影响振荡器的频率高低、振荡器的稳定性和起振的快速性,因此选用30pF的电容作为起振电容。复位电路为按键高电平复位,当按键按下,RES端为高电平,当高电平持续4us的时间单片机即复位。

2.2 USB供电电路设计

USB供电电路如下图2—2所示:

该电子时钟采用USB端口的方式为单片机供电,LPOW1为电源显示灯,当按键S5按下,电源显示灯LPOW1亮,表示给单片机供+5V电。

2.3 串行通信电路设计

串行通信电路如下图2—3所示:

图中通过MAX232进行RS—232电平与单片机TTL电平之间的转换,从而为单片机和上位机之间通信提供通道。通信电路的目的就是让通信双方的电平匹配,单片机用的是TTL电平,上位机的串口用的是RS—232电平。TTL电平逻辑1的电压范围是+3.3V到+5V,逻辑0的电压范围是0到+3.3V;RS—232电平的逻辑1的电压范围是—15V到—5V,逻辑0的电压范围是+5V到+15V。MAX232可以把输入的+5V电源电压变换成为RS—232输出电平所需的+10V电压。所以采用此芯片接口的串行通信系统只需单一的+5V电源就可以了。对于没有+12V电源的场合,其适应性更强,2.4 DS12C887时钟芯片电路的设计

时钟芯片电路如下图2—4所示:

DS12C887时钟芯片共需要13条信号线,分别是并行数据地址复用线AD0~AD7,CS,AS,R/W,DS和IRQ。

MOT—总线操作时序选择端。它有两种工作模式,当MOT接

VCC时,选用Motorola模式;当MOT接GND或悬空时,选用Intel模式。NC—空引脚。

AD0~AD7—复用地址数据总线。在总线周期的前半部分,出现在AD0~AD7上的是地址信息,可用以选通DS12C887内的RAM,总线周期的后半部分出现在AD0~AD7上的是数据信息。GND,VCC—系统电源接入端。当

VCC输入为+5V时,用户可以访问DS12C887内RAM的输入小于+4.25V时,禁止用户对内部RAM中的数据,并可对其进行读/写操作;当

VCC进行读/写操作,此时用户不能正确芯片内的时间信息;当

VCC的输入小于+3V时,DS12C887会自动的将电源切换到内部自带的锂电池上,以保证内部的电路能正常工作。

CS—芯片片选端。

AS—地址选通输入端。在进行读/写操作时,AS的上升沿将AD0~AD7上出现的地址信息锁存到DS12C887上,而下一个下降沿清除AD0~AD7上的地址信息,不论CS是否有效,DS12C887都将执行该操作。

R/W—读/写输入端。该引接脚有两种工作模式,当MOT接

VCC时,R/W工作在Motorola模式。此时该引脚的作用是区分读操作还是写操作,R/W高电平时为读操作,R/W为低电平时为写操作;当MOT接GND时,该引脚工作在Intel模式,此时该引脚为写允许输入,此信号的上升沿锁存数据。

DS—数据选择或读输入脚。该引脚有两种工作模式,当MOT接

VCC时,选用Motorola模式,此时,每个总线周期后一部分的DS为高电平,称为数据选通。在读操作中,DS的上升沿使DS12C887将内部数据送往总线AD0~AD7上,以供外部读取。在写操作中,DS的下降沿将使总线AD0~AD7上的数据锁存在DS12C887中。当MOT接GND时,选用Intel模式,此时该引脚是读允许输入引脚。

RESET—芯片复位引脚。

IRQ—中断请求输出。用作处理器的中断申请输入。只要引起中断的状态位置位,并且相应中断使能位也置位,IRQ将一直保持低电平,处理器程序通常读取C存储器来清除IRQ引脚输出,RESET引脚也会清除未处理的中断。没有中断发生时,IRQ为高阻状态,可将多个中断器件接到一条IRQ总线上,只要它们均为漏极开路输出即可。IRQ引脚为漏极开路输出,需要使用一个外接上拉电阻与SQW—方波输出引脚。当供电电压

VCC相连。

VCC大于4.25V时,SQW引脚可输出方波。

2.5 1602LCD液晶屏显示电路设计

1602LCD液晶屏显示电路如下图2—5所示:

1602液晶为5V电压驱动,带背光,可显示2行,每行16个字符,不能显示汉字,内置含128个字符的ASCII字符集字库,只有并行接口,无串行接口。接口说明如下:(1)液晶1,2端为电源;15,16为背光电源;为防止直接加5V电压烧坏背光灯,在15脚串接一个1K电阻用于限流。

(2)液晶3端为液晶对比度调节端,通过一个10K电位器接地来调节液晶显示对比度。首次使用时,在液晶上电状态下,调节至液晶上面一行显示出黑色小格为止。

(3)液晶4端为向液晶控制器写数据/写命令选择端,接单片机的P3.5口。

(4)液晶5端为读/写选择端,因为我们不从液晶读取任何数据,只向其写入命令和显示数据,因此此端始终选择为写状态,即低电平接地。

(5)液晶6端为使能信号,是操作时必须的信号,接单片机的P3.4口。

2.6 蜂鸣器电路设计

蜂鸣器电路如下图2—6所示:

蜂鸣器电路接在单片机的P2.3引脚上,当该引脚一个低电平,三极管导通,蜂鸣器发出声音作为闹铃。

2.7 按键调整电路设计

按键调整电路如下图2—7所示:

四个独立键盘均采用查询方式,将按键的一端接地,另一端各接一根输入线直接与STC89C52的I/O口相连。当按键闭合时,相当于该I/O口通过按键与地相连,变成低电平,单片机通过检测I/O口的电平状态,即可识别出按下的键。通过四个键实现参数的调节,S1为功能选择键,S2为数值增大键,S3为数值减小键,S4为闹钟查看键。

三、软

3.1 系统程序流程图设计

流程图1:实验主程序流程图

流程图2:定时中断程序流程图

流程图3:调时功能流程图

3.2 程序设计

#include #include void delay(uint z)

//延时函数 {

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);} void di()

//蜂鸣器报警声音 {

beep=0;

delay(100);

beep=1;} void

write_com(uchar com)

//写液晶命令函数

{

rs=0;

lcden=0;

P0=com;

delay(3);

lcden=1;

delay(3);

lcden=0;} void write_data(uchar

data)

//写液晶数据函数 {

rs=1;

lcden=0;

P0=data;

delay(3);

lcden=1;

delay(3);

lcden=0;} void

init()

//初始化函数 {

uchar

num;

EA=1;

//打开总中断

EX1=1;

//开外部中断1

IT1=1;

//设置负跳变沿触发中断

flag1=0;

//变量初始化

t0_num=0;

s1num=0;

week=1;

dula=0;

//关闭数码管显示

wela=0;

lcden=0;

rd=0;/*以下几行在首次设置DS12C887时使用,以后不必再写入

write_ds(0x0A,0x20);

//打开振荡器

write_ds(0x0B,0x26);

//设置24小时模式,数据二进制格式,开启闹铃中断

set_time();

//设置上电默认时间

---------------*/

write_com(0x38);

//1602液晶初始化

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<15;num++)

//写入液晶固定部分显示

{

write_data(table[num]);

delay(1);}

write_com(0x80+0x40);

for(num=0;num<11;num++)

{

write_data(table1[num]);

delay(1);

} } void write_sfm(uchar add,char data)

{ //1602液晶刷新时分秒函数,4为时,7为分,10为秒

char

shi,ge;

shi=data/10;

ge=data%10;

write_com(0x80+0x40+add);

write_data(0x30+shi);

write_data(0x30+ge);} void

write_nyr(uchar add,char

data)

{

//1602液晶刷新年月日函数,3为年,6为月,9为日

char

shi,ge;

shi=data/10;

ge=data%10;

write_com(0x80+add);

write_data(0x30+shi);

write_data(0x30+ge);void

write_week(char we)

//写液晶星期显示函数 {

write_com(0x80+12);

switch(we)

{

case 1:

write_data('M');delay(5);

write_data('O');delay(5);

write_data('N');

break;

case 2:

write_data('T');delay(5);

write_data('U');delay(5);

write_data('E');

break;

case 3:

write_data('W');delay(5);

write_data('E');delay(5);

write_data('D');

break;

case 4:

write_data('T');delay(5);

write_data('H');delay(5);

write_data('U');

break;

case 5:

write_data('F');delay(5);

write_data('R');delay(5);

write_data('I');

break;

case 6:

write_data('S');delay(5);

write_data('A');delay(5);

write_data('T');

break;

case 7:

write_data('S');delay(5);

write_data('U');delay(5);

write_data('N');

break;

} } void keyscan(){ if(flag_ri==1){

//这里用来取消闹钟报警,按任意键取消报警

if((s1==0)||(s2==0)||(s3==0)||(s4==0))

{

delay(5);

if((s1==0)||(s2==0)||(s3==0)||(s4==0))

{

while(!(s1&&s2&&s3&s&s4));di();

flag_ri=0;

//清除报警标志

}

}

}

if(s1==0)

//检测s1

{

delay(5);

if(s1==0)

{

s1num++;

//记录按下次数

if(flag1==1)

if(s1num==4)

s1num=1;

flag=1;

while(!s1);di();

switch(s1num)

{

//光标闪烁点定位

case 1: write_com(0x80+0x40+10);

write_com(0x0f);

break;

case 2: write_com(0x80+0x40+7);

break;

case 3: write_com(0x80+0x40+4);

break;

case 4: write_com(0x80+12);

break;

case 5: write_com(0x80+9);

break;

case 6: write_com(0x80+6);

break;

case 7: write_com(0x80+3);

break;

case 8: s1num=0;

write_com(0x0c);

flag=0;

write_ds(0,miao);

write_de(2,fen);

write_ds(4,shi);

write_ds(6,week);

write_ds(7,day);

write_ds(8,month);

write_ds(9,year);

break;

}

}

}

if(s1num!=0)

//只有当s1按下后,才检测s2和s3

{

if(s2==0)

{

delay(1);

if(s2==0)

while(!s2);di();

switch(s1num)

{

//根据功能键次数调节相应数值

case 1: miao++;

if(miao==60)

miao=0;

write_sfm(10,miao);

write_com(0x80+0x40+10);

break;

case 2: fen++;

if(fen==60)

fen=0;

write_sfm(7,fen);

write_com(0x80+0x40+7);

break;

case 3: shi++;

case 4:

case 5:

case 6:

case 7:

}

}

}

if(s3==0)

{

delay(1);

if(shi==24)

shi=0;

write_sfm(4,shi);

write_com(0x80+0x40+4);

break;week++;

if(week==8)

week=1;

write_week(week);

write_com(0x80+12);

break;day++;

if(day==32)

day=1;

write_nyr(9,day);

write_com(0x80+9);

break;month++;

if(month==13)

month=1;

write_nyr(6,month);

write_com(0x80+6);

break;year++;

if(year==100)

year=0;

write_nyr(3,year);

write_com(0x80+3);

break;

if(s3==0)

{

while(!s3);di();

switch(s1num)

{

//根据功能键次数调节相应数值

case 1: miao--;

if(miao==-1)

miao=59;

write_sfm(10,miao);

write_com(0x80+0x40+10);

break;

case 2: fen--;

if(fen==-1)

fen=59;

write_sfm(7,fen);

write_com(0x80+0x40+7);

break;

case 3: shi--;

if(shi==-1)

shi=23;

write_sfm(4,shi);

write_com(0x80+0x40+4);

break;

case 4: week--;

if(week==0)

week=7;

write_week(week);

write_com(0x80+12);

break;

case 5: day--;

if(day==0)

day=31;

write_nyr(9,day);

write_com(0x80+9);

break;

case 6: month--;

if(month==0)

month=12;

write_nyr(6,month);

write_com(0x80+6);

break;

case 7: year--;

if(year==-1)

year=99;

write_nyr(3,year);

write_com(0x80+3);

break;

}

}

}

}

if(s4==0)

//检测s4

{

delay(5);

if(s4==0)

{

flag1=~flag1;

while(!s4);di();

if(flag1==0)

{

//退出闹钟设置时保存数值

flag=0;

write_com(0x80+0x40);

write_data(' ');

write_data(' ');

write_com(0x0c);

write_ds(1,miao);

write_ds(3,fen);

write_ds(5,shi);

}

else

{

//进入闹钟设置

read_alarm();

//读取原始数据

miao=amiao;

//重新赋值用以按键调节

fen=afen;

shi=ashi;

write_com(0x80+0x40);

write_data('R');

//显示标志

write_data('i');

write_com(0x80+0x40+3);

write_sfm(4,ashi);

//送液晶显示闹钟时间

write_sfm(7,afen);

write_sfm(10,amiao);

}

}

} } void write_ds(uchar add,uchar

data){

//写12C887函数

dscs=0;

dsas=1;

dsds=1;

dsrw=1;

P0=add;

//先写地址

dsas=0;

dsrw=0;

P0=data;

//再写数据

dsrw=1;

dsas=1;

dscs=1;} uchar

read_ds(uchar add){

//读12C887函数

uchar

ds_data;

dsas=1;

dsds=1;

dsrw=1;

dscs=0;

P0=add;

//先写地址

dsas=0;

dsds=0;

P0=0xff;

ds_data=P0;

//再读数据

dsds=1;

dsas=1;

dscs=1;

return ds_data;} /*---首次操作12C887时给予寄存器初始化-----void set_time(){

//首次上电初始化时间函数

write_ds(0,0);

write_ds(1,0);

write_ds(2,0);

write_ds(3,0);

write_ds(4,0);

write_ds(5,0);

write_ds(6,0);

write_ds(7,0);

write_ds(8,0);

write_ds(9,0);}----------------------*/

void

read-alarm(){

//读取12C887闹钟值

amiao=read_ds(1);

afen=read_ds(3);

ashi=read_ds(5);} void main()

//主函数 {

init();

//调用初始化函数

while(1)

{

keyscan();

//按键扫描

if(flag_ri==1)

//当闹钟中断时进入这里

{

di();

delay(100);

di();

delay(500);

}

if(flag==0&&flag1==0)

//正常工作时进入这里

{

keyscan();

//按键扫描

year=read_ds(9);

//读取12C887数据

month=read_ds(8);

day=read_ds(7);

week=read_ds(6);

shi=read_ds(4);

fen=read_ds(2);

miao=read_ds(0);

write_sfm(10,miao);

//送液晶显示

write_sfm(7,fen);

write_sfm(4,shi);

write_week(week);

write_nyr(3,year);

write_nyr(6,month);

write_nyr(9,day);

}

} } void

exter()interrupt 2

//外部中断1服务程序 {

uchar

c;

//进入中断表示闹钟时间到

flag_ri=1;

//设置标志位,用于大程序中报警提示

c=read_ds(0x0c);

//读取12C887的C寄存器表示响应了中断 }

_______________________________________________________________________________ 以下为define.h源代码:

_______________________________________________________________________________ #define uchar unsigned char #define uint unsigned int sbit dula=P2^6;sbit wela=P2^7;sbit rs=P3^5;sbit lcden=P3^4;sbit s1=P3^0;

//功能键 sbit s2=P3^1;

//增大键 sbit s3=P3^2;

//减小键 sbit s4=P3^6;

//闹钟查看键 sbit rd=P3^7;sbit beep=P2^3;

//蜂鸣器 sbit dscs=P1^4;sbit dsas=P1^5;sbit dsrw=P1^6;sbit dsds=P1^7;sbit dsirq=P3^3;bit flag1,flag_ri;

//定义两个位变量

uchar count,s1num,flag,t0_num;

//其他变量定义 char miao,shi,fen,year,month,day,week,amiao,afen,ashi;uchar code

table[]=“201-

”;

//液晶固定显示内容 uchar code

table1[]=“

:

:

”;

void write_ds(uchar,uchar);

//函数申明 void set_alarm(uchar,uchar,uchar);void read_alarm();uchar read_ds(uchar);void set_time();

四、心

在本次电子时钟设计中对单片机的内部结构有了一定的了解,熟悉了各个引脚的功能,同时熟知了1602LCD液晶、DS12C887时钟芯片的使用,以及各种电路的功能。

通过此次课程设计,无论是从软件方面还是硬件方面,都进一步学习和巩固了程序的总体设计和单片机的应用。在软件方面,进一步熟悉了各条指令的功能及用法,定时、中断的用法,更深一步学习了用C语言编写实现电子时钟的功能。在硬件方面,进一步熟悉并使用了keil软件,在keil中编程,调试,运行;对电路的一些基本结构和设计有了更深一步的了解。在整个设计过程中,虽然出现了很多问题,有时确实叫人很心烦,但在发现问题后努力去解决,并获得成功,这时会感到无比的快乐和具有成就感。只有自己动手去做,去应用,才能将学到的知识变成自己的。

程序不要光看不写,一定要自己写一次。最开始的时候,可能自己啥都不懂,这时可以抄人家的程序过来。但在抄的时候一定要看看每一句是干什么用的,来达到什么目的,运行后有什么后果,看明白了之后,就要自己写一次。此时会发现,原来看明白别人的程序很容易,但到自己写的时候却一句也写不出来,这就是差距。

单片机提高重在实践,想要学好单片机,软件编程必不可少。但是熟悉硬件对于学好单片机也是非常重要的。如何学习好硬件,动手实践是必不可少的。我们可以通过自己动手做一个自己的电子制作,通过完成它,以提高对一些芯片的了解和熟练运用。这样我们就可以多了解一些芯片的结构。

我学习的目标是希望在若干年以后能够独立设计一个复杂的系统,包括硬件电路和软件部分。总之,通过这次电子技术设计我学到了许多,似乎离自己的目标又近了一步。

[1]郭天祥.51单片机C语言教程.电子工业出版社.2009 [2]谭浩强.C程序设计.清华大学出版社.1991 [3]孙育才 王荣兴

孙华芳.ATMEL新型AT89S52系列单片机及其应用.清华大学出版社.2006 [4]谢维成.单片机原理及应用与51程序设计.清华大学出版社.2006

[5]鲍宏亚.MCS—51系列单片机应用系统设计及实用技术.中国宇航出版社.2005 [6]赵文博

刘文涛.单片机语言C51程序设计.人民邮电出版社.2006 [7]求是科技.8051系列单片机C程序设计.人民邮电出版社.2006

数字电路电子时钟课件设计
TOP