万年历数码管

万年历数码管
万年历数码管

目录

引言 (1)

第一章智能化万年历时钟电路设计仿真 (2)

1.1设计思路 (2)

1.2构成框图 (2)

第二章系统硬件电路的设计 (3)

2.1单片机的选择与参数介绍 (3)

2.2时钟功能的实现选择 (5)

2.3复位电路的选择 (5)

2.4时间调整电路的设计 (6)

2.5时间显示电路的设计 (7)

2.5.1 扫描方式的选择 (7)

2.5.2 LED数码管的选择 (7)

2.5.3 显示电路的整体实现 (9)

第三章系统程序设计与软件仿真 (10)

3.1主程序的设计 (10)

3.2仿真实验 (11)

第四章实物的制作与调试 (12)

4.1原理图的绘制与PCB的制作 (12)

4.1.1 原理图的绘制 (12)

4.1.2 PCB的绘制 (13)

4.2元件安装焊接 (14)

4.3系统的调试 (15)

PROTEL 99SE原理图 (15)

PCB板图 (16)

系统源程序 (17)

引言

电子科技日新月异,人们对现代电子设备的智能化和微型化及其精度提出了更高的要求,而单片机因其具有稳定可靠、体积小、价格低廉等特点,成为设计智能化仪器仪表的首选微控制器,因此本次我们没有选用传统的专用的时钟芯片,而是采用了AT89C51芯片,此款单片机可以使用软件对其进行在线编程,其灵活性和可靠性都相对提高。

现在是一个知识爆炸的新时代。新产品、新技术层出不穷,电子技术的发展更是日新月异。可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。因此我们需要一个定时系统来提醒这些忙碌的人。数字化的钟表给人们带来了极大的方便[1]。

近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。但是却很少知道它的内部结构以及工作原理。由单片机作为数字钟的核心控制器,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。通过键盘可以进行定时、校时功能。输出设备显示器可以用液晶显示技术和数码管显示技术。

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

通过此次实物毕业设计制作,增强了我的动手能力,把理论与实践融合在一起。同时,也进一步加深了对单片机的硬件结构的理解和巩固,编程能力也得到了提高。在此将电子钟制作过程中用到的知识进行了一些总结,并记录了遇到的问题,希望自己今后能注意。

第一章智能化万年历时钟设计方案

1.1设计思路

通过一段时间对专业书籍及多种设计方案的研究机分析,我采用了比较常用的A T89C51作为核心控制芯片,用C语言进行编程来满足设计的要求。用LED数码管来实现年、月、日, 时、分、秒的显示,在时、分、秒之间各有2个LED发光二极管来作为时间分隔符每秒随秒位闪烁一次,直观且具有美感,通过3个按钮开关可以在日期与时间间切换和对时钟进行调整,其他外接电路还有晶振电路、复位电路等等。

1.2构成框图

本设计用AT89c51作为核心控制部分,外接晶振电路与复位电路,P3口接三个按钮开关作为时间调整部分,以LED数码管作为显示部分,P0口控制数码管段选部分,P1口和P2口控制数码管位选部分。如图1-1所示:

图1-1总体系统框图

第二章系统硬件电路的设计

2.1 单片机的选择与参数介绍

我选用了比较常用且功能强大的A T89C51单片机,下面我来详细介绍该芯片的参数与功能:AT89C51是由美国Atmel 公司生产的至今为止世界上最新型的高性能八位单片机。该芯片采用FLASH存储技术,内部具有2KB字节快闪存存储器,采用DIP封装,是目前在中小系统中应用最

为普及的单片机[2]。

(1)AT89C51的功能描述

AT89C51是一种低损耗、高性能、CMOS八位微处理器,片内有4k字节的在线可重复编程、

快速擦除快速写入程序的存储器,能重复写入/擦除1000次,数据保存时间为十年。它与MCA-51

系列单片机在指令系统和引脚上完全兼容,不仅可完全代替MCS-51系列单片机,而且能使系统具

有许多MCS-51系列产品没有的功能。

AT89C51可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。只要程序长度小于4K,四个I/O口全部提供给用户。可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,与8751/87C51的12V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,适合许多嵌入式控制领域。工作电压范围(2.7V~6V),全静态工作,工作频率宽在0Hz~24MHz之间,比8751/87C51等51系列的6MHz~12MHz更具有灵活性,系统能快能慢。AT89C51芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。

(2)AT89C51引脚功能

AT89C51单片机为40引脚芯片如图2-1所示,在本设计中,主要用到P0口、P2口、P1.0口及P3.0、P3.1、P3.2口。

图2-1 A T89C51引脚图

AT89S51具有PDIP,TQFP和PLCC三种封装形式。上图就是PDIP封装的引脚排列,有40个引脚,32个外部双向输入/输出(I/O)端口;具有两个16位可编程定时器;中断系统是具有6个中断源、5个中断矢量、2级中断优先级的中断结构;震荡器频率0到33MHZ,因此我们在此选用12MHZ 的晶振是比较合理的;具有片内看门狗定时器;具有断电标志POF等等。

P0口可作为通用I/O口,但须外接上拉电阻;作为输出口,每各引脚可吸收8各TTL的灌电流。作为输入时,首先应将引脚置1。P0也可用做访问外部程序存储器和数据存储器时的低8位地址/

数据总线的复用线。在该模式下,P0口含有内部上拉电阻。在FLASH编程时,P0口接收代码字节数据;在编程效验时,P0口输出代码字节数据(需要外接上拉电阻)。

P1口:8位、双向I/0口,内部含有上拉电阻。

P1口可作普通I/O口。输出缓冲器可驱动四个TTL负载;用作输入时,先将引脚置1,由片内上拉电阻将其抬到高电平。P1口的引脚可由外部负载拉到低电平,通过上拉电阻提供电流。

在FLASH并行编程和校验时,P1口可输入低字节地址。在串行编程和效验时,

P1.5/MO-SI,P1.6/MISO和P1.7/SCK分别是串行数据输入、输出和移位脉冲引脚。

P2口:具有内部上拉电阻的8位双向I/O口。

P2口用做输出口时,可驱动4各TTL负载;用做输入口时,先将引脚置1,由内部上拉电阻将其提高到高电平。若负载为低电平,则通过内部上拉电阻向外部输出电流。

CPU访问外部16位地址的存储器时,P2口提供高8位地址。当CPU用8位地址寻址外部存储时,P2口为P2特殊功能寄存器的内容。

在FLASH并行编程和校验时,P2口可输入高字节地址和某些控制信号。

P3口:具有内部上拉电阻的8位双向口。

P3口用做输出口时,输出缓冲器可吸收4各TTL的灌电流;用做输入口时,首先将引脚置1,由内部上拉电阻抬位高电平。若外部的负载是低电平,则通过内部上拉电阻向输出电流。

在与FLASH并行编程和校验时,P3口可输入某些控制信号。P3口除了通用I/O口功能外,还有替代功能如表2-1所示。

表2-1 P3口的第二功能

2.2时钟功能的实现选择

方案一:采用实时时钟芯片。

实时时钟芯片具备年、月、日、时、分、秒计时功能和多点定时功能,计时数据的更新每秒自动进行一次,不需程序干预。计算机可通过中断或查询方式读取计时数据进行显示,因此计时功能的实现无需占用CPU的时间,程序简单。此外,实时时钟芯片多数带有锂电池做后备电源,具备永不停止的计时功能;具有可编程方波输出功能,可用做实时测控系统的采样信号等;有的实时时钟芯片内部还带有非易失性RAM,可用来存放需长期保存但有时也需变更的数据。由于功能完善,精度高,软件程序设计相对简单,且计时不占用CPU时间,因此,在工业实时测控系统中多采用这一类专用芯片来实现实时时钟功能。

方案二:软件控制。

利用单片机内部的定时/计数器进行中断定时,配合软件延时实现时、分、秒的计时及秒表计时。该方案节省硬件成本,且能使设计者对单片机的指令系统能有更深入的了解,从而掌握单片机应用技术MCS-51汇编语言程序设计方法,因此,本系统设计采用此种软件控制方法来实现计时。而由于A TMEL公司的A T89C51单片机是低功耗的具有4KB在线可编程Flash存储器的单片机。它与通用80C51系列单片机的指令系和引脚兼容。片内的Flash可允许在线重新编程,也可使用通用非易失性存储器编程。它将通用CPU和在线可编程Flash集成在一个芯片上,形成了功能强大、使用灵活和具有较高性能价格比的微控制器。它的功能强大,而且也较容易购买[3]。

总结:我所要实现的功能通过单片机编程就可以达到,不需要额外的时钟芯片来增加成本,并使外围电路更加简单明了。

2.3复位电路的选择

目前为止,单片机复位电路主要有四种类型:(1)微分型复位电路;(2)积分型复位电路;(3)比较器型复位电路;(4)看门狗型复位电路。我列举了2种方案进行比较:方案一:采用手动复位,该方法线路简单。在系统运行过程中,有时可能需要对系统进行复位,以避免对硬件经常加电或断电而造成的伤害,我们可以采用手动复位的方式。如图2-2所示。

图 2-2 手动上电复位电路

方案二:阻容上电自动复位电路,这种电路线路也简单,它利用电容上电压不能突变而是按指数规律上升或下降的特性,产生所需的复位脉冲。优点:使用最为普遍且成本低廉的复位电路。

图 2-3 自动复位电路

总结:这两种方案对我的设计影响其实差别不大,根据我的电路所需要的就是选取最简单的电路即可,显然方案二元件和电路更加简单,所用原件更少,所花成本更少。

2.4 时间调整电路的设计

我采用了独立式按键设计,如图2-4所示,独立式按键直接与单片机I/O口相连构成键盘[4],每个按键不会相互影响,因本系统用到的按键比较少,采用独立式键盘不会浪费I/O口线,所以本系统采用独立式键盘。按键一端接地,一端接于P3.0、P3.1、P3.2口,并接10K的上拉电阻,按下开关时就会向单片机输入低电平,触发程序跳转。按下跳转键可以开始调时,多按几次就会在秒分时,日月年之间切换,按下+键可以调高数值,按下—键可以调低数值,做到了功能齐全且元件消耗最好。

图2-4 时间调整电路

2.5 时间显示电路的设计

2.5.1 扫描方式的选择

我选用LED数码管作为显示部分的主要元件,数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类[5]。

方案一:静态显示驱动

静态显示就是显示驱动电路,具有输出锁存功能。当显示器显示某个字符时,相应的段恒定的导通或截止,直到显示另一个字符为止。即单片机将所有要显示的数据送出后就不再控制LED,直到下一次显示时再传送一次新的显示数据。静态显示的数据稳定,数码管的亮度较高,占用的CPU时

间少,程序容易,管理简单,但占用的I/O线资源教多。静态显示中,每一个显示器都要占用单独的具有锁存功能的I/O接口,该接口用于笔划段字型代码。这样单片机只要把要显示的字形代码发送到接口电路,该字段就可以显示发送的字形。要显示新的数据时,单片机在发送新的字形码。动态扫描方法是用其接口电路把所有显示器的8个笔画段a~h同名端连在一起,而每一个显示器的公共极COM各自独立的受I/O线控制。CPU向字段输出口送出字形码时,所有显示器接收到相同的字形码,但究竟是哪个显示器亮,则取决于COM段,而这一段是由I/O控制的,由单片机决定何时显示哪一位了。优点:程序简单,亮度高。缺点:所占I/O口过多,不适合数目多的数码管设计课题。

方案二:动态显示驱动

数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2mS,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。

总结:我所要用到的数码管共有14位,更加适合用动态扫描。

2.5.2LED数码管的选择

LED数码管分为共阴和共阳两种,以利用A T89C51灌电流比较大的特点作为数码管的位选,而段码则由上拉电阻驱动,用共阴数码管会使电路更加简单,共阴数码管管脚图与内部结构图如图2-5与图2-6所示:

图2-5 共阴数码管引脚图2-6 共阴数码管内部结构

C语言中数码管十六进制数字型代码如表2-2所示。

表2-2 十六进制数字型代码

怎样测量数码管引脚,分共阴和共阳:找公共共阴和公共共阳首先,我们找个电源(3到5伏)和1个1K(几百的也欧的也行)的电阻,VCC串接个电阻后和GND接在任意2个脚上,组合有很多,但总有一个LED会发光的找到一个就够了,,然后用GND不动,VCC(串电阻)逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阴的了。相反用VCC不动,GND逐个碰剩下的脚,如果有多个LED(一般是8个),那它就是共阳的。也可以直接用数字万用表,红表笔是电源的正极,黑表笔是电源的负极[6]。

2.5.3 显示电路的整体实现

如图2-7所示,显示电路共包含14位数码管外加4个LED发光二极管,数码管的段选部分由P0口控制,即数码管的段选端并联与P0口,数码管的段控端a、b、c、d、e、f、g、dp分别接到P0口的P0.0、P0.1、P0.2、P0.3、P0.4、P0.5、P0.6、P0.7口线上,段选部分与P0口之间接上拉电阻来输入高电平与增强驱动电流,电阻的大小可影响数码管的亮度,由于我没有外加其他驱动电路因此我选择1K的排阻来增加驱动能力;数码管的位选由P1口和P2口控制,每个数码管的位控线单独占用单片机P1口和P3口一根输出口线,如果发现数码管还是不够亮的话,可在位选端加NPN三极管放大电流,此时要加限流电阻以免数码管被烧。在时分秒之间我各设置了2个LED做为时间分隔符来随秒位每秒闪烁一次,更加的美观[7]。

图2-7 数码管显示部分

第三章系统程序设计与软件仿真

系统程序采用C语言按模块化方式进行设计,然后通过Keil C51软件开发平台将程序转变成十六进制程序语言,得到HEX文件,接着使用Proteous进行仿真,其次,按照Proteous 的仿真电路图,在Protel 99SE中完成电路板的逻辑布局及布线。

3.1 主程序的设计

系统程序主要包括主程序,读出时钟子程序和显示数据刷新子程序。程序详情请看程序附件;

图3-1 主程序流程图1

图3-2 主程序流程图2

程序能够智能计算闰年、闰月,并通过查表方式区分大、小、平、润月是否分别为31、30、28、29来正确显示每月天数[8]。

3.2 仿真实验

经过老师的指导以及查看了许多的资料书籍,终于完成了程序的编辑,并学会了Keil C51将C 程序文件转变成十六进制程序语言HEX文件。Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起[ 9]。

我的仿真软件采用了Proteus来对我的设计进行仿真,Proteus(海神)的ISIS是一款Labcenter出品的电路分析实物仿真系统,可仿真各种电路和IC,并支持单片机,元件库齐全,使用方便,是不可多得的专业的单片机软件仿真系统。仿真图如图3-3所示。

图3-3 电路仿真图

仿真图完全达到了设计要求及预期,经过对程序的些微调整后马上进行实物的制作。

第四章实物的制作与调试

要完成一项设计理论知识当然十分重要,也是基础,但实际动手能力也要多加学习才能事半功倍。

4.1 原理图的绘制与PCB的制作

4.1.1 原理图的绘制

(1)在Protel 99se中先新建一个工程,把所需要的元件载入到文档里面。

(2)画好元件库与封装库里的没有的元件原理图与封装。

(3)再按照系统电路图绘制导线,把元件连好线。

(4)通过电气检查如果没有错误,那么系统的电路图就绘制完成。

原理图如图4-1所示,由于默认元件库和封装库里没有我要用到的双位数码管和四位数码管,于是我学习动手画好,我的设计线过多,为了能更准确得查看疏漏我采用了网络标号的方式,网络标号也是越来越被专业绘图人员所采用[10]。

图4-1 Protel 99se电路原理图

4.1.2 PCB的绘制

将画好的原理图转为PCB图,设置好规则开始布线,由于我的连线十分复杂,这方面花了我很大一部分精力,也使我更加了解了Protel 99se这个软件的功能,而且学校PCB板的大小有限制最大只有12*10cm的板子,我的PCB要远大于这个数值,所以我把原来的PCB分成2部分来完成:单片机部

分与数码管显示部分,两部分通过导线连接。如图4-2和4-3所示:

图4-2 PCB单片机部分

图4-3 PCB 数码管显示部分

4.2元件安装焊接

一、安装元件时应注意以下原则:

(1)为避免因元器件发热而减弱铜箔对基板的附着力,并防止元器件的裸露部分同印制导线短路,安装时元器件应离开面板约1~2mm。

(2)装配时,应该先安装那些需要机械固定元器件,在此装置中如稳压管、中心芯片插座。

(3)各种元器件的安装,应该使它们的标记(用色码或字符标注的数值,精度等)朝上面或易于是辨认的方向,并注意标记的读书方向一致(从左到右或从上到下)。

(4)在安装元件时应与焊接同步进行操作。

二、焊接注意的基本事项

在电子制作过程中,焊接工作是必不可少的。它不但要求将元件固定在电路板上,而且要求焊点必须牢固、圆滑,所以焊接技术的好坏直接影响到电子制作的成功与否,焊接时要注意以下几点:(1)焊接方法:焊接时应掌握焊接的温度和焊接的时间,使电烙铁的温度高于焊锡的温度,但也不能太高,以烙铁头接触松香刚刚冒烟为好。焊接时间太短,焊点的温度过低,焊点融化不充分,焊点粗糙容易造成虚焊,反之焊接时间过长,焊锡容易流淌,并且容易使元件过热损坏元件。同样地,要掌握焊接点的上锡数量,焊接点上的焊锡数量不能太少,太少了焊接不牢,机械强度也太差。而太多容易造成外观一大堆而内部未接通。焊锡应该刚好将焊接点上的元件引脚全部浸没,轮廓隐约可见为好。最后,要注意烙铁和焊接点的位置,有些人在焊接时,一般将电烙铁在焊接处来回移动或者用力挤压,这种方法是错误的。正确的方法是用电烙铁的焊锡面去接触焊接点,这样传热面积大,焊接速度快。

(2)焊接后的检查:焊接结束后必须检查有无漏焊、虚焊以及由于焊锡流淌造成的元件短路。虚焊较难发现,可用镊子夹住元件引脚轻轻拉动,如发现摇动应立即补焊。

(3)对于不同的器件,焊接时的具体操作一般不同:焊接一般元件时,将插好元件的印制板焊接面朝上,左手拿焊锡丝,右手持电烙铁,把烙铁头贴着元件的引线加热,使焊锡丝在高温下熔化,沿着引线下流动,直至充满焊孔并覆盖引线周围的金属部分。然后撤去焊锡丝,并沿着引线向上提拉烙铁头,形成像水滴一样光亮的焊点。焊接速度要快,一般不超过3S,以免损坏元件;焊接晶体管等器件时,可用镊子或尖嘴钳夹住管脚进行焊接,因镊子和钳子具有散热作用,可以保护器件;焊接集成电路时,双列直插式集成电路块的管脚之间距离只有25mil,焊点过大,会造成相邻管脚短路。应采用尖头电烙铁,快速焊接。电烙铁温度不能太高,焊接时间不能太长,否则,会烧坏集成块并使印制板上的导电铜箔脱离,所以焊接时一定要特别细心[11]。

4.3 系统的调试

实物终于完成,调试工作也是非常重要的一个环节,它直接关系到系统能否正常工作。经过对PCB板上的焊接、导线反复地检查是否有虚焊、漏焊、错焊后,开始进入电源调试阶段。我的V CC 采用5V直流稳定的电压,在开始时系统自动通过复位电容实现开机瞬时自动复位,现象为显示部分的数码管与LED全部一闪而过,随后年、月、日,时、分、秒显示正常,发现外加的LED闪烁部分并未亮起,检查后发现有根导线焊错了,没有检查到,于是马上修正,再次调试,发现显示部分完美运行。显示部分已经成功。接下来进入调时部分的测试,按下K1进入调时模式,按下K2键上调数值,按下K3键下调数值,功能与预期一致,很幸运并没有出现各种大的意外。达到了设计的要求与老师的预期。毕业设计实物部分完毕。

Protel 99se原理图

Protel 99se原理图PCB板图

单片机控制部分PCB图

数码管显示部分pcb图系统源程序

#include

unsigned char code dispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};//共阴极unsigned char dispbitcode[]={0x00,0x21,0x42,0x63,0x84,0xA5,0xC6,0xE7};//管子的选择

unsigned char dispbuf[8]={0,0,10,0,0,10,2,1}; //16为显示间断号符

unsigned char dispbym[8]={1,2,7,0,6,0,0,2};

unsigned char dispbitcnt;

unsigned char second;

unsigned char minite;

unsigned char hour;

unsigned char day;

unsigned char month;

unsigned char yearh;

unsigned char yearl;

unsigned int tcnt;

unsigned char mstcnt;

unsigned char i,j;

void main(void)

{

TMOD=0x02; //设置模式为定时器T0的模式2 (8位自动重装计数初值的计数值)

TH0=0x06; //设置计数器初值,靠TH0存储重装的计数值X0=256-250=6 TL0=0x06;

TR0=1; //启动T0

ET0=1; //开启定时器T0中断允许

EA=1; //开启中断总控制

yearh=20;

yearl=6;

month=7;

day=21;

hour=12; //初始值为12:00:00

while(1)

{

if(P0_0==0) //扫描秒钟按钮

{

for(i=5;i>0;i--) //按钮抖动消除

for(j=248;j>0;j--); //计时

if(P0_0==0)

{

second++;

if(second==60)

{

second=0;

}

dispbuf[0]=second%10;

dispbuf[1]=second/10;

while(P0_0==0);

}

}

if(P0_1==0) //扫描分钟按钮

{

for(i=5;i>0;i--)

for(j=248;j>0;j--);

if(P0_1==0)

{

minite++;

if(minite==60)

{

minite=0;

}

dispbuf[3]=minite%10;

dispbuf[4]=minite/10;

while(P0_1==0);

}

}

if(P0_2==0) //扫描时钟按钮

{

for(i=5;i>0;i--)

for(j=248;j>0;j--);

if(P0_2==0)

{

hour++;

if(hour==24)

{

hour=0;

}

dispbuf[6]=hour%10;

dispbuf[7]=hour/10;

while(P0_2==0);

}

}

if(P0_3==0)

{

for(i=5;i>0;i--)

for(j=248;j>0;j--);

if(P0_3==0)

{

day++;

if(month==2&&((yearl==0&&yearh%4==0)||(yearl!=0&&yearl%4==0))&&day==30)day=1;

数字万年历的制作

数字万年历的制作 数字显示万年历,它采用一枚专用软封装的时钟芯片,驱动15只红色共阳极数码管,可同时显示公历年、月、日、时、分、星期,以及农历月、日,还有秒点显示和整点报时、定时闹钟功能,使用220V市电供电,预留有备用电池座,外形尺寸为长21cm×宽14.5cm×厚3cm,最厚处6cm,适合放置在办公桌面上使用,具有很好的实用性。成品外观如图1所示。 图1 图2 原理简介 电路原理图如图2所示,为了读图方便,连线稍作了简化。从图中可以看出,IC1是一枚专用时钟芯片,Y1是32768Hz的晶振,为芯片提供时基频率信号,经过芯片内部处理后,输出各显示位的驱动信号,经过PNP(8550)型三极管做功率放大后驱动各数码管显示。芯片采用了动态扫描的输出

方式,由于人眼存在视觉暂留现象,且扫描速度比较快,因此看上去所有数码管都是在显示的。这种方式可以有效减少芯片的输出引脚数量,简化了线路,降低了功耗。 在电源部分中,整流二极管VD1~VD4组成了桥式整流电路,将变压器输出的交流电转换为直流电,经C6滤波后,送至三端稳压块7805,输出5V直流稳压电源,为电路供电。VD3和VD8组成互相隔离的供电电路,目的是在市电停电时,后备纽扣电池通过VD3,自动为芯片IC1提供后备电源,保证芯片计时数据不中断。同时由于VD8、VD9的存在,后备电池将不再向数码管供电,以节约后备电池的耗电量。由于芯片自身耗电较低,因此靠纽扣电池也可以维持芯片在很长时间里,内部计时不中断。当市电恢复后,7805输出经过VD8、VD9分别向芯片和数码管供电,由于DV3的存在,且纽扣电池电压为3V,低于7805输出的5V,因此纽扣电池将自动停止供电,7805输出也不会对纽扣电池充电。 VT9是唯一一只NPN(8050)型三极管,用于驱动喇叭,做为整点报时和定闹发声。LED10、LED14是用于秒点显示的发光二极管,LED11和LED12分别是整点报时显示和定闹显示的发光二极管,均为红色。 图3是万年历的全套散件的照片。表1是元器件清单。 图3 表1 元器件清单 序号元件名称参数元件数量序号元件名称参数元件数量 1 电阻10Ω 1 21 三极管8050 1 2 电阻33Ω8 22 三端稳压块7805 1 3 电阻47Ω 3 23 晶振32768Hz 1 4 电阻75Ω7 24 IC1软封装芯片 1 5 电阻100Ω 1 25 0.5’数码管红11 6 电阻150Ω8 26 0.8’数码管红 4

电子万年历课程设计报告

课程:创新与综合课程设计 电子与电气工程系 实践教学环节说明书 题目名称电子万年历 院(系)电子与电气工程学院 专业电子信息工程 班级119411 学号1109635010 学生姓名11 指导教师q1 起止日期13周周一~14周周五

电子万年历 一.设计目的 设计一个具有报时功能、停电正常运行(来电无需校时)、带有年月日、时分秒及星期显示的电子日历。 二.方案设计 硬件控制电路主要用了AT89S52芯片处理器、LCD1602显示器等。根据各自芯片的功能互相连接成电子万年历的控制电路。软件控制程序主要有主控程序、电子万年历的时间控制程序、时间显示及星期显示程序等组成。主控程序中对整个程序进行控制,进行了初始化程序及计数器、还有键盘功能程序、以及显示程序等工作,时间控制程序是电子万年历中比较重要的部分。时间控制程序体现了年、月、日、时、分、秒及星期的计算方法。时间控制程序主要是定时器0计时中断程序每隔10ms中断一次当作一个计数,每中断一次则计数加1,当计数100次时,则表示1秒到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否1天到了,再判断是否1月到了,再判断是否1年到了,若计数到了则相关变量清除0。先给出一般年份的每月天数。如果是闰年,第二个月天数不为28天,而是29天。再用公式s=v-1 +〔(y-1/4〕-〔(y-1/100〕+〔(y-1/400〕+ d计算当前显示日期是星期几,当调节日期时,星期自动的调整过来。闰年的判断规则为,如果该年份是4或100的整数倍或者是400的整数倍,则为闰年;否则为非闰年。在我们的这个设计中由于只涉及100年范围内,所以判断是否闰年就只需要用该年份除4来判断就行了。 三.系统的设计框图 本系统以AT89S52单片机为核心,结合时钟芯片DS1302,LCD1602,键盘等外围器件,实现电子万年历的一系列功能,并通过液晶屏和按键控制完成人机交互的功能。系统总体设计框图如图(1)所示

ds1302数码管显示应用

DS1302应用 刚学单片机,好多好奇,所以想做个简单的时钟。下面是PROTEUS仿真电路和电路图,简单易懂。 文笔不好,说了多余。下面是程序。 #include #include #include #define uint unsigned int #define uchar unsigned char #define BCDTUAN(str) (str/10*16+str%10) //定义宏,将要写入DS1302的时间转化为BCD码 #define Write_Sec 0x80 #define Write_Min 0x82 #define Write_Hou 0x84 #define Write_Dat 0x86 #define Write_Mon 0x88 #define Write_day 0x8a #define Write_Yea 0x8c #define Write_WP 0x8e //写保护位 #define Write_TCR 0x90 #define Read_Sec 0x81 #define Read_Min 0x83 #define Read_Hou 0x85 #define Read_Dat0x87 #define Read_Mon 0x89 #define Read_Day 0x8b #define Read_Yea 0x8d #define CLK_BurstW 0xbf //时钟突发模式写 #define CLK_BurstR 0xbf //时钟突发模式读 #define Write_RAM_Begin 0xc0 //RAM第一个字节写指令 #define Read_RAM_Begin 0xc1 //RAM第一个字节读指令 #define RAM_BurstW 0xfe //突发模式写RAM #define RAM_BurstR 0xff //突发模式读RAM sbit _74hc154_A = P1^0; sbit _74hc154_B = P1^1; sbit _74hc154_C = P1^2; sbit _74hc154_D = P1^3; sbit CE =P1^6; sbit SCLK=P1^5; sbit IO =P1^4; uchar code scan[][4]={{0,0,0,0},{0,0,0,1},{0,0,1,0},{0,0,1,1}, {0,1,0,0},{0,1,0,1},{0,1,1,0},{0,1,1,1}, {1,0,0,0},{1,0,0,1},{1,0,1,0},{1,0,1,1},

万年历数码管显示设计及键盘控制设计final

万年历数码管显示及其键盘控制设计 组长:康智勇 组员:王辉 王玉 王天龙 付晓蓉 2008年08月08日

目录 前言 (3) 一、总体方案设计(方案的对比) (4) 二.单元模块设计(设计细节) (5) (一)烧写板 (5) (二) 单片机最小系统板 (7) (三) 4-16译码器驱动数码管控制板 (12) (四) 数码管显示板 (13) (五) 键盘控制板 (14) (六) DS12C887功能板 (14) 三、系统功能说明(结果说明) (20) 四、设计总结(心得体会) (20) 五、改进方案: (21) 附录: (22) 【参考文献】: (22) 【电路原理图】: (23) 【程序清单】: (28) 【流程图】: (47) 【键盘使用说明】 (49)

前言 目前,计算机技术的发展分为两大分支:通用计算机系统与嵌入式计算机系统。嵌入式计算机系统是面向测控对象嵌入到应用系统中的计算机系统的统称,而单片机则是一种经典的嵌入式系统。 从广义上讲,将微型计算机的主要功能部件集中在一块单芯片上的微型计算机称为单片机,这一类计算机又称为微控制器MCU(Micro Control Unit)。由于单片机集成度高、体积小、功能强、速度快、功耗低、抗干扰能力强等优点,它在智能仪器、工业测控、日常生活及家电中等得到了广泛的应用。万年历的数码管显示及键盘控制就是单片机的开发过程中的一个经典的应用。 在国内市场中存在着很多种不同厂家生产的不同类型的单片机,在本次设计中我们选用Atmel公司MCS-51系列兼容单片机中的AT89S51单片机。AT89S51单片机是一个低功耗高性能CMOS 8位单片机,40个引脚,片内含4KB Flash ROM和128B ROM,32个外部双向输入输出(I/O)接口,同时内含两个外中断口,两个16为可编程定时计数器,两个全双工串行通信口,它的最大的一个特点就是支持在线更新程序(In System Programmable,ISP)功能。 本设计中除了选用了单片机进行显示和键盘控制外,还需要一个主要的芯片就是美国DALLAS公司的新型时钟日历芯片DS12C887。DS12C887是一个能够自动产生世纪、年、月、日、时、分、秒等时间信息,而且DS12C887中自带有锂电池,外部掉电时,其内部时间信息还能够保持10年之久,因此各种设备、家电、仪器、工业控制系统中,可以很容易地用DS12C887来组成时间获取单元,以实现各种时间的获取。本次设计中正是利用它的这一性能来获取准确的时间信息。 本次设计中需要硬件和软件两方面的结合。在硬件方面,需要准备烧写板、单片机最小系统板、4-16译码器驱动数码管控制板、数码管显示板、键盘控制板、DS12C887功能板等硬件;在软件选择了Protel Technology公司开发的具有PDM 功能的强大的EDA综合设计环境Protel 99SE来进行原理图设计、PCB(印刷电路板)设计,选择了Keil Software公司推出的Keil C51的集编译器、汇编器、实时操作、项目管理器、调试器于一体的集成开发环境uVision3。 本次设计的成功离不开本组组员在实习期间的不懈努力,在必要情况下的加班加点。在整个设计过程中,本组组员本着认真负责的精神,本着“没有最好,只有更好”的原则,采取“团结一致、分工合作”的措施,终于成功的设计出了万年历的数码管显示及键盘控制。 当然,本次设计中我们也遇到了很多的问题,本次设计的成功离不开本组组员的共同努力,更离不开老师和师兄及其他组员等的帮忙,在此本组组员衷心的感谢周庆国老师、赵庆林老师、王绍伟老师、刘钰力师兄、姚琪师兄等,谢谢你们不厌其烦地给予我们帮助。 时间过得很快,实习将近尾声,但是本次实习中的收获、经历及组员间建立起来的友谊将在本组组员的脑海中留下抹不去的青春的痕迹。

基于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结束语............................................................................................................................................................

带温度显示的万年历_数码管显示(附电路图和源代码)

设计报告 设计任务: 设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。并能准确计算闰年闰月的显示。设计要求: 通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术所连线路和单片机接口仿真图如图3所示: 图3 仿真按键 4)温度采集部分: DS18B20温度传感器,测温范围-55℃~+125℃,固有测温分辨率0.5℃。独特的单线接口方式,DS18B20在与微处理器

连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。DS18B20的采集数据通过DQ传入单片机,单片机读取数据后将数据输出!如图所示 : 程序如下: ReadOneChar(void) { unsigned char i=0;// 定义i用于循环 unsigned char dat = 0;// 读取的8位数据 for (i=8;i>0;i--)//8次循环 { DQ = 0;// 拉低DQ总线开始读时序 dat>>=1;// dat左移一位 DQ = 1; //释放DQ总线 if(DQ)// 如果DQ=1,执dat|=0x80;(0x80即第7位为1,如果DQ为1,即读取的数据为1,将dat的第7为置1,然后dat>>=1,循环8次结束,dat 即为读取的数据) //DQ=0,就跳过 dat|=0x80; Tdelay(4);// 延时以完成此次读时序,之后再读下一数据 } return(dat); 返回读取的dat } //写一个字节 WriteOneChar(unsigned char dat) { unsigned char i=0;// for (i=8; i>0; i--)// { DQ = 0;// DQ = dat&0x01;// Tdelay(5);//延时以完成此次读时序,之后再读下一数据

北极星数码万年历使用说明书

北极星数码万年历 北极星数码万年历使用说明书 操作说明 1、按键说明:设置键、上调键、下调键、流水开关键。 2、时间调整在正常走时状态下,按“设置”键进入时间设置状态,同时年份“闪烁”,可按“上调”或“下调”键修改年份,修改好后按“设置”键将闪烁位移到公历“月”,按“上调”或“下调”键修改月份;用同样的方法可对日、时、分进行设置;12个公历节日及倒计天数、24个农历节气及倒计天数、12生肖、12星座、星期、农历月、日将自动跟随公历的变化。当分设定好后,再按“设置”键退出时间设置,回到正常时间状态。 3、节气灯花样转换在正常走时状态下,按住“设置”键3秒钟即可进入节气灯花样转换。 4、12/24小时制切换在正常走时状态下,按住“上调”键3秒钟,则可进行12小时制与24小时制的切换。上电复位时,可默认为24小时制或12小时制,由选项决定。 5、开/关整点报时在正常走时状态下,按住“下调”键3秒钟听到“嘀”一声,则可以打开或关闭整点报时功能。 6、天数倒计时或顺计时(由选项决定)在正常时间状态下,按“模式”键进入“天数计时状态”,在温度位显示“d1”,计时天数位若显示“――――”,表示计时“无效”;若显示具体数字表示有效,按“上调”键可以切换“有效”/“无效”,按“设置”键进入天数设定,且左边第一位(千位)闪烁,按“上调”或“下调”键修改内容,按“设置”键移动闪烁位置到第二位(百位),按“上调”或“下调”键修改闪烁位的内容,同样方法可设置十位与个位 7、闹钟 8组定闹(由按键选项决定),默认值无效,默认时间为――:――点,闹钟设定:在正常时间状态下(或天数计时状态),按“下调”键进入“定闹查询状态”,定闹指示灯点亮,在温度位显示“A1”,表示当前你看到的是“第1组定闹”的信息,在小时、分钟位显示“――∶――”,表示定闹“无效”;显示“XX∶XX”的具体时间,表示定闹“有效”,按“上调”键可以切换“有效”/“无效”,按“设置”键进入定闹时间设定,且小时位闪烁,按“上调”或“下调”键修改闪烁位的内容,按“设置”键移动闪烁位置到分钟位,按“上调”或“下调”键修改闪烁位的内容,再按“设置”键确认并退出定闹时间设定,再按“下调”键进入下一组闹铃状态,其设置与“第1组定闹”相同,依次类推即可设置所有定闹。 8、生日提醒①7组生日提醒,默认值无效。②生日提醒设定:在最后一组定闹状态,再按一次“下调”键则进入第一组生日提醒,生日提醒指示灯点亮,在温度位显示“b1”,在公历“月日位”显示有效“生日日期”或无效日期“――――”,则表示生日以“公历日期”为准,若在农历“月日位”显示则表示生日以农历日期为准;按“上调”键可“打开/关闭”该组生日提醒,按“设置”键进入“该组生日提醒日期”设置,按“上调”或“下调”键修改其内容,按“设置”键移动闪烁位置,再按“设置”键确认该组生日提醒设置,再按“下调”键进入下一组生日提醒,依次类推即可设置所有生日提醒,当在最后一组生日提醒时,按“下调”键则退到正常时间状态若闹铃中没有一组设置有效,则定闹指示灯熄灭,在任何闹铃时间到正在响闹 北极星数码万年历使用说明书第1页共2页

基于DS1302与数码管设计的可调数字钟

学习情境2-可调式数字钟 之基于DS1302与数码管设计的可调数字钟 ☆点名,复习 1、定时器的工作方式有哪些?如何对定时器进行初始化。 2、数码管动态显示技术的原理? ☆新课讲授 2.2 基于DS1302与数码管设计的可调数字钟 前面我们用定时器产生1秒的时间,从而也设计出了可以调节数字钟,但用这种方法设计出来的电子钟不够准确。这节课我们用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路DS1302 ,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。同时,我们还是用数码管作为显示时间的硬件。 2.2.1 DS1302芯片技术资料 DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM 数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。 图 1 DS1302引脚 图2 DS1302内部结构 1、引脚功能及结构

DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK 始终是输入端。 2 、DS1302的寄存器和控制命令 对DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM,当为0时,表示AM。在24小时模式时,位5是第二个10小时位。 秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。 控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。 日历、时间寄存器及控制字如表1所示: 此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。DS1302内部的RAM分为两类,一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制字为COH~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

电子万年历

河北科技师范学院课程设计说明书 题目: 学院(系): 年级专业: 学号: 学生姓名: 指导教师:

摘要 本设计是电子万年历。具备三个功能:能显示:年、月、日、时、分、秒及星期信息,并具有可调整日期和时间功能。 我选用的是单片机8052来实现电子万年历的功能。该电子万年历能够成功实现时钟运行,调整,显示年月日时分秒及星期,温度等信息。 该电子万年历使用12MHZ晶振与单片机8052相连接,通过软件编程的方法实现了以24小时为一个周期,同时显示小时、分钟和秒的要求。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据。同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。 电子万年历设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,这样一来就降低了硬件电路的复杂性,从而使得其成本降低,更适合我们大学生自主研发。所以在该设计与制作中我选用了单片机8052,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, 单片机8052的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。 因此,采用单片机8052原理制作的电子万年历,不仅仅在原理上能够成功实现计时等功能,也更经济,更适用,更符合我们实际生活的需要,对我们大学生来说也更加有用。

TM1638芯片+DS1302驱动共阴数码管时钟

一、概述 二、51单片机,TM1638芯片+DS1302驱动共阴数码管时钟,最后包括 按键检测程序(是分开的。) TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。主要应用于冰箱、 空调、家庭影院等产品的高段位显示屏驱动。 二、特性说明 ?采用功率CMOS 工艺 ?显示模式 10 段×8 位 ?键扫描(8×3bit) ?辉度调节电路(占空比8 级可调) ?串行接口(CLK,STB,DIO) ?振荡方式:RC 振荡(450KHz+5%) ?内置上电复位电路 ?采用SOP28封装 三、、管脚定义:

电路图数码管:

程序代码: /*************** TM1638.H头文件*******************/ #ifndef _TM1638_H #define _TM1638_H //引脚定义 sbit DIO=P1^0; sbit CLK=P1^1; sbit STB=P1^2; //写一个8Bit数据 void TM1638_Write(unsigned char DATA) //写数据函数{ unsigned char i; for(i=0;i<8;i++) { CLK=0; if(DATA&0X01) DIO=1; else DIO=0; DATA>>=1; CLK=1; } } /*unsigned char TM1638_Read(void) //读数据函数{ unsigned char i; unsigned char temp=0; DIO=1; //设置为输入 for(i=0;i<8;i++) { temp>>=1; CLK=0; if(DIO) temp|=0x80; CLK=1; } return temp; } */ void Write_COM(unsigned char cmd) //发送命令字 { STB=0;

基于51单片机电子万年历设计

基于51单片机电子万年历设计 专业:机电设备维修与管理姓名:杜洪浦指导老师: 摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分和秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3到5V电压供电。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路以及串口下载电路等组成。在单片机的选择上使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序,显示程序等。程序采用汇编语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。 关键词时钟电钟,DS1302,液晶LCD1602,单片机 目录 1设计要求与方案论证 (2) 1.1 设计要求 (2) 1.2 系统基本方案选择和论证 (2) 1.2.1单片机芯片的选择方案和论证 (2) 1.2.2 显示模块选择方案和论证 (3) 1.2.3时钟芯片的选择方案和论证: (3) 1.3 电路设计最终方案决定 (3) 2系统的硬件设计与实现 (3) 2.1 电路设计框图 (4) 2.2 系统硬件概述 (4) 2.3 主要单元电路的设计 (4) 2.3.1单片机主控制模块的设计 (4)

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

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

摘要 本课题通过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前言

数码管模块化显示电子万年历

数码管显示模块化显示电子万年历 数码管共阳极7407驱动共阴极max7221/7419驱动 Ds1302 实时时间显示 Ds18b20 温度显示芯片 /*delay.h*/ #ifndef _DELAY_H #define _DELAY_H_ #define uint unsigned int #define uchar unsigned char void delay(uint xms); //秒级延时 void delayms(uint xms); //毫秒级延时,不可以更改,若更改,DS18B20将显示异常#endif /*delay.c*/ #include "delay.h" void delay(uint xms) { uint i; uchar j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void delayms(uint xms) //毫秒级别延时 {

while(xms--); } /*ds1302.h*/ #ifndef _DS1302_H_ #define _DS1302_H_ #include #define uint unsigned int #define uchar unsigned char sbit IO=P1^0; //ds1302跟单片机接口 sbit SCLK=P1^1; sbit RST=P1^2; extern unsigned char datetime[7]; //存储获得的时间值extern void gettime(); //读取时间值函数 #endif /*ds1302.c*/ #include #include "ds1302.h" uchar datetime[7]={0,0,0,0,0,0,0}; //用来接收获得的时间值void write_a_byte_to_ds1302(uchar X) { uchar i; for(i=0;i<8;i++) { IO=X&0X01; SCLK=1; SCLK=0; X>>=1; } } uchar get_a_byte_from_ds1302() { uchar i,b=0x00; for(i=0;i<8;i++) { b|=_crol_((uchar )IO,i); SCLK=1; SCLK=0; } //return b/16*10+b%16; //返回的BCD码转换为十进制return (b>>4)*10+(b&0x0f); //注意运算的优先级 } uchar read_data(uchar add)

电子万年历(数码管显示)

程序 #include #include #define uchar unsigned char #define uint unsigned int #define jump_ROM 0xCC #define start 0x44 #define readdata 0xBE sbit dq=P1^7; sbit w1=P0^6; sbit w2=P0^5; sbit w3=P0^4; sbit w4=P0^7; sbit wela=P0^3; sbit A=P0^0; sbit b=P0^1; sbit C=P0^2; sbit SCLK=P1^0; //DS1302通讯线定义sbit DIO=P1^1; sbit RST=P1^2; sbit k1=P1^6; sbit k2=P1^5; sbit add=P1^4;

sbit sub=P1^3; uchar code smgw[]={0,1,2,3,4,5,6,7}; uchar code smgd[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; //uchar code tab[]={0x077,0x12,0x0c7,0x0d3,0x0b2,0x0f1,0x0f4,0x13,0x0f7,0x0b3,0x00}; uchar temperature[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar code xingqi[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7f}; uchar tab1[9]; uchar tab2[9]; uchar nian,yue,ri,zhou,shi,fen,miao,a,shan,tt,shan; uchar knum; uchar q,j,tempp; void display(); void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=55;y>0;y--); } void delay1(int useconds) {int s; for(s=0;s

万年历说明书

万年历说明书 2、定闹的设置:按“D”键,进入定闹的设置,月数码管位置显示定闹序号,序号闪烁,按“B”或“C”键,可选择定闹1~4中的某个设置;再按“D”键时闪烁,按“B”或“C”键其调整为设置值;再按“D”键分闪烁,按“B”或“C”键其调整为设置值;再按“D”键,在日数码管位置显示“on”或“--”的定闹状态并闪烁,,按“B”或“C”键,关闭或开启此定闹,再按“D”键,退出定闹的设置。注:4个定闹中只要有1个或1个以上的定闹状态设置为开启,定闹指示灯即亮,只有所有定闹的状态都为关闭时,定闹指示灯才灭。 3、整点闹铃的设置:在正常运行状态下,按一下“B”键,面板上的整点闹指示灯“亮”表示整点闹铃已开启,反之,灯“灭”为关闭。 数码万年历使用说明书 作者pupaishop浏览213发布时间11/09/24 1.按键阐明:报时/退出键、设置键、上调键、下调/定闹键、流水键、模式/定闹键(模式键只在选为倒计天或逆计天才有)。 2.时光调剂: ①反常走时状态下,按“设置”键进进时间设置状态,同时暮年份“闪

耀”,可按“上调”或“下调”键建改暮年份,修正佳先按“设置”键将闪烁位移到公历“月”,按“上调”或“下调”键建改月份;用同样的方式可对于日、时、分、秒入止设置;12个公历节日及正计地数、24个农历节气及正计天数、12生肖、12星座、礼拜、工历月、日将自静追随母历的变更。 ②该秒设定佳先,再按“设置”键退出时间设置,归到正常时间状态。 3.12/24小时制切换: 在反常走时状态,按住“上调”键3秒钟,则可进止12小时制取24小时造的切换。 下电单位时,否默以为24大时造或者12大时造,由选项决议。4.启/闭零面报时: 在正常走时状态,按一下“上调”键,则可以挨开整点报时指导灯和整点报时功能;按一下“上调”键,则可以关关整点报时指导灯战整点报时功能。 5.地数正计时或逆计时(由选项决议) 在正常时间状态下,按“模式”键进入“天数计时状态”,在温度位显示“d1”,计时天数位若显示“????”,表示计时“无效”;若显示详细数字表示有效,按“上调”键可以切换“有效”/“无效”,按“设置”键进入天数设定,且右边第一位(千位)闪烁,按“上调”或“下调”键修改内容,按“设置”键挪动闪烁位置到第两位(百位),按“上调”或“下调”键修改闪烁位的内容,同样方式可设置十位取个位。

89C52单片机 DS1302 DS18B20 17位数码管万年历

89C52单片机+DS1302时钟芯片+DS18B20+ 74HC138译码器 17位数码管万年历制作 关键字:51单片机、数码管、万年历、DS1302 本文介绍使用STC89C52单片机,DS1302时钟芯片提供时钟信号,DS18B20提供温度信号,74HC138译码器+S8550三极管驱动17位共阳极数码管,才用3个按键对万年历进行调整。实物图如下: Proteus仿真如下: 图中采用4个红色LED模拟时间分隔符,当功能键按下一次后秒开始闪烁,此时可以按下第二键和第三键进行加和减的操作,再按一次功能键进入分钟的调节,依次类推,最后跳出调整状态。 STC89C52介绍: STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵

活、超有效的解决方案。 具有以下标准功能: 8k 字节Flash ,512字节RAM , 32 位I/O 口线,看门狗定时器,内置4KB EEPROM ,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM 、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz ,6T/12T 可选。 器件参数: 1. 增强型8051单片机,6 时钟/机器周期和12 时钟/机器周期可以任意 选择,指令代码完全兼容传统8051.[2] 2. 工作电压:5.5V ~ 3.3V (5V 单片机)/3.8V ~2.0V (3V 单片机) 3.工作频率范围:0~40MHz ,相当于普通8051 的0~80MHz ,实际工作 频率可达48MHz 4. 用户应用程序空间为8K 字节 5. 片上集成512 字节RAM 6. 通用I/O 口(32 个),复位后为: P0/P1/P2/P3 是准双向口/弱上拉, P0 口是 漏极开路输出,作为总线扩展用时,不用加 上拉电阻,作为 I/O 口用时,需加上拉电阻。 7. ISP (在系统可编程)/IAP (在应用可 编程),无需专用编程器,无 需专用仿真器, 可通过串口(RxD/P3.0,TxD/P3.1)直接下载 用户程 序,数秒即可完成一片 8. 具有EEPROM 功能 9. 共3 个16 位定时器/计数器。即定 时器T0、T1、T2 10.外部中断4 路,下降沿中断或低电 平触发电路,Power Down 模式可 由外部中 断低电平触发中断方式唤醒 11. 通用异步串行口(UART ),还可用定时器软件实现多个UART 12. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级) 13. PDIP 封装 DS1302介绍: DS1302 是美国DALLAS 公司推出的一种高性能、低功耗、带RAM 的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V ~5.5V 。采用三线接口与CPU 进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM 数据。DS1302内部有一个31×8的用于临时性存放数据的RAM 寄存器。DS1302是DS1202的升级产品,与DS1202 兼容,

相关文档
最新文档