数码管时钟显示制作 冉钧芸

数码管时钟显示制作 冉钧芸
数码管时钟显示制作 冉钧芸

陕西科技大学毕业设计说明书

作者:冉钧芸学号:

学院:兵团技师培训学院

系(专业):工业电气自动化

题目:数码管时钟显示制作

指导者:马世强

评阅者:

2012年 4 月 26日

基于单片机设计LED显示电子钟

摘要:

本设计使用12MHZ晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用动态扫描方式显示,通过使用该单片机,加之在显示电路部分使用7407驱动电路,实现在6个LED数码管上显示日期、时间、定时、闹铃,通过6个按键实现设置日期、进行调时、设定闹铃、倒计时等功能,在实现各功能时数码管进行相应显示,闹铃或定时时间到时蜂鸣器响,按下闹铃键或定时键时,声音停止。软件部分用汇编实现,分为显示、延迟、调时、闹铃、定时、调整日期等部分。通过软硬件结合达到最终目的。

关键词:电子钟单片机动态扫描C语言

Title Design of LED Show Electric Clock Based on

Microprocessor Abstract

This design uses a 12 MHZ crystal to connect with the machine AT89C51, takes AT89C51 chips as core. It adopts the dynamic state of the scanning method to show. Using this MCU and 7407 drive electric circuit, we are able to show date, time, fix the time, make bell on 6 LED figures tubes. We can use 6 key to constitute date, adjust time, enact the bell and set the countdown timer. When the electric carrying out each function, the figures tube show the tight function .When the alarm clock and the countdown timer were reached, the voice begins. While 3 or 4 is pressed, the voice stops. The software part is realized by assembler language. It was divided into to show, delay, adjust, make bell, in fixed time, adjust date etc. part. We get the end purpose combining the software and the hardware.

Keywords:Electric clock MCU Dynamic state scaning assembler language

目次

1 引言 (1)

2 整体设计思路 (3)

3 主要元件的使用方法 (4)

3.1 AT89C51单片机: (4)

3.2 7407驱动器: (5)

3.3数码管: (6)

4 电路设计 (6)

4.1整体设计 (6)

4.2 分块设计 (7)

4.2.1 输入部分 (7)

4.2.2 输出部分(显示电路) (8)

4.2.3 晶振与复位电路: (8)

5 程序设计 (9)

5.1程序思路 (9)

5.2程序设计步骤 (10)

5.3程序的主要模块 (10)

5.3.1延迟程序 (10)

5.3.2 中断服务子程序: (11)

5.3.3 主程序 (12)

5.3.4显示程序 (12)

5.3.5 闹铃程序和定时程序 (13)

5.4程序调试 (13)

6 功能仿真 (13)

6.1 软件介绍 (13)

6.1.1PROTEUS (13)

6.1.2MedWin (14)

6.2仿真过程: (14)

6.2.1仿真图的绘制 (14)

6.2.2功能的实现 (15)

7 实际电路的实现 (17)

8 日历功能的实现 (18)

9 电子钟设计中遇到的问题及其解决方法 (22)

结论 (23)

参考文献 (24)

致谢 (26)

附录A 整体电路图 (27)

附录B 完整程序 (28)

1 引言

单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上[1]。

单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机具有体积小、功能多、价格低廉、使用方便、系统设计灵活等优点[2]。因此,它应用广泛前景美好,它的实用性大大地提高了我对毕业设计的兴趣。

在我国,单片机的开发应用已有15年左右,已经形成一支庞大的技术开发队伍,为我国单片机应用积累了丰富的经验。随着电子技术、计算机芯片技术和微电子技术的飞速发展促进了单片机技术一日千里的变化[3]。

随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。

然而传统的单片机系统开发除了需要购置诸如仿真器、编程器、示波器等价格不菲的电子设备外,开发过程也较繁琐。来自英国Labcenter Electronics公司的Proteus软件很好地诠释了利用现代EDA工具方便快捷开发单片机系统的优势。它包括PROTEUS VSM(Virtual System Modelling)、PROTEUS PCB DESIGN两大组成部分,在PC机上就能实现原理图电路设计、电路分析与仿真、单片机代码级调试与仿真、系统测试与功能验证以及形成PCB文件的完整嵌入式系统设计与研发过程。

单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件电路设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试3个过程。如果采用单片机系统的虚拟仿真软件——Proteus,则不用制作具体的电路板也能够完成以上工作。

数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便[4]。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。

电子钟在工业控制和日常生活中是很重要的,它不仅可以用于计时、提醒又可用于对机器的控制,在自动化的过程中必然有电子钟的参与,因此电子钟的应用会越来越广泛。而且向着精确、低功耗、多功能发展。基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。从而,使数字钟的精度仅仅取决于单片机的产生机器周期电路和定时器硬件电路的精确度。另外,程序较为简洁,具有可靠性和较好的可读性。如果我们想将它应用于实时控制之中,只要对上述程序和硬件电路稍加修改,便可以得到实时控制的实用系统,从而应用到实际工作与生产中去。

数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟还可以利用单片机来实现电子钟等等。这些方法都各有特点,其中,利用单片机实现的电子钟具有编程灵活,便于功能扩充,精确度高等特点[5]。

基于以上分析,在此次设计中,我选择的是利用单片机制作电子钟。电子钟的设计本身包括程序的设计和硬件电路的设计[6]。我的思路是,先进行电路的整体设计,再根据电路进行编程,在编程的过程中,对电路进行微调,以更好地配合程序。在设计完成后,进行程序调试,调试软件选择MedWin,调试成功后,再根据电路图画出仿真图,将软件装入单片机芯片,利用Proteus软件进行仿真,仿真中的错误通过改正程序中的逻辑错误和电路中的设计不当进行排除,这个过

程是很艰难的但也是很重要的。若仿真可以实现,则硬件电路的实现就可以有条不紊地进行。

2 整体设计思路

这部分主要介绍工作安排和整体设计的思想。工作过程规划如下:

图2.1 整体设计思路

针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB 在线可编程(ISP )的可反复擦写1000次的Flash 只读程序存储器,器件采用高密度、非易失性存储技术制造,熟悉硬件 了解各引脚功能 分块设计各部分电路

将分块的电路组合

认真学习单片机汇编语言 完成整体电路图 确定变成结构和思路

综合各程序完成整体程序 编辑各个程序模块

用Proteus 画出电路图

调试程序,进行修改 对仿真中出现的问题进行

改正 画出仿真图进行仿真

准备器件、搭接电路

仿真成功 软硬件结合,完成任务书

要求 验证硬件电路

成功

进行扩展

兼容标准MCS- 51指令系统及80C51引脚结构[7]。这样,既能做到经济合理又能实现预期的功能。

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

本电子钟设计主要是依照图2.1中的流程做出来的,时间分配比较均匀。首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。这是前期准备工作。第二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。第三部分是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编程调试,最终完成程序设计。第四部分是软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。第六部分是硬件实现部分:连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。最后进行功能扩展,本设计加进了日期显示与调整功能。

3 主要元件的使用方法

下面就本次设计中用到的主要元件的所有功能进行简单的介绍,包括

AT89C51单片机、74LS07芯片、以及数码管的特性和用法。

3.1 AT89C51单片机[8]:

该单片机功能强大,不仅能满足设计的需要,也可以在设计要求的基础上进行一些扩展。

单片机的结构如下:

图3.1.1 单片机引脚图

在使用时VCC接电源电压,GND接地。P0,P1,P2,P3可作为输入或输出端口,RST是复位输入,接复位电路。XTAL1和XTAL2接复位电路。这些可以在硬件设计部分体现出来。

3.2 7407驱动器[9]:

7407是集电极开路六正相高压驱动器,1入2出,3进4出,5进6出,9进8出,11进10出,13进12出,7接地,14接高电平。

7407引脚图:

图3.2.1 7407引脚图

7407

逻辑图:

图3.2.2 7407逻辑图

3.3数码管: 图3.3.1 数码管

使用共阴极数码管时将6个数码管按相同功能连接起来,3与8相连,当选通端所接管脚为低电平时该数码管选通。

单片机的P2口作为选通端,连接各数码管的3、8引脚轮流显示,连接时要加

7407和上拉电阻。

单片机的P1口作为功能段,通高电平的引脚会使相应段亮起,同样的也要与7407和电阻连接使用。

4 电路设计

4.1整体设计

此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:显示电路用六个数码管分别显示小时(年份)、分钟(月份)和秒(日),通过动态扫描进行显示,从而避免了译码器的使用,使电路更加简单。单片机采用AT89C51系列,这种单片机应用简单,适合电子钟设计。

电路的总体设计框架如下:

g

f a b e d dp

c 8

7 10 9 6

1 2 3 4 5 a b

c d

e f g

图4.1.1 电路模块图

4.2 分块设计

这部分介绍各模块电路的设计方法和成果,主要分为:输入部分、输出部分、复位和晶振电路。

4.2.1 输入部分

在电子钟的输入部分,设置相应的置数功能,通过外部设备的输入,如按键,实现时间的修改[10-11]。除此之外,调整闹铃、定时、日期时也需要按键进行输入。在选用输入端口时,将P3引脚与按键相连进行输入[12]。

设计的输入部分如下:

输入部分

晶振和复位

输出部分

图4.2.1 输入部分

各按键功能在后面的部分将会介绍到

4.2.2 输出部分(显示电路)

该部分电路图如下所示:

图4.2.2 显示部分

在实际电路中采用单个数码管相连进行显示,先把数码管的1、2、4、5、6、7、9、10对应相连,然后把各晶体管的3和8引脚各自相连,P1.6~P1.0分别接a~g,P2作为选通端P2.0~P2.5分别从左到右接各数码管的3、8端。采用动态显示,即一位一位地轮流点亮各位显示器[18],因此P2.0~P2.5轮流置0。持续时间为1ms,这点在程序部分还会讲到。

4.2.3 晶振与复位电路:

图4.2.3 晶振与复位电路

5 程序设计

5.1程序思路

图5.1.1 程序设计思路

结合电路,程序的总体思路是[17]:

1、点复位键后,进行时间显示,从0时0分0秒开始。

2、按下按键1时,进行调时,此时按下4调整时,按下5调整分,若2秒钟未按键,则不再等待,恢复走时,持续按键时大约0.3秒步进1,下同。

3、按下2键时进行闹铃调整,用

4、5键分别调时和分,此时只有前四位进行显示,即闹铃功能精确到分,2秒钟无按键则返回时间显示,时间到达闹铃所定时间时P0.7输出高电平,蜂鸣器响,按下按键2或3时蜂鸣器停止。

4、按3键时进行定时的设定,同样,分别通过4、5调整分和秒,若两秒未按键则不进行定时,设定之后再次按下3键则进行倒计时,倒计时时间未到时若按初始化

判断按键 显示

按下3键

按下1键

按下2键

若无按键

调时 调闹钟 调定时

显示所调时间 显示闹铃时间 显示定时时间

调整时限到 或有其

他输入

下1键则进行时间显示;若倒计时时间到则P0.7为高电平,蜂鸣器响。定时的最大值为59分59秒。

在程序设计时,尽量改进算法,算法的改进可以使相对误差减小[12],或者可以使占用空间减小[14]。另外,分块的设计思想要贯穿始终,整个程序较为繁杂,某些程序段会反复用到,因此采取的方法是写出多个程序段,通过跳转指令进行调用。

5.2程序设计步骤

在程序设计过程中,我遇到了很多困难,这部分也是让我学到很多东西的地方。

首先,我学习了定时器的相关知识,计数器的使用是很重要的组成部分[15],在这个设计中选择计数器T0。T0的工作方式有:

方式0:不推荐

方式1:16位计数器,常用

方式2:自动重装初值的8位定时/计数器

方式3:T0相当于两个独立的8位定时/计数器

此程序采用方式1,方式1的定时时间t为t=(216-M)*12/fosc。其中M为定时器初值,fosc为12MHz,若M为0则t=65536*12/2*106=65.536ms。因此可取50ms为计时单位[16],初值M应为50*10-3*106=216-M。M=15536=11110010110000=3CB0。即定时器初值为TH0=03CH,TL0=0B0H。定时器中断20次为一秒,这部分在中断程序中用到。

其次,我参看了文献中的设计思路,做到胸有成竹后再进行具体的程序书写工作。认真学习了教科书中关于汇编语言编程的问题,熟悉了汇编语言的编程方法和语法习惯。

第三步就是进行具体的程序编写工作。

5.3程序的主要模块

5.3.1延迟程序

在动态扫描时,必然用到延迟程序,这里使用延迟1ms的程序,此程序需要

反复调用。此段程序是很简单的,但就是在这段简单的程序上,也会出现问题。

5.3.2 中断服务子程序:

中断服务程序中,总体思路是:由于初值是3CB0H,所以装满定时器需要50ms的时间,从而20次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值为0,分加一,依次类推。包括日期显示的功能也是如此。另外,由于要实现倒计时功能,因此在中断程序中还要加入减一的寄存器,需要时将其进行显示。基于以上考虑,以R3为倒计时中的秒,R4为倒计时的分,当秒加1时R3减一,减到0之后,秒赋值为59,分减一,直到分为0。再显示走时部分。

流程框图如下:

图5.3.1 中断程序思路

5.3.3 主程序

主程序主要对按键进行扫描,以及判断定时和闹铃时间是否已到,若到则调用声音程序。

5.3.4显示程序

6个晶体管轮流进行显示,分别显示1ms ,这依赖的是人们视觉的惰性. 给T0赋值

中断20次

R3赋值为60 分=0,秒=0,时加一

秒加一 R3、R4都为0时倒计时结束,蜂鸣器响,显示走时状态

秒=60

Y

秒=0时加1

N

时=24

分=60

Y

N

Y

N

分=0,秒=0,时=0 返回

R3=0

Y R3、R4减一 N

另外,调闹铃和定时时间、进行日期显示时,有各自的显示程序,但不能成为独立子程序,分别柔和在闹铃、定时、和日期程序中。

5.3.5 闹铃程序和定时程序

这两段程序分别包含了各自的显示、调整程序。程序思路是对照,走时部分的程序,进行编写,包括显示程序,与显示时间的程序是相似的,闹铃和定时的调整程序与走时调整程序相似。

5.4程序调试

程序写完以后必须进行调试,以验证程序是否正确。在程序调试时,出现了很多问题,比如跳转距离过长、打错字母、逻辑有错等,发现问题后,利用两天时间进行了改正,但即使编译通过,最后也不一定能够实现功能。以为程序的调试只能检查出语法错误,而不能检查出逻辑的错误。要真正把程序写对,要通过仿真发现并且改正错误。

6 功能仿真

这部分工作可能遇到的困难是很多的,程序庞大很可能出现各种问题。在仿真工作中,首先要对仿真软件有足够的了解并能够正确熟练地运用

6.1 软件介绍

在这部分工作中用到了medwin3和Proteus两个软件,其中Medwin3用来编译程序并生成hex文件,装入Proteus仿真图的芯片中,通过仿真结果一步步进行调整最后达到预期的功能。

6.1.1PROTEUS

PROTEUS软件是目前世界上最先进、最完整的嵌入式系统设计与仿真平台,可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具。微控制器系统相关的仿真需建立编译和

调试环境,可选择MedWin V3 软件。该软件支持众多不同公司的芯片,集编辑、编译和程序仿真等于一体,同时还支汇编和C语言的程序设计。Proteus的界面友好易学,在调试程序、软件仿真方面有很强大的功能。其革命性的功能是:将电路仿真和微处理器仿真进行协同,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件如电机、LED、LCD、开关等,实时看到运行后的输入、输出的效果。Proteus为我们建立了完备的电子设计开发环境。

6.1.2MedWin

MedWin可以用来编写汇编语言程序并进行编译、产生代码并装入仿真器以便于仿真,在输出文件夹中会产生hex文件,将该hex文件导入仿真图的单片机芯片中即可进行仿真。

使用时点击“项目管理—新建项目”就可以建立编程的平台,然后选择项目管理中的新建文件就可以建立asm文件,在这个文件中可以进行程序的编写,程序编写完毕后可点击“项目管理—编译\汇编”看其是否有错,有错时,在下面的窗口会提示出错的行以及错误原因。改正无误后可产生代码并装入,将hex文件导入单片机中即可进行仿真

6.2仿真过程:

通常在仿真过程中会遇到很大的麻烦。在程序汇编通过之后程序不一定是正确的,比如我刚开始进行仿真时数码管并不进行显示,结果发现应该是置零的置一了,应该置一的置零了。改正之后发现虽然走时程序正常了,但是调时中出现了大量的问题,更不要说闹铃和定时程序了。在整个毕业设计的过程中程序的修改贯穿始终,在修改的过程中一定要条理清晰,认真细心。

6.2.1仿真图的绘制

在使用Proteus进行仿真时,仿真图不用画出数码管驱动程序,其他部分与设计的硬件图相仿。绘制结果如下:

图6.2.1 仿真图

6.2.2功能的实现

在绘制仿真图之后,要向单片机装入程序,从而使单片机开始工作并带动整个电路工作,装入过程为:点击单片机,选择所编译程序的输出hex文件,确定即可。此时单片机会按照程序所设定的功能进行工作,在仿真过程中会遇到各种问题,在第九章会具体讲到。这里列出仿真结果:

(1)走时仿真:

八位七段数码管动态显示电路设计

八位七段数码管动态显示电路的设计 一七段显示器介绍 七段显示器,在许多产品或场合上经常可见。其内部结构是由八个发光二极管所组成,为七个笔画与一个小数点,依顺时针方向为A、B、C、D、E、F、G与DP等八组发光二极管之排列,可用以显示0~9数字及英文数A、b、C、d、E、F。目前常用的七段显示器通常附有小数点,如此使其得以显示阿拉伯数之小数点部份。七段显示器的脚位和线路图如下图4.1所示( 其第一支接脚位于俯视图之左上角)。 图4.1、七段显示器俯视图 由于发光二极管只有在顺向偏压的时候才会发光。因此,七段显示器依其结构不同的应用需求,区分为低电位动作与高电位动作的两种型态的组件,另一种常见的说法则是共阳极( 低电位动作)与共阴极( 高电位动作)七段显示器,如下图4.2所示。 ( 共阳极) ( 共阴极) 图4.2、共阳极(低电位动作)与共阴极(高电位动作)

要如何使七段显示器发光呢?对于共阴极规格的七段显示器来说,必须使用“ Sink Current ”方式,亦即是共同接脚COM为VCC,并由Cyclone II FPGA使接脚成为高电位,进而使外部电源将流经七段显示器,再流入Cyclone II FPGA的一种方式本实验平台之七段显示器模块接线图如下图4.5所示。此平台配置了八组共阳极之七段显示器,亦即是每一组七段显示器之COM接脚,均接连至VCC电源。而每一段发光二极管,其脚位亦均与Cyclone II FPGA接连。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。 图4.5、七段显示器模块接线图 七段显示器之常见应用如下 ?可作为与数值显示相关之设计。 ?电子时钟应用显示 ?倒数定时器 ?秒表 ?计数器、定时器 ?算数运算之数值显示器

数码管显示电路设计

东北石油大学 实习总结报告 实习类型生产实习 实习单位电子科学学院实习基地 实习起止时间 2011年7月4日至2010年7月23日 指导教师张勇 所在院(系)电子科学学院 班级电信08-4班 学生姓名白雪 学号 080901140402 2011年 7月23日

目录 第1章单片机系统硬件电路 (1) 1.1 实习目的 (1) 1.2 单片机型号及特性 (1) 1.3单片机开发板 (2) 第2章单片机应用系统软件 (5) 2.1 STC下载软件 (5) 2.2 Keil软件 (5) 2.3 外部电路驱动 (6) 第3章数码管显示电路设计 (7) 3.1 设计原理 (7) 3.2 实现方法 (8) 第4章实习总结 (9) 4.1 实习体会 (9) 4.2 设计硬件体会 (9) 参考文献 (10) 附录1 实物图 (11) 附录2 系统主要程序 (12)

第1章单片机系统硬件电路 1.1实习目的 1、了解单片机最小系统; 2、了解keilc软件操作,程序下载及调试方法; 3、掌握单片机外部电路使用; 4、掌握键盘和数码管显示编程方法; 5、应用单片机开发板进行实验开发; 1.2单片机型号及特性 1、AT89S51单片机功能及特点 AT89S51是一个低功耗,带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,AT89S51在众多嵌入式控制应用系统中得到广泛应用。 性能特点: (1)一般为控制应用的8位单芯片 (2)工作电压范围:Vcc可为2.7V到6V,全静态工作:可从0Hz至16MHz (3)芯片内部具有时钟振荡器(传统最高工作频率可至12MHZ) (4)内部程序存储器ROM为4KB,内部数据存储器RAM为128B (5)外部程序存储器可扩充为64KB外部数据存储器可扩充至64KB (6)32条外部双向输入输出线 (7)5个中断优先级,2层中断嵌套中断,5个中断源 (8)2组独立的16位定时器 (9)1个全双工串行通信端口 (10)8751及8752芯片具有数据保密的功能 (11)单芯片提供位逻辑运算指令 (12)低功耗的闲置和掉电模式

基于DS1302的数码管显示数字钟

单片机原理课程设计 课题名称:基于DS1302的数码管显示数字钟 专业班级:电子信息工程 学生学号: 学生姓名: 指导教师: 设计时间:2010年6月21日--2010年6月25日

目录 摘要........................................................................................................................................................................ 1 设计任务和要求............................................................................................................................................ 2 方案论证........................................................................................................................................................ 3 系统硬件设计................................................................................................................................................ 3.1 系统总原理图 ................................................................................................................................ 3.2 元器件清单...................................................................................................................................... 3.3 PCB板图....................................................................................................................................... 3.4 Proteus仿真图 ............................................................................................................................... 3.5 分电路图及原理说明................................................................................................................... 3.5.1 主控部分(单片机MCS-51).............................................................................. 3.5.2 计时部分(实时时钟芯片DS1302).................................................................. 3.5.3 显示部分(共阳极数码管)................................................................................ 3.5.4 调时部分(按键)................................................................................................ 4系统软件设计................................................................................................................................................ 4.1 程序流程图..................................................................................................................................... 4.2 程序源代码........................................................................................................................................ 5心得体会........................................................................................................................................................ 6参考文献........................................................................................................................................................ 7结束语............................................................................................................................................................

8位数码管动态显示电路设计

电子课程设计 — 8位数码管动态显示电路设计 学院:电子信息工程学院 专业、班级: 姓名: 学号: 指导老师: 2014年12月

目录 一、设计任务与要求 (3) 二、总体框图 (3) 三、选择器件 (3) 四、功能模块 (9) 五、总体设计电路图 (10) 六、心得体会 (12)

8位数码管动态显示电路设计 一、设计任务与要求 1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。 2. 要求在某一时刻,仅有一个LED 数码管发光。 3. 该数码管发光一段时间后,下一个LED 发光,这样8只数码管循环发光。 4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。 5、研究循环地址码发生器的时钟频率和显示闪烁的关系。 二、总体框图 设计的总体框图如图2-1所示。 图2-1总体框图 三、选择器件 1、数码管 数码管是一种由发光二极管组成的断码型显示器件,如图1所示。 U13 DCD_HEX 图1 数码管 数码管里有八个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出 不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个 74LS161计数器 74LS138译码 器 数码管

LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。 2、非门 非门又称为反相器,是实现逻辑非运算的逻辑电路。非门有输入和输出两个端,电路符号如图2所示,其输出端的圆圈代表反相的意思,当其输入端为高电平时输出端为低电平,当其输入端为低电平时输出端为高电平。也就是说,输入端和输出端的电平状态总是反相的。其真值表如表1所示。 图2 非门 表1 真值表 输入输出 A Y 0 1 1 0 3、5V电源 5V VCC电源如图3所示。 图3 5V电源

51单片机数码管时钟电路的设计_AT89C51

广东石油化工学院 《51单片机原理与实践》课程设计报告 学院计算机与电子信息学院 专业 班级 学号 姓名 指导教师 课程成绩 完成日期 2010年12月27日

数码管时钟电路的设计 一、设计目的: 通过这次课程设计掌握单片机系统的基本设计步骤及设计思路,掌握汇编语言的用法及各种指令的含义,比较熟练的运用指令进行单片机系统的设计的,熟悉用KEIL软件进行汇编语言的汇编,以及把代码写入实验板中,观测代码结合实际的运行结果后进行调整,体会到编程的分析问题、确定算法、画程序流程图、编写程序、程序功能模块化的优点的各各步骤。 二、设计要求: LED数码管时钟电路采用24h计时方式,时、分、秒用六位数码管显示。该电路采用AT89C2051单片机,使用3V电池供电,只使用一个按键开关即可进入调时、省电(不显示LED数码管)和正常显示三种状态。 三、设计实验内容: 1. 硬件的设计 其采用AT89C51单片机应用设计,LED显示采用动态扫描方式实现,P0口输出段码数据,P2口输出位码数据,P1.1、P1.2接按钮开关。为了提供LED数码管的驱动电流,采用6MHz晶振。 2. 系统总体分析 系统主要包含四大模块:显示模块、时间计时模块、模式切换模块和模式设置模块。 显示模块:主要由主循环负责。内存中开辟了一段8字节的内存空间,

用作数据显示的字符缓冲区。主循环不断将缓冲区中的字符呈现至数码管。 ● 时间计时模块:电子钟的核心模块,记录了时间的时、分、秒信息。 ● 模式切换模块(MODE ):切换电子钟的设置模式,包括时设置、分设置、秒设置、闹铃开关设置、闹铃时设置和闹铃分设置。相关数据被设置时将闪烁显示。 ● 模式设置模块(CONFIG ):通过判断设置模式(MODE ),执行相应的设置。如时、分、秒的增1以及闹铃开关的变换。 另外,主循环还负责扫描键盘,检测相应键是否被按下,若MODE 键被按下则在特定单元中登记该功能,并启动定时器1,然后返回继续执行显示功能。在定时器1中断时,被登记的功能正式执行。期间用时约10ms ,用以消除机械抖动。 主循环流程图大致如下: 图(一)主循环流程图 定时器1中断服务程序流程图如下: 开始 键被按下 登记相应功能 数码管显示 是 否

数码管动态显示的51单片机时钟设计

一看就会,适合初学者参考 T0,T1同时开中断,和别人的有点不一样 源程序如下 //数码管设计的可调电子钟 //K1,K2分别调整小时和分钟 #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99, //共阳段码 0x92,0x82,0xF8,0x80,0x90,0xFF}; uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xBF,0,0}; //显示缓存ucharScan_BIT; //扫描位,选择要显示的数码管 uchar DSY_IDX; //显示缓存索引 ucharKey_State; //P1端口按键状态 uchar h,m,s,s100; //十分秒,1/100s void DelayMS(uchar x) //延时 { uchar i; while(x--) for(i=0;i<120;i++);

} void Increase_Hour() //小时处理函数 { if(++h>23)h=0; DSY_BUFFER[0]=DSY_CODE[h/10]; DSY_BUFFER[1]=DSY_CODE[h%10]; } void Increase_Minute()//分钟处理函数 { if(++m>59) { m=0;Increase_Hour(); } DSY_BUFFER[3]=DSY_CODE[m/10]; DSY_BUFFER[4]=DSY_CODE[m%10]; } void Increase_Second() //秒处理函数 { if((++s>59)) { s=0;Increase_Minute(); } DSY_BUFFER[6]=DSY_CODE[s/10]; DSY_BUFFER[7]=DSY_CODE[s%10]; } void T0_INT() interrupt 1 //T0中断动态扫描数码管显示 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; P2=Scan_BIT; //选通相应数码管 P0=~DSY_BUFFER[DSY_IDX]; //段码送p0进行取反,共阴共阳转换Scan_BIT=_crol_(Scan_BIT,1);//准别下次选通的数码管 DSY_IDX=(DSY_IDX+1)%8; //索引0-7内循环 } void T1_INT() interrupt 3 //T1中断控制时钟运行 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; if(++s100==20) //50ms*20=1s延时 { s100=0;Increase_Second();

用数码管显示实时日历时钟的应用设计

(用数码管显示实时日历时钟的应用设计)

摘要 本课题通过MCS-51单片机来设计电子时钟,采用汇编语言进行编程,可以实现以下一些功能:小时,分,秒和年,月,日的显示。本次设计的电子时钟系统由时钟电路,LED显示电路三部分组成。51单片机通过软件编程,在LED数码管上实现小时,分,秒和年,月,日的显示;利用时钟芯片DS1302来实现计时。本文详细介绍了DS1302 芯片的基本工作原理及其软件设计过程,运用PROTEUS软件进行电路连接和仿真,同时还介绍了74LS164,通过它来实现I|O口的扩展。 关键词:时钟芯片,仿真软件,74LS164 目录 前言 0.1设计思路 (8) 0.2研究意义 (8)

一、时钟芯片 1.1 了解时钟芯片……………………………………………….8-9 1.2 掌握时钟芯片的工作原理………………………………….10-11二、74LS164 2.1 了解74LS164........................................................11-12 2.2 掌握的74LS164工作原理. (12) 三、数码管 3.1 熟悉常用的LED数码管...........................................12-13 3.2 了解动态显示与静态显示. (13) 四、程序设计 4.0 程序流程图 (14) 4.1 DS1392的驱动.......................................................15-16 4.2 PROTUES实现电路连接. (17) 4.3 数码管的显示:小时;分;秒 (18) 4.4 数码管显示:年;月;日 (19) 五、总结…………………………………………………………………..20-21 六、附页程序………………………………………………………………22-31前言

EDA课程设计八位数码管扫描显示电路的设计 2解读

EDA技术应用期末论文题目:八位数码管动态显示 姓名: 班级: 学号:

1.系统总体方案设计 (1) 2. LED的工作原理 (2) 2.1 LED工作原理 (3) 2.2 LED动态扫描显示原理 (3) 3.系统设计 (4) 3.1硬件电路设计 (9) 3.2 VHDL代码设计 (9) 4.运行调试......................................................,,7 4.1时序仿真. (7) 5 总结..............................................,,,,,,,,,,,,,,,9 6.参考文献 (10)

1.系统总体方案设计设计流程图如下:

首先,我们要对所要设计的八位数码管静态扫描显示电路充分理解,同时在了解了所给的硬件器材的基础上需进行“源程序的编辑和编译”——用一定的逻辑表达手段将设计表达出来;其次要进行“逻辑综合”——将用一定的逻辑表达手段表达出来的设计,经过一系列的操作,分解成一系列的基本逻辑电路及对应关系;然后要进行“目标器件的布线∕适配”——在选定的目标器件中建立这些基本逻辑电路及对应关系;最后,目标器件的编程下载——将前面的软件设计经过编程变成具体的设计系统,同时在设计过程中要进行有关“仿真”——模拟有关设计结果,看是否与设计构想相符。 系统结构框图如下: 2. LED的工作原理 2.1 LED工作原理 LED为分段式半导体显示器,通常称为七段发光二极管显示器。下图为七段发光二极管显示器共阴极和共阳极的电路图。对共阴极显示器的公共端应接地,给a-g输入相应高电平,对应字段的发光二极管显示十进制数;对共阳极的公共端应接+5V电源,给a-g输入端相应低电平,对应字段的发光二极管也显示十进制数。

数字电子钟电路的设计

江西航空职业技术学院毕业设计说明书(论文) 课题名称数字电子钟电路的设计 航空电子设备维修专业101332班 学生姓名学号15号 指导老师技术职称副教授 2013年3月10日

江西航空职业技术学院 毕业设计(论文)任务书 学生姓名:刘红亮班级:101332 1.毕业设计(论文)题目:数字电子钟电路的设计 2.毕业设计(论文)使用的原始资料数据及设计技术要求 1:基本概念清楚,基本原理正确; 2:电路图设计符合国家有关规范和标准; 3:按时参加指导教师辅导,按进度要求完成课程设计任务; 4:设计说明书不少于5000字; 2.毕业设计(论文)工作内容及完成时间:

1:数字电子时钟电路的背景和意义 2:数字电子钟电路的系统设计 3:数字钟原理图所需原件的作用 日期:自2012年12月30日至2013年4月6日 指导老师评语: ___________________________________________________ ___________________________________________________ ___________________________________________________ ___________________________________________________ ___________________________________________________ _____________________ 指导老师:姚卫华系主任:周延

摘要 现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号。对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现出了很大的优势。数码管显示的时间简单明了而且读数快、时间准确显示到秒。而机械式的依赖于晶体震荡器,可能会导致误差。数字钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。数字钟的精度、稳定度远远超过老式机械钟。在这次设计中,我们采用LED数码管显示时、分、秒,以24小时计时方式,根据数码管动态显示原理来进行显示,用32768MHz的晶振产生振荡脉冲,定时器计数。在此次设计中,电路具有显示时间的其本功能,还可以实现对时间的调整。数字钟是其小巧,价格低廉,走时精度高,使用方便,功能多,便于集成化而受广大消费的喜爱,因此得到了广泛的使用。 关键字:数字钟晶振计数

数码管时钟显示C程

/* 数码管时钟显示led移动C 程序 使用共阳极数码管 */ #include<> #include<> #define uint unsigned int #define uchar unsigned char sbit wela1 = P2^0; 果要显示1~8数值,最好多加前后两位数0跟9, 因为后面++移位时就能按我们常规顺序亮下去,至于如何显示对应数值请先看数码显示电路图*/ uchar code tablew[]={ 0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f}; 如果要显示,也会因为++而在第二轮中显示出*/ duan=1; //开启段显端 P0=tabled[numd];//附段显P0值对应段显值对码表 duan=0; //锁存 wei=1; //开启位显端 P0=tablew[numw];//附位显P0值对应位显值对码表 wei=0; //锁存 numw++; //相当于位显移位 if(numw==8) //如果位显值到对应位显对码表第八位则转下执行 numw=0; //重新附值位显值对应对码表第0位起 /* 下面是简单的单个数码管显示例证第一骤, 修改后在第三步骤内 #include"" #include""

sbit duan=P2^6; //段显端口 sbit wei=P2^7; //位显端口 void main() { //P0=0xff; 数码管不显示任何信号,默认情况下通电本身就不显示,可以不写 duan=1; //开启段显端口 P0=0x06; //附值段显数值为1,可以查阅数码管电路图相对应显示的对码表 duan=0; //锁存,保持上一步段显状态,硬件说明请查阅74HC573功能 wei=1; //开启位显端口 P0=0xfe; //附值位显位置,01111111,左边第一位,为0的显示 wei=0; //锁存,保持上一步位显状态,硬件说明请查阅74HC573功能 } */ } } } void timer0() interrupt 1 /*第四步骤,中断时间函数这个相当于移位数显的速度,速度够快,人眼就会有余辉效应, 感觉8位数显一直在亮着,相当于正在播放的电影胶卷*/ { TH0=(65536-50000)/256; TL0=(65536-50000)%256; a++; } /* 以上有什么地方还需要改进的还请老师明示 */

实验四八位七段数码管动态显示电路的设计

八位七段数码管动态显示电路的设计 一、实验目的 1、了解数码管的工作原理。 2、学习七段数码管显示译码器的设计。 3、学习VHDL的CASE语句及多层次设计方法。 二、实验原理 七段数码管是电子开发过程中常用的输出显示设备。在实验系统中使用的是两个四位一体、共阴极型七段数码管。其单个静态数码管如下图4-4-1所示。 图4-1 静态七段数码管 由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。反之则不亮。共阳极性的数码管与之相么。四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。 三、实验内容 本实验要求完成的任务是在时钟信号的作用下,通过输入的键值在数码管上显示相应的键值。在实验中时,数字时钟选择1024HZ作为扫描时钟,用四个拨动开关做为输入,当四个拨动开关置为一个二进制数时,在数码管上显示其十六进制的值。 四、实验步骤 1、打开QUARTUSII软件,新建一个工程。 2、建完工程之后,再新建一个VHDL File,打开VHDL编辑器对话框。 3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,用户可参照光 盘中提供的示例程序。 4、编写完VHDL程序后,保存起来。方法同实验一。

5、对自己编写的VHDL程序进行编译并仿真,对程序的错误进行修改。 6、编译仿真无误后,根据用户自己的要求进行管脚分配。分配完成后,再进行全编译 一次,以使管脚分配生效。 7、根据实验内容用实验导线将上面管脚分配的FPGA管脚与对应的模块连接起来。 如果是调用的本书提供的VHDL代码,则实验连线如下: CLK:FPGA时钟信号,接数字时钟CLOCK3,并将这组时钟设为1024HZ。 KEY[3..0]:数码管显示输入信号,分别接拨动开关的S4,S3,S2,S1。 LEDAG[6..0]:数码管显示信号,接数码管的G、F、E、D、C、B、A。 SEL[2..0]:数码管的位选信号,接数码管的SEL2、SEL1、SEL0。 8、用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。观察实验结果是否与 自己的编程思想一致。 五、实验现象与结果 以设计的参考示例为例,当设计文件加载到目标器件后,将数字信号源模块的时钟选择为1464HZ,拨动四位拨动开关,使其为一个数值,则八个数码管均显示拨动开关所表示的十六进制的值。

基于数码管的电子时钟设计

2012~ 2013 学年第2 学期 《单片机原理及应用》课程设计报告 题目:基于数码管的电子时钟设计专业:自动化 班级: 电气工程系 2013年5月1日

1、任务书

摘要 随着人类科技文明的发展,人们对于时钟的要求在不断地提高。时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。 本设计主要基于单片机技术原理,设计制作出一个电子时钟系统。6位LED 数码管显示,使用按键扫描进行时间校准。这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。最后将设计的时钟系统在Protues仿真软件上进行仿真验证所设计的时钟系统稳定可靠。 关键词: AT89C51单片机;电子时钟;数码管;按键扫描

基于数码管的电子时钟设计 目录 摘要...................................................................................... 错误!未定义书签。第一章绪论.............................................................................. 错误!未定义书签。 1.1 单片机的应用和特点.......................................................... 错误!未定义书签。 1.2 单片机的发展趋势....................................................... 错误!未定义书签。 1.3 电子时钟简介及其基本特点....................................... 错误!未定义书签。第二章控制系统的硬件设计.................................................... 错误!未定义书签。 2.1 总方案设计................................................................... 错误!未定义书签。 2.2 单片机芯片的选择....................................................... 错误!未定义书签。 2.2.1 AT89C51的功能概述....................................... 错误!未定义书签。 2.2.2 AT89C51引脚功能说明................................... 错误!未定义书签。 2.3 单片机系统电路设计................................................... 错误!未定义书签。 2.4 按键电路设计............................................................... 错误!未定义书签。 2.5 蜂鸣器电路设计........................................................... 错误!未定义书签。 2.6 LED数码管显示电路.................................................... 错误!未定义书签。第三章控制系统的软件设计.................................................... 错误!未定义书签。第四章系统仿真........................................................................ 错误!未定义书签。第五章总结与体会.................................................................... 错误!未定义书签。参考文献...................................................................................... 错误!未定义书签。附录.............................................................................................. 错误!未定义书签。附录二元件清单...................................................................... 错误!未定义书签。

4位7段数码管驱动电路设计要求

4位7段数码管驱动电路 图1 开发板电路原理图 信号说明

1. iRST_N(异步复位) 当iRST_N信号为低时,Seg7_Driver模块中的所有寄存器异步复位为初值。 2. iCLK 模块的输入时钟40MHz。 3. iSeg_Val[15:0] 7段数码管输入二进制值,0x0~0xF iSeg_Val[15:12],左侧第一位7段数码管的值。 iSeg_Val[11: 8],左侧第两位7段数码管的值。 iSeg_Val[ 7: 4],左侧第三位7段数码管的值。 iSeg_Val[ 3: 0],左侧第四位7段数码管的值。 4. iDot_Val[3:0] 各位7段数码管小数点的显示,值为1表示显示小数点,0表示不显示小数点。 iDot_Val[3],左侧第一位7段数码管的小数点。 iDot_Val[2],左侧第两位7段数码管的小数点。 iDot_Val[1],左侧第三位7段数码管的小数点。 iDot_Val[0],左侧第四位7段数码管的小数点。 5. oDisplay[7:0] 7段数码管的数据信号。4位7段数码管共用数据信号。7段数码管为共阳极连接,各段数据线为0时,对应段发光。 6. oDis_En[3:0] 各位7段数码管的使能信号,低有效。

oDis_En[3],左侧第一位7段数码管的使能信号。 oDis_En[2],左侧第两位7段数码管的使能信号。 oDis_En[1],左侧第三位7段数码管的使能信号。 oDis_En[0],左侧第四位7段数码管的使能信号。 建议的分块: 将整个驱动电路分成Seg7_Ctrl模块与Seg7_Hex2seg模块 Seg7_Ctrl模块负责产生数码管动态显示的控制信号oDis_En的时序 Seg7_Hex2Seg模块负责将二进制值转换成数据码管显示的数据值,包括小数点的值。 注意点: 1. 动态显示过程是利用人眼的视觉残留现象来实现的,应选择适当的数码管扫描频率。可先 选择数码管的扫描显示的刷新率为125Hz(8ms),即每位数码管用2ms。 2. 完成基本功能后,可实验改变刷新率,观察数码管显示的效果,并思考原因。 3. 如果要使得数码管能够显示,A,b,C,n,o等其他字符,模块应该作怎样的修改?

数码管时钟显示(含有原理图)

简单的共阴极数码管时钟显示程序(简单、易于理解,如果想定时只要再次基础上稍作修改即可) #include #define uint unsigned int #define uchar unsigned char uchar aa,shi1,shi0,fen1,fen0,miao1,miao0; uint temp; ucharshi,fen,miao; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void delay(uint z) { uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(uchar shi1,shi0,fen1,fen0,miao1,miao0) { P2=0xfe; P0=table[shi1]; delay(1); P2=0xfd; P0=table[shi0]; delay(1); P2=0xfb; P0=0x40;//"-" delay(1); P2=0xf7; P0=table[fen1]; delay(1); P2=0xef; P0=table[fen0]; delay(1); P2=0xdf;

P0=0x40;//"-" delay(1); P2=0xbf; P0=table[miao1]; delay(1); P2=0x7f; P0=table[miao0]; delay(1); } voidinit() { temp=41760; TMOD=0x01; TH0=(65536-46080)/256; TL0=(65536-46080)%256; EA=1; ET0=1; TCON=0x10; //TR0=1; } void main() { init();//初始化子程序 while(1) { if(aa==20) { aa=0; temp++; if(temp==86400) { temp=0; } shi1=temp/3600/10; shi0=temp/3600-(shi1*10); fen1=temp%3600/60/10; fen0=temp%3600/60-(fen1*10);

#51单片机数码管时钟电路的设计_AT89C51

广东石油化工学院 《51单片机原理和实践》课程设计报告学院计算机和电子信息学院 专业 班级 学号 姓名 指导教师 课程成绩 完成日期 2010年12月27日 数码管时钟电路的设计 一、设计目的: 通过这次课程设计掌握单片机系统的基本设计步骤及设计思路,掌握汇编语言的用法及各种指令的含义,比较熟练的运用指令进行单片机系统的设计的,熟悉用KEIL软件进行汇编语言的汇编,以及把代码写入实验板中,观测代码结合实际的运行结果后进行调整,体会到编程的分析问题、确定算法、画程序流程图、编写程序、程序功能模块化的优点的各各步骤。 二、设计要求: LED数码管时钟电路采用24h计时方式,时、分、秒用六位数码管显示。该电路采用AT89C2051单片机,使用3V电池供电,只使用一个按键开关即可进入调时、省电(不显示LED数码管)和正常显示三种状态。

三、设计实验内容: 1. 硬件的设计 其采用AT89C51单片机使用设计,LED显示采用动态扫描方式实现,P0口输出段码数据,P2口输出位码数据,P1.1、P1.2接按钮开关。为了提供LED数码管的驱动电流,采用6MHz晶振。 2. 系统总体分析 系统主要包含四大模块:显示模块、时间计时模块、模式切换模块和模式设置模块。 ●显示模块:主要由主循环负责。内存中开辟了一段8字节的内存空间, 用作数据显示的字符缓冲区。主循环不断将缓冲区中的字符呈现至数码管。 ●时间计时模块:电子钟的核心模块,记录了时间的时、分、秒信息。 ●模式切换模块(MODE):切换电子钟的设置模式,包括时设置、分设 置、秒设置、闹铃开关设置、闹铃时设置和闹铃分设置。相关数据被设置时将闪烁显示。 ●模式设置模块(CONFIG):通过判断设置模式(MODE),执行相应的 设置。如时、分、秒的增1以及闹铃开关的变换。 另外,主循环还负责扫描键盘,检测相应键是否被按下,若MODE键被按下则在特定单元中登记该功能,并启动定时器1,然后返回继续执行显示功能。在定时器1中断时,被登记的功能正式执行。期间用时约10ms,用以消除机械抖动。 主循环流程图大致如下:

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

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

相关文档
最新文档