文档库 最新最全的文档下载
当前位置:文档库 › DS12887日历时钟课程设计

DS12887日历时钟课程设计

DS12887日历时钟课程设计
DS12887日历时钟课程设计

单片机

课程设计报告

课程名称单片机课程设计

专业电气工程及其自动化班级

姓名

学号

指导教师

2012年3 月9 日

DS12887日历时钟课程设计

目录

一前言..............................................................................................

4 1.1 设计任务及要求........................................................................

4 1.2 设计应用意义............................................................................

4

二方案的论证.................................................................................

4 三总体设计.....................................................................................

4 3.1基本工作原理..................................................................................

4 3.2、硬件总体设计...............................................................................

5 3.3、软件总体设计..............................................................................

5 四硬件设计...................................................................................

5

4.1 DS12887的功能介绍...............................................................

6 4.1.1引脚功能...............................................................................

6 4.2 LCD1602..................................................................................

7 4.2.1 LCD1602液晶介绍...................................................................

7 4.3 STC89C52...................................................................................

8 4.3.1 芯片介绍................................................................................

8 4.3.2 管脚说明...............................................................................

9 五软件设计.....................................................................................

10 5.1时钟设置...................................................................................

10 六系统操作说明..............................................................................

11 七结束语.........................................................................................

12

八参考文献...................................................................................

12 附录:12

1、系统原理图13

2、程序:(1)液晶显示的程序13

(2)总的程序14

一、前言

用单片机控制时间的读取并显示在液晶屏幕上面,并可通过按键实现对时间的修改。文中详细论述了电子日历钟设计原理、使用的各芯片的介绍,阐明了本实例所使用的设计方案、详细的电路图以及电子程序.

1.1 设计任务及要求

DS12887芯片具有低功耗、外围接口简单、精度高、工作稳定可靠等优点。采用DS12887芯片设计的时钟电路无需任何外围电路和器件,并具有良好的微机接口,广泛用于各种需要精度较高的实时时钟系统中。

设计内容包括DS12887芯片的时钟电路硬件设计,软件设计,画出Protel原理图、PCB版图、写出元件清单,验收后方可焊接电路板并调试。设计实现如下目标:

利用DS12887和STC8952单片机设计一个时钟和日历,时间以24小时为一个周期;显示当前时、分、秒;有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;可以实现基本的调时定时日期的修改。

1.2 本设计的应用意义

此电子日历钟小巧便捷利于携带,界面清爽,一目了然,方便您知晓当前时间,并可对时间做出修改,实在是居家旅行日常生活之必备用品!

二、方案的论证

本系统

三、总体设计

3.1基本工作原理

利用DS12887实时时钟电路芯片来读取系统中的日期以及时间信息,并利用P0端口将相关信息传送至STC89C51主芯片之中,利用P2端口使之显示于LCD1602液晶显示屏上,四个按键分别置于P1口的1、2、3、4端口可以对时间进行控制修改。相关说明:点击确定按键可以进入LCD屏上方显示的主菜单,点击返回按键可以退出菜单,在时间修改菜单中点击修改“小时”按键可以修改时间中的小时数,点击修改“分钟”按键可以修改时间中的分钟数。

3.2硬件总体设计

电源DS12887

STC89C52

LCD1602 按键

3.3软件总体设计

主程序主要包括:系统初始化、获取串口数据、设置日历时钟芯片、获取时钟芯片的时间信息和时钟校正、显示等子程序。初始化子程序主要包括设置单片机的串口和定时器的初始化,日历时钟芯片初始参数和驱动芯片的初始化等。主程序流程图如图6所示。

四、硬件设计

4.1 DS12887的功能介绍

DS12887是美国DALLAS半导体公司最新推出的8位串行接口并自带RAM的实时日历时钟芯片,内部有14个时钟控制寄存器,包括10个时标寄存器,4个状态寄存器和114 bit作掉电保护用的低功耗RAM。CPU通过读DS12887的内部时标寄存器得到当前的时间和日历,也可通过选择二进制或BCD码初始化芯片的10个时标寄存器,其4个状态寄存器用来控制和指出DS12887的当前工作状态,114 bit非易失性静态RAM可在掉电时保存一些重要数据。

DS12887功能强大,应用广泛。

4.1.1引脚功能:

GND:接地端

VCC:直流电源+5 V电压。当5 V电压在正常范围内时,数据可读写;当VCC低于4.25 V,读写禁止,计时功能仍继续;当VCC下降到3 V以下时,RAM和计时器被切换到内部锂电池。

MOT(模式选择):MOT引脚接到VCC时,选择MOTOROLA时序,当接到GFND时,选择INTEL 时序。

SQW(方波信号输出):SQW引脚能从实时时钟内部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。

AD0~AD7(双向地址/数据复用线):总线接口,可与MOTOROLA微机系列和INTEL微机系列接口。

AS(地址选通输入):用于实现信号分离,在AD/ALE的下降沿把地址锁入DS12887。

DS(数据选通或读输入):DS/RD有2种操作模式,取决于MOT引脚的电平,当使用MOTOROLA时序时,DS是一正脉冲,出现在总线周期的后段,称为数据选通;在读周期,DS 指示DS12887驱动双向总的时刻;在写周期,DS的后沿使DS12887锁存写数据。选择INTEL 时序时,DS称作(RD),RD与典型存储器的允许信号(OE)的定义相同。

R/W(读/写输入):也有两种操作模式。选MOTOROLA时序时,是一电平信号,指示当前周期是读或写周期,DSO为高电平时,高电平指示读周期,低电平指示写周期;选INTEL 时序,信号是一低电平信号,称为WR。在此模式下,R/W与通用RAM的写允许信号(WE)的含义相同。

/CS(片选输入):在访问DS12887的总线周期内,片选信号必须保持为低。

IRQ(中断申请输入):低电平有效,可作微处理的中断输入。没有中断条件满足时,IRQ 处于高阻态。IRQ线是漏极开路输入,要求外接上接电阻。

RESET(复位输出):当保持低电平时间大于200 ms,保证DS12887有效复位。

DS12887引脚如下图所示。

DS12887的内部地址分配:地址00H和03H单元取值范围是00H~3BH(十进制为0~59);04H~05H单元按12小时制取值范围是上午(AM)01H~0CH(十进制为1~12),下午(PM)51H~5CH(十进制为81~92),按24小时制取值范围是00H~17H(十进制为0~23);06H单元的取值范围是01H~07H(十进制为1~7);07H单元取值范围O1H~1FH(十进制为1~31);08H

单元取值范围是01H~0CH(十进制为1~12);09H单元取值范围是00H~63H(十进制为0~99)。

4.2 LCD 1602

4.2.1 1602液晶模块简介

1602液晶显示模块,是点阵字符型液晶显示模块,可以用来显示字母,符号,数字以及简单的汉字和图案等信息。“1602”的含义是这类液晶显示模块每行能够显示16个字符,一共可以显示两行。该液晶显示模块,分为带背光和不带背光两类,两者在应用过程中功能基本类似,只是带背光的模块更厚一些,通常的背光颜色以黄绿色和蓝色为主。目前,多数602液晶显示模块的生产厂商使用的控制芯片都是日立公司的HD44780,这得单片机对1602液晶显示模块的控制更加统一和方便。1602液晶显示模块的主要技术参数如下:

(1)显示容量,为16个字符X两行,即每行最多显示32个字符;

(2)模块工作电压,在4.5-5V之间,模块的最佳工作电压为5V;

(3)模块工作电流,再最佳工作电压5V式,工作电流是2mA;

(4)显示字符的大小,每个被显示的字符大小为2.95mmX4.35mm(字符的宽度乘高度)。

4.2.2 1602液晶模块的管脚介绍

第1脚:GND为电源地,接GND。

第2脚:VCC接5V正电源。

第3脚:VO为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为指令寄存器或数据寄存器的选择。高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW 共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为读或写操作的使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。

第15脚:BGVCC背光电源正极(+5V)输入引脚。

第16脚:BGGND背光电源负极,接GND。

4.3 STC89C52芯片

4.3.1 芯片介绍

STC89C52单片机简介

STC89C52是一种低功耗、高性能 CMOS 8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌

入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35Mhz,6T/12T 可选。

和Atmel的对比:

STC89C52RC单片机具有 8K字节程序存储空间;512字节数据存储空间;内带4K字节EEPROM存储空间;可直接使用串口下载的特点

而AT89S52单片机则具有8K字节程序存储空间;256字节数据存储空间;没有内带EEPROM存储空间的特点。

STC89C52芯片如下图所示:

4.3.2 管脚说明:

VCC:供电电压。

VSS:接地端。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以

被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4 TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4

个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为STC89C52的一些特殊功能口:

即 P3.0 RXD(串行输入口)

P3.1 TXD(串行输出口)

P3.2 /INT0(外部中断0)

P3.3 /INT1(外部中断1)

P3.4 T0(记时器0外部输入)

P3.5 T1(记时器1外部输入)

P3.6 /WR(外部数据存储器写选通)

P3.7 /RD(外部数据存储器读选通)

同时,P3口也可为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

五、软件设计

系统软件设计包括单片机计算机两部分的编程。计算机软件编程主要实现参数设置、串行口数据接收、指令发送以及数据的显示和存储。单片机软件编程主要实现键盘、液晶显示、闹钟等各模块的功能,采用C语言编程。该系统通过串行口与键盘通信,键盘给单片机发指令实现数据采集及系统控制,并将数据实时传回液晶显示器显示结果。整个软件系统采用模块化的程序设计方法,共分为时间日期的设定、闹铃设定、LCD显示模块和键盘扫描模块4个部分。其中主要是闹点的设定与提取。软件系统的主要特点是整个过程完全在键盘的控制之下,实现了友好的人机交互功能。主程序通过判断键盘的输入情况调用不同的子程序,子程序的功能实现也是在键盘的配合之下完成的。主程序流程图,如图6所示。

首先对单片机的串行口及定时器进行初始化,然后进行键盘扫描,如果有键按下,则根据扫描到的键值跳转到相应的入口并执行相应的程序,并根据外部的输入进行相应的操作。如果没有键按下,则回到初始化状态。在并行运行的程序中,本设计将调用编写的日历时钟和及LCD液晶显示的程序程序,并将其送入液晶显示器中进行显示。

5.1 时钟设置

在使用DS12887时,首先要初始化,主要是打开晶振、对控制寄存器A、B写入控制字以及对日历、时钟各寄存器写入初始值。除校时外,上电时不用再次初始化。第一次初始化时,应禁止操作DS12887内部更新周期,即先将寄存器B的SET位置“1”,然后初始化时标寄存器(00H~09H)和状态寄存器A,再通过读寄存器C清除中断标志,读寄存器D将VRT位置“1”,最后将寄存器B的SET位清零,DS12887开始计时。

设置日历时钟,必须保证时钟芯片DS12887处于设置状态,即SET=1,然后向DS12887的专用寄存器写入时间信息,写入完毕后,DS12887恢复正常数据更新状态,即SET=0。在读取日历时钟芯片DS12887的时钟信息时,必须保证UIP=0,然后读取存储其内部寄存器的时钟信息。

为了能够方便地显示时间和校正时钟,可在单片机中的用户寄存器中开辟特殊的时间地址单元作为显示缓冲区,分别放置“年,月,日,时,分,秒”等值。此时只要将DS12887

中的时间值读入到用户开辟的时间地址中,用户就可以方便控制时间。

六、系统操作说明

利用DS12887实时时钟电路芯片来读取系统中的日期以及时间信息,并利用P0端口将相关信息传送至STC89C51主芯片之中,利用P2端口使之显示于LCD1602液晶显示屏上,四个按键分别置于P1口的1、2、3、4端口可以对时间进行控制修改。相关说明:点击确定按键可以进入LCD屏上方显示的主菜单,点击返回按键可以退出菜单,在时间修改菜单中点击修改“小时”按键可以修改时间中的小时数,点击修改“分钟”按键可以修改时间中的分钟数。

七、结束语

做了两周的课程设计,让我感触很深,有关与单片机方面的,但更多的是团队和合作方面的。我们组共有两个人,在得到实验课题之后,就觉得压力好大。因为我们平时接触的都是纯粹理论性的东西,做实验也是雾里看花,对硬件的认识也很缺乏。

之后,我们就去图书馆查阅大量的单片机和数字芯片的资料,并带还来仔细研究。在硬件电路的设计中,由于要涉及软件设计的具体情况,我们又共同讨论研究,最终将原理图设计完成。在焊电路图的过程中,由于原理图比较复杂,接线及走线也就显得很困难,在具体的调试中遇到的困难也比较多,但在指导老师的帮助下改正了几处问题,虽然最终没有调试成功,但在整个过程中,我收获了很多。这次课程设计很漫长,特别是编写程序的时候,但我从中学到了很多东西,个人的分析能力对问题的处理能力有了不同程度的提高。对电路的判断分析和程序的分析特别是对52单片机进一步学习,让我收获颇多。

很感谢学校和老师给我们安排了这次的课程设计,让我真正感受到了合作的重要性很多时候都是组员的讨论和老师的指导中的一句半句启发了我。这次的课程设计让我知道:理论知识固然重要,但如果不与实践联系起来,也就如同空白纸一样,毫无用处。

八、参考文献

1.单片机基础(第三版)

2. 单片机的C语言应用程序设计(第4版)

3. 单片机系统及应用实验教程

4. 单片机原理与应用系统设计

5. 程序设计基础(C语言)

6. EDA技术基础教程

附录:原理图、程序

原理图

程序:

1.液晶显示的程序

#include //单片机头文件

#define uchar unsigned char //定义无

符号字符型

#define uint unsigned int //定义无

符号整型

sbit rs=P3^0; //rs的位地址为

P3.0

sbit lcden=P3^1; //lcden的位地址为P3.1

sbit fengming=P3^5; //fengming的

位地址为P3.5

//uchar count,s1num;

//char miao,shi,fen;

uchar code table[]=" 2007-7-30 MON"; //定义第一行显示的字符

uchar code table1[]=" 00:00:00";

//定义第二行显示的字符

void delay(uint z) //延时子程序

{

uint x,y;

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

for(y=110;y>0;y--);

}

void write_com(uchar com) //向1602 模块写数据

{

rs=0;

lcden=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_date(uchar date)

{

rs=1;

lcden=0;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void init() //1602模块的初始化

{

uchar num;

fengming=0;

lcden=0;

write_com(0x38);//八位数据传输

write_com(0x0c);//开显示、关光标

write_com(0x06);//光标右移、地址加1

write_com(0x01);//清屏

write_com(0x80);

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

{

write_date(table[num]);

delay(5);

}

write_com(0x80+0x40);

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

{

write_date(table1[num]);

delay(5);

}

}

void main()

{

init();

while(1);

}

2.总程序

DS12887:

3.#include

4.#include

5.#define uchar unsigned char

6.#define uint unsigned int

7.sbit DQ=P3^5;

8.uchar

miao,fen,shi,n,yue,ri,xing,ml,mh,fl,fh,sl,

sh,yl,yh,rl,rh,flag,flag1,flaga,flag2,flag3, am,as,af,c,flagz;//定义均为汉语拼音fl为分高位fh为分高位am定时的秒9.uint Count;

10.long int temp1;

11.sbit wexu=P1^6;//位选锁存器控制

12.sbit duxu=P1^5;//段选锁存器控制

13.sbit bee_Speak=P3^5;//扬声器驱动引

脚定义

14.sbit key1=P1^1;//按键4个

15.sbit key2=P1^2;

16.sbit key3=P1^3;

17.sbit key4=P1^4;

18.sbit css=P1^7;//12887片选

19.sbit ass=P1^0;//12887锁存器

20.sbit dss=P3^7;//12887读写控制

21.sbit rw=P3^6;//12887读写控制

22.sbit p30=P3^0;//3.0-3.3后三位数码管

位选控制

23.sbit p31=P3^1;

24.sbit p33=P3^3;

25.sbit p35=P3^5;//扬声器

26.void sj(long int i);

27.uchar code

duma1[]={0xbf,0x86,0xdb,0xcf,0xe6,0x

ed,0xfd,0x87,0xff,0xef};//数码管段码

带小数

28.uchar code

duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x

6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};//

数码管段码

29.uchar code

wema[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf

,0xbf,0x7f,0xff};//数码管位选

30.void delay15us() //误差0us

31.{

32.unsigned char a;

33.for(a=5;a>0;a--);

34.}

35.void delay5us() //误差0us

36.{

37._nop_(); //if Keil,require use

intrins.h

38.}

39.

40.void delay3us() //误差0us

41.{

42._nop_(); //if Keil,require use

intrins.h

43.}

44.void delay45us() //误差0us

45.{

46.unsigned char a;

47.for(a=20;a>0;a--);

48.}

49.void delay1(uint z)//延时一个毫秒

50.{

51.uint x,y;

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

53.for(y=110;y>0;y--);

54.}

55.void delay2(uint z)//延时一个毫秒

56.{

57.uint x;

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

59.{sj(temp1);

60.delay1(2);

61.}

62.}

63.void writebyte(uchar n)

64.{

65.uchar i;

66.for(i=0;i<8;i++)

67.{

68.DQ=0;

69.delay15us();

70.DQ=n&0x01;

71.n>>=1;

72.delay45us();

73.DQ=1;

74.}

75.DQ=1;

76.}

77.void fuhao(uchar m,uchar n)

78.{

79.if(m&0x80)

80.{

81.n=(~n)+1;

82.flagz=1;

83.}

84.else 85.{

86.n=n;

87.flagz=0;

88.}

89.}

90.void sj(long int i)

91.{

92.uint one,two,three,four,five,six;

93.one=i%10;

94.two=(i/10)%10;

95.three=(i/100)%10;

96.four=(i/1000)%10;

97.five=(i/10000)%10;

98.six=(i/100000)%10;

99.wexu=1;

100.P2=wema[7];

101.wexu=0;

102.duxu=1;

103.P2=duma[one];

104.duxu=0;

105.delay1(3);

106.duxu=1;

107.P2=duma[two];

108.duxu=0;

109.wexu=1;

110.P2=wema[6];

111.wexu=0;

112.delay1(3);

113.duxu=1;

114.P2=duma[three];

115.duxu=0;

116.wexu=1;

117.P2=wema[5];

118.wexu=0;

119.delay1(3);

120.duxu=1;

121.P2=duma1[four];

122.duxu=0;

123.wexu=1;

124.P2=wema[4];

125.wexu=0;

126.delay1(3);

127.duxu=1;

128.if(five==0)

129.{

130.if(flagz==1)

131.{P2=duma[10];} 132.else

133.P2=duma[11]; 134.}

135.else

136.P2=duma[five]; 137.duxu=0;

138.wexu=1;

139.P2=wema[3];

140.wexu=0;

141.delay1(3);

142.duxu=1;

143.if(six==0)

144.{

145.if(flagz==1&&five!=0) 146.{P2=duma[10];} 147.else

148.P2=duma[11]; 149.}

150.else

151.P2=duma[six];

152.duxu=0;

153.wexu=1;

154.P2=wema[2];

155.wexu=0;

156.delay1(3);

157.if(flagz==1&&six!=0) 158.{

159.duxu=1;

160.P2=duma[10];

161.duxu=0;

162.wexu=1;

163.P2=wema[1];

164.wexu=0;

165.delay1(3);

166.}

167.wexu=1;

168.P2=wema[8];

169.wexu=0;

170.delay1(1);

171.}

172.void delay3(uint z) 173.{

174.while(z--); 175.}

176.void initi() 177.{

178.uchar i;

179.i=1;

180.DQ=1;

181.delay3(8); 182.DQ=0;

183.delay3(90); 184.DQ=1;

185.delay3(8); 186.i=DQ;

187.while(i);

188.delay3(85); 189.DQ=1; 190.}

191.uchar readbyte() 192.{

193.uchar i,j; 194.j=0;

195.for(i=0;i<8;i++) 196.{j>>=1;

197.DQ=1;

198.delay3us(); 199.DQ=0;

200.delay3us(); 201.DQ=1;

202.delay15us(); 203.if(DQ)

204.j|=0x80;

205.delay45us(); 206.delay5us(); 207.

208.}

209.return(j); 210.}

211.void wedu() 212.{

213.

214.uchar dath,datl; 215.long int temp; 216.temp=0;

217.temp1=0;

218.dath=0;

219.datl=0;

220.while(flaga)

221.{

222.initi();

223.delay1(1);

224.writebyte(0xcc);

225.writebyte(0x44);

226.delay2(50);

227.initi();

228.delay1(1);

229.writebyte(0xcc);

230.writebyte(0xbe);

231.datl=readbyte();

232.dath=readbyte();

233.temp=dath;

234.temp<<=8;

235.temp=temp|datl;

236.fuhao(dath,temp);

237.temp1=temp*63;//0.0625

238.if(key4==0)

239.{while(!key4);

240.flaga++;

241.if(flaga>=2)

242.flaga=0;

243.}

244.}

245.}

246.void delay(uint z)//延时函数

247.{

248.uint x,y;

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

250.for(y=110;y>0;y--); 251.}

252.void write_sj(uchar dz, uchar sj)//12887写函数

253.{

254.css=0;

255.ass=1;

256.dss=1;

257.rw=1;

258.P0=dz;

259.ass=0; 260.rw=0;

261.P0=sj;

262.rw=1;

263.ass=1;

264.css=1;

265.}

266.uchar read_sj(uchar dz1)//12887读函数

267.{uchar m;

268.css=0;

269.dss=1;

270.rw=1;

271.ass=1;

272.P0=dz1;

273.ass=0;

274.dss=0;

275.P0=0xff;

276.m=P0;

277.dss=1;

278.ass=1;

279.css=1;

280.return m;

281.}

282.void dispay(uint m,uint f,uint s,uint x,uint y,uint r)//显示函数

283.{

284.mh=m/10;

285.ml=m%10;

286.fh=f/10;

287.fl=f%10;

288.sh=s/10;

289.sl=s%10;

290.yh=y/10;

291.yl=y%10;

292.rh=r/10;

293.rl=r%10;

294.duxu=1;

295.P2=duma[fl];

296.duxu=0;

297.wexu=1;

298.P2=wema[7];

299.wexu=0;

300.delay(3);

301.duxu=1;

302.P2=duma[fh]; 303.duxu=0; 304.wexu=1; 305.P2=wema[6]; 306.wexu=0; 307.delay(3); 308.duxu=1; 309.P2=duma[sl]; 310.duxu=0; 311.wexu=1; 312.P2=wema[5]; 313.wexu=0; 314.delay(3); 315.duxu=1; 316.P2=duma[sh]; 317.duxu=0; 318.wexu=1; 319.P2=wema[4]; 320.wexu=0; 321.delay(3); 322.duxu=1; 323.P2=duma[rl]; 324.duxu=0; 325.wexu=1; 326.P2=wema[3]; 327.wexu=0; 328.delay(3); 329.duxu=1; 330.P2=duma[rh]; 331.duxu=0; 332.wexu=1; 333.P2=wema[2]; 334.wexu=0; 335.delay(3); 336.duxu=1; 337.P2=duma[yl]; 338.duxu=0; 339.wexu=1; 340.P2=wema[1]; 341.wexu=0; 342.delay(3); 343.duxu=1; 344.P2=duma[yh]; 345.duxu=0; 346.wexu=1;

347.P2=wema[0];

348.wexu=0;

349.delay(3);

350.wexu=1;

351.P2=wema[8];

352.wexu=0;

353.delay(1);

354.

355.p30=0;

356.duxu=1;

357.P2=duma[mh];

358.duxu=0;

359.delay(3);

360.p30=1;

361.p31=0;

362.duxu=1;

363.P2=duma[ml];

364.duxu=0;

365.delay(3);

366.p31=1;

367.p33=0;

368.duxu=1;

369.P2=duma[x];

370.duxu=0;

371.delay(3);

372.p33=1;

373.}

374.void key()//调时函数

375.{

376.write_sj(0x0a,0x00);//关闭晶振调试时不更新

377.if(key1==0)

378.{delay(5);

379.if(key1==0)

380.{

381.while(!key1);

382.flag++;

383.if(flag>=7)

384.{flag=0;}

385.}

386.}

387.if(flag==1)

388.{

389.if(key2==0)

390.{delay(5);

391.if(key2==0 )

392.{while(!key2);

393.miao++;

394.if(miao==60)

395.{miao=0;};

396.write_sj(0x00,miao);//键盘调完时间写进12887

397.}

398.}

399.}

400.if(flag==2)

401.{

402.if(key2==0)

403.{delay(5);

404.if(key2==0 )

405.{while(!key2);

406.fen++;

407.if(fen==60)

408.{fen=0;};

409.write_sj(0x02,fen);

410.}

411.}

412.}

413.if(flag==3)

414.{

415.if(key2==0)

416.{delay(5);

417.if(key2==0 )

418.{while(!key2);

419.shi++;

420.if(shi==24)

421.{shi=0;};

422.write_sj(0x04,shi);

423.}

424.}

425.}

426.if(flag==4)

427.{

428.if(key2==0)

429.{delay(5);

430.if(key2==0 )

431.{while(!key2); 432.xing++;

433.if(xing>=8)

434.{xing=1;};

435.write_sj(0x06,xing);

436.}

437.}

438.}

439.if(flag==5)

440.{

441.if(key2==0)

442.{delay(5);

443.if(key2==0)

444.{while(!key2);

445.ri++;

446.if(ri==32)

447.{ri=1;};

448.write_sj(0x07,ri);

449.}

450.}

451.}

452.if(flag==6)

453.{

454.if(key2==0)

455.{ delay(5);

456.if(key2==0)

457.{while(!key2);

458.yue++;

459.if(yue==13)

460.{yue=1;};

461.write_sj(0x08,yue);

462.}

463.}

464.}

465.dispay(miao,fen,shi,xing,yue,ri); 466.write_sj(0x0a,0x20);//开晶振开始正常走时

467.}

468.void chushihua()//初始化

469.{

470.write_sj(0x0a,0x20);//开晶振可忽略

471.delay(2);

472.write_sj(0x0b,0x26);//闹钟初始化473.c=read_sj(0x0c);//闹钟清0

474.flag=0;//标志位清0

475.flag1=0;

476.flag2=0;

477.flag3=0;

478.flagz=0;

479.flaga=0;

480.TMOD = 0x01;//T0 及外中断0初始化

481.IE = 0x83;

482.TH0 = 0xDC;

483.TL0 = 0x00; //11.0592MZ晶振,10ms

484.IT0=1;

485.}

486.void main()

487.{

488.chushihua();

489.while(1)

490.{

491.if(key4==0)

492.{

493.flaga++;

494.}

495.if(flaga==1)

496.{wedu();}

497.if(key3==0)

498.{delay(5);

499.if(key3==0)

500.{ 501.while(!key3);

502.flag3++;

503.if(flag3>=2)

504.{flag3=0;

505.flag=0;

506.}

507.}

508.}

509.if(flag3==1)//按键调时

510.{

511.key();

512.}

513.if(flag3==0)//没有按键按下时读出时分秒月日显示出来

514.{

515.miao=read_sj(0);

516.fen=read_sj(2);

517.shi=read_sj(4);

518.xing=read_sj(6);

519.ri=read_sj(7);

520.yue=read_sj(8);

521.//n=read_sj(9);

522.}

523.dispay(miao,fen,shi,xing,yue,ri); 524.}

525.}

526.

527.

528.

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

#include #define uchar unsigned char #define uint unsigned int //----端口定义--- sbit ACC_7=ACC^7; sbit RST1=P2^5; sbit IO=P2^6; sbit SCLK=P2^7; sbit k1=P3^2; sbit k2=P3^3; sbit k3=P2^2; sbit k4=P2^3; //uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 数码的位选,左到右 uchar tab_1302[7]={45,50,11,19,1,1,15}; uchar tab_time[8]={0,0,10,0,0,10,0,0}; //时间 uchar tab_day[8]={0,0,10,0,0,10,0,0,}; //年月日 uchar tab_num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //0 1 2 3 4 5 6 7 8 9 - {"0123456789-"} ////////////=============函数声明============//////////////// void display_time(); void delayms(uint); void display_day(); void ds1302(); //获取DS1302的时间 void ds1302_init(); //DS1302的初始化 void write1302(uchar,uchar); //指定地址向DS1302写数据 uchar read1302(uchar); //指定地址向DS1302读数据 void ds1302(); void int0_init(); /////////=======中断初始化=======/////////// void int0_init() { EX0=1;

数电EDA课程设计电子日历

燕山大学 EDA课程设计报告书 电子日历 姓名:王斌 班级:05级电子信息工程3班 学号:050104020064 日期:2007/11/05——2007/11/14 一、设计题目:电子日历 二、设计要求:

1.能显示年,月,日,星期; 2.例如: 01.11.08. 6,星期日显示8; 3.年月日,星期可调; 4.不考虑闰年 三.设计思路: 为实现本电路得功能,采取模块电路设计方法,本电路系统主要包括以下三三大模块:. 1: 电子日历记数模块 2: 中间控制模块 3: 译码器显示模块 由于不同的月份,决定了不同的天数,因此须设计反馈电路,协调月日的关系,通过不同的月选择相应的天数:比如二月二十八天,十二月三十一天,……..这是利用真值表列出逻辑表达式,从而画出电路图如图1: 仿真图如下: 四、设计过程: 一、电子日历记数模块 1、实现星期计时: 为实现星期计时模块,计到星期日时,显示“8”,采用一般的计数器难以实现,

即可通过四个jk触发器设计而成。其电路图如下: 仿真图如下: 2、实现天数计时: 由于不同的月份,决定了不同的天数,因此须设计三个独立完成计数的计数器电路,如日计数器周期性的(28,30或31)向月计数器进位调月日的关系,即通过三个选择端(c28,c30,c31),同一时刻只能有一个有效,由其中的任一个有效端来控制相应日计数器。其电路原理图

3、实现月份及年份计时: 由用两个74160采用整体同步置数分别构成100进制和12进制计数器,分别完成年,月的计数功能。然后将两者依次异步连接,每隔12个月,月计数器向年计数器进一位,从而实现年月的周期性计数。 月份计数器电路原理图如下: 年份计数器电路图如下:

单片机课程设计-万年历、数字时钟

单片机课程设计-万年历、数字时钟 采用MAX7221可以极大的节省I/O口线,同时DS1302时钟芯片可以提供精确的时间信息 汇编语言程序编写 DSRST BIT P1.0 DSCLK BIT P1.1 DSIO BIT P2.2 DIN BIT P2.5 CS BIT P2.6 CLK BIT P2.7 D158 EQU 30H D70 EQU 31H ADDRESS EQU 32h CONTENT EQU 33h COMMAND EQU 34h SECOND equ 35h MINITE equ 36h HOUR equ 37h ORG 0000H LJMP MAIN ORG 0030H MAIN: LCALL INTI7221 LCALL INTI1302

LOOP: LCALL READ1302 LCALL CONVERT LCALL DELAY LCALL DISPLAY LCALL DELAY SJMP LOOP ;DS1302初始化 INTI1302:MOV ADDRESS, #8EH MOV CONTENT, #00H LCALL SENT_BYTE MOV ADDRESS, #90H MOV CONTENT, #0A7H ;慢充电寄存器LCALL SENT_BYTE READ1302: MOV ADDRESS, #81h LCALL REV_BYTE MOV SECOND, A MOV ADDRESS, #83h LCALL REV_BYTE MOV MINITE, A MOV ADDRESS, #85h LCALL REV_BYTE MOV HOUR, A RET SENT_BYTE: CLR DSRST CLR C NOP CLR DSCLK NOP SETB DSRST MOV A, ADDRESS MOV R3, #2 MOV R2, #8 LOOP0: RRC A MOV DSIO, C SETB DSCLK NOP CLR DSCLK DJNZ R2, LOOP0 MOV A, CONTENT MOV R2, #8 DJNZ R3, LOOP0 CLR DSRST RET

单片机课程设计 电子日历时钟显示器设计

目录 1.题目设计要求 (1) 2.开发平台简介 (1) 3.系统硬件设计 (2) 3.1设计原理 (2) 3.2器件的功能与作用 (2) 3.2.1 MCS51单片机AT89C51 (2) 3.2.2复位电路 (3) 3.2.3晶振电路 (4) 3.2.4 DS1302时钟模块 (4) 3.2.5 引脚功能及结构 (4) 3.2.6 DS1302的控制字节 (5) 3.2.7 数据输入输出(I/O) (5) 3.2.8 DS1302的寄存器 (6) 3.2.9 液晶显示LCD1602 (6) 3.2.10 串行时钟日历片DS1302 (8) 4.系统软件设计 (10) 4.1程序流程 (10) 4.2程序代码 (10) 5.系统仿真调试 (20) 5.1仿真原理图设计 (20) 5.2仿真运行过程 (21) 5.3仿真运行结果 (21) 6.总结 (21) 7.参考文献 (22)

1.题目设计要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2.开发平台简介 2.1系统仿真平台Proteus Proteus软件是由英国Labcenter Electronics公司开发的EDA工具软件,已有近20年的历史,在全球得到了广泛应用。Proteus软件的功能强大,它集电路设计、制版及仿真等多种功能于一身,不仅能够对电工、电子技术学科涉及的电路进行设计,还能够对微处理器进行设计和仿真,并且功能齐全,界面多彩。和我们手头其他的电路设计仿真软件,他最大的不同即它的功能不是单一的。另外,它独特的单片机仿真功能是任何其他仿真软件都不具备的。 2.2软件开发平台Keil C Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。Keil C51生成的目标代码效率之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

电子日历时钟设计

目录 1题目设计的要求 (1) 2 系统硬件设计 (1) 2.1设计原理 (1) 2.2器件的功能与作用 (1) 2.2.1 MCS51单片机AT89C51 (1) 2.2.2 串行时钟日历片DS1302 (2) 2.2.3 液晶显示LCD1602 (3) 3 系统软件设计 (4) 3.1程序流程 (4) 3.2程序代码 (5) 4 系统仿真调试 (12) 4.1仿真原理图设计 (12) 4.2仿真运行过程 (12) 4.3仿真运行结果 (13) 5 总结 (13) 6 参考文献 (13)

1题目设计的要求 通过串行日历时钟芯片DS1302生成当前日期和是时间,通过IO口传输到AT89c52芯片中,然后再将AT89c52接收到的数据输出到LCD上。要求LCD上显示的日期和时间与当前系统时间保持一致。 2 系统硬件设计 2.1 设计原理 图3.1 电路原理图 2.2 器件的功能与作用 2.2.1 MCS51单片机AT89C51 XX AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件

采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。 由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。 AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 2.2.2 串行时钟日历片DS1302 系统的组成与工作原理: 系统由单片机AT89C52,串行日历时钟片DS1302,液晶显示模组LCD1602。 DS1302的CLOCK与AT89C52的P1.6相连,RST与P1.5相连,IO与P1.7相连。 LCD1602的D0~D7与AT89C51的P0.0~P.7相连,并接上拉电阻,RS与P2.0相连,RW与P2.1相连,E与P2.2相连。 DS1302是DALLAS公司拖出的涓流充电时钟芯片,内含有一个实时时钟/日历和31个季节静态RAM,通过简单地串行接口与单片机进行通信,实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24小时或12小时格式,DS1302与单片机之间能简单地采用同步串行方式进行通信,仅需用到RES复位、I/O 数据线、SCLK串行时钟3个口线。对时钟、RAM的读/写,可以改用单字节方式或多达31个字节的字符组方式。DS1302工作时功耗很低,保持数据和时钟信息是功率小于1mW。DS1302广泛应用于电话传真、便携式仪器及电池供电的仪器仪表等产品领域中。 RT-1602 字符型液晶模块是以两行16个子的5*7点阵吐信来显示字符的液晶显示器。 DS1302有8个引脚: X1、X2:32.768kHz晶振介入引脚。 GND:地。 RST:复位引脚,低电平有效。 I/O:数据输入/输出引脚,具有三态功能。 SCLK:串行时钟输入引脚。 Vcc1:工作电源引脚。 Vcc2:备用电源引脚。 DS1302有一个控制寄存器,12个日历,时钟寄存器和31个RAM。 控制寄存器 控制寄存器用于存放DS1302的控制命令字,DS1302的RST引脚回到高电平后写入的第一个字就为控制命令。它用于对DS1302读写过程进行控制,它的格式如下:

电子日历单片机课程设计报告

湖南科技大学 信息与电气工程学院《单片机原理与应用课程设计报告》 题目:电子日历 专业:电子信息工程 班级: 姓名: 学号: 指导教师: 2016年 07月13日

单片机原理与应用课程设计评阅书

信息与电气工程学院 课程设计任务书 2015-2016学年第2学期 专业:电子信息工程学号:姓名: 课程设计名称: 设计题目: 完成期限:自 2016 年 7 月 4 日至 2015 年 7 月 15 日共 2 周 设计依据、要求及主要内容(可另加附页): 设计依据:STC15F2K60S2单片机的定时/计数器,74HC59芯片的串并输出,数码管显示。 实验要求: (1)、利用STC15F2K60S2单片机作为主控器组成一个电子日历和电子钟。 (2)、利用LED分别显示当前时间和日历。 (3)、利用尽可能少的开关实现:校正日历和时间 (4)、定制闹钟(时、分、表)。 主要内容: 本系统是用STC15F2K60S2单片机的T0定时器的16位自动重装来产生1ms节拍,程序运行于这个节拍下,通过计数1000次从而自动定时于1s,以实现时钟的仿真。另外通过STC15F2K60S2单片机的IO方式控制74HC595驱动8位数码管。数码管可以实时显示秒,分,小时,日期,月份和年等信息,并且实现闹铃功能时,数码管闪烁显示。矩阵式键盘采用编程扫描方式,可以实现秒,分,小时,日期,月份和年信息的校准。同时通过STC15F2K60S2单片机的外部中断INT0实现年月日与时分秒显示的切换。 指导教师(签字): 批准日期:年月日

本设计是基于51系列的单片机进行的实时日历和时钟显示设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。实时日历和时钟显示的设计过程在硬件与软件方面进行同步设计。硬件部分主要由STC15F2K60S2单片机,LED显示电路,以及调时按键电路等组成,系统通过74HC595驱动8位数码管现实数据,所以具有人性化的操作和直观的显示效果。软件方面主要包括时钟程序、键盘程序,显示程序等。本系统以单片机的汇编语言进行软件设计,为了便于扩展和更改,软件的设计 采用模块化结构,使程序设计的逻辑关系更加简洁明了,以便更简单地实现调整时间及日期显示功能。所有程序编写完成后,在wave软件中进行调试,确定没有问题后,在Protel99se 软件中嵌入单片机内进行仿真。 关键词:STC15F2K60S2;Protel99se;74HC595

最全最好的课程设计-51单片机电子日历时钟( 含源程序)

LED日历时钟课程设计 院系: 班级: 姓名: 学号: 指导教师: 2012 年06 月16 日

目录

摘要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。 第一章前言 数字电子钟具有走时准确,一钟多用等特点,在生活中已经得到广泛的应用。虽然现在市场上已有现成的电子钟集成电路芯片,价格便宜、使用也方便,但是人们对电子产品的应用要求越来越高,数字钟不但可以显示当前的时间,而且可以显示期、农历、以及星期等,给人们的生活带来了方便。另外数字钟还具备秒表和闹钟的功能,且闹钟铃声可自选,使一款电子钟具备了多媒体的色彩。单片机具有体积小、功能强可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和和生活的各个角落,有力地推动了各行业的技术改造和产品的更新换代,应用前景广阔。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k B ytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。

最新毕业设计:基于单片机的电子日历时钟

一课程设计题目:电子日历时钟 二实现的功能: 基本功能: (1)显示北京时间,并且能够校准时间; (2)程序使用汇编语言; (3)显示的时、分、秒之间以及年、月、日间以小数点分隔;(4)显示公历日期,并且能够校准日期; 发挥功能: (5)运动秒表; (6)闹钟功能; (7)自动整点报时。 三课程设计的目的: 课程标志性内容的设计理解和综合运用,对所学内容进行一次实操,学以致用。 四、设计方案说明 1、硬件部分 (1)采用6位LED数码管显示日期或者时间。 (2)显示器的驱动采用“动态扫描驱动”,且采用“一键多用”的设计方案,系统电路大为简化。使用小数点表示闹 钟设置状态; (3)电路连接使用PCB,使电路连接简洁美观

2、软件部分 (1)“时钟”基准时间由单片机内部的定时中断提供,考虑因素:定时时间是“秒”的整除数,且长短适宜。最长不 能超过16位定时器的最长定时时间;最短不能少于中断服 务程序的执行时间。基准时间越短,越有利于提高时钟的 运行精确度。基准时间定为0.05秒。 (2)用一个计数器对定时中断的次数进行计数,由基准时间为0.05秒知计数值为20即可实现实现“秒”定时,同理 进行“分”﹑“时”定时,以及“日”﹑“月”﹑“年” 定时。 (3)LED 数码管显示器采用“动态扫描驱动”考虑问题:驱动信号的维持时间必须大于“起辉时间”(电流大起辉时间 短),而驱动信号的间歇时间必须小于“余辉时间”(电流 大余辉时间长),但驱动电流大小受硬件电路能力和LED 数码管极限功耗的制约。 (4)动态扫描显示方式在更新显示内容时,考虑到因LED数码管余辉的存在可能会造成显示字符的模糊,所以新内容 写入显示器之前将所有的LED数码管熄灭。 (5)关于自动识别“月大﹑月小”和“平年﹑润年”问题的考虑 a)月大和月小 2月另外计算;

Java日历记事本课程设计报告

Java日历记事本课程设计报告 在设计日历记事本时,需要编写6个JAVA源文件:、、、、和 效果图如下 . CalendarWindow类 import .*; import .*; import .*; import .*; public class CalendarWindow extends JFrame implements ActionListener,MouseListener,FocusListener{ int year,month,day; CalendarMessage calendarMessage; CalendarPad calendarPad; NotePad notePad;

JTextField showYear,showMonth; JTextField[] showDay; CalendarImage calendarImage; String picturename; Clock clock; JButton nextYear,previousYear,nextMonth,previousMonth; JButton saveDailyRecord,deleteDailyRecord,readDailyRecord; JButton getPicture; File dir; Color backColor= ; public CalendarWindow(){ dir=new File("./dailyRecord"); (); showDay=new JTextField[42]; for(int i=0;i<;i++){ showDay[i]=new JTextField(); showDay[i].setBackground(backColor); showDay[i].setLayout(new GridLayout(3,3)); showDay[i].addMouseListener(this); showDay[i].addFocusListener(this); } calendarMessage=new CalendarMessage(); calendarPad=new CalendarPad(); notePad=new NotePad(); Calendar calendar=(); (new Date()); year=; month=+1; day=; (year); (month); (day); (calendarMessage); (showDay); (year,month,day); (); doMark(); calendarImage=new CalendarImage(); (new File("")); clock=new Clock(); JSplitPane splitV1=new JSplitPane,calendarPad,calendarImage); JSplitPane splitV2=new JSplitPane,notePad,clock); JSplitPane splitH=new JSplitPane,splitV1,splitV2);

数电课程设计数字日历电路

题目:数字日历电路 班级: 姓名: 数字日历电路

一、设计任务及要求: 1、用5个数码管分别显示月、日、星期; 2、月、日的计数器显示均从1开始,每月按30天算; 3、对星期的计数显示从1到6再到日(日用8代替)。 二、方案设计与论证: 日历是一种日常使用的出版物,用于记载日期等相关信息。每页显示一日信息的叫日历,每页显示一个月信息的叫月历,每页显示全年信息的叫年历。有多种形式,如挂历、座台历、年历卡等,如今又有电子日历。逢年过节,往往会送亲友日历已显亲情友情可日历在现代社会中是很重要的。而纸制日历对森林保护不利,因此设计电子日历意义重大。在设计日历倒计时器时,采用了模块化的思想,将日历分为三个部分:日期、月份及年份,使得设计简单、易懂。本设计能进行月、日、星期的的计数,在社会生活中具有实际的应用价值。下面就是我们组设计电子日历的主要思路: 本数字日历电路计数显示电路和控制电路组成,计数显示电路主要由同步十进制计数器74LS160构成日期、月份和星期计数器,然后通过译码器数码管显示出来控制调节电路则用了组合控制逻辑电路去控制日期计数器及月计数器的置数端和使能端,从而实现日期和月份的调节功能。星期显示在脉冲作用下,从星期一到星期日循环计数,从而形成星期随着日期循环显示。综上,该方案是具体可行的。 三、设计原理及框图: 本数字日历电路主要由五个加计数器160、五个48译码器、显示器、控制开关构成。它们的工作原理是:用两片十进制计数器74LS160同步预置数(高位置入0000,低位置入0001)构成日期计数器,使其每次从一开始计数,从日期计数器的输出三十这个信号使其同时给月计数器的CP端信号使其计数,最后给日计数器的低位以信号源使其计数,同时在脉冲的作用下,使星期循环计数,随着日期的变化而变化。74LS48译码器将信号传给显示器显示数据。

课程设计万年历的设计52503328

课程设计万年历的设计52503328

兰州理工大学 计算机与通信学院 2014年秋季学期 面向对象课程设计 题目:万年历的设计

序言 《面向对象的程序设计》是计算机专业一门重要的专业基础课。此次课程设计的目的是以面向对象程序设计语言为基础,通过完成一些具有一定难度的课程设计题目的编写、调试、运行工作,进一步掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的能力。通过课程设计,学生在下述各方面的能力应该得到锻炼: (1)进一步巩固、加深学生所学专业课程《C++语言程序设计》的基本理论知识,理论联系实际,进一步培养学生综合分析问题、解决问题的能力。 (2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。 (3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。 (4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 (5)掌握面向对象的程序设计方法。 (6)进一步掌握在集成环境下如何调试程序、修改程序和程序的测试。

目录 摘要 (2) 第一章系统总体设计 (3) 一.理论说明 (3) 二.流程图说明 (4) 1.总体流程说明图 (4) 2.部分流程说明图 (4) 第二章系统详细设计 (7) 一.主要组成部分 (7) 二.源程序 (9) 第三章系统测试 (34) 四软件使用说明书 (40) 一.系统运行环境 (40) 二.系统操作提示 (40) 总结 (41) 参考文献 (42) 致谢 (42)

课程设计(数字日历钟表的设计)

课程设计说明书(论文) 课程名称:课程设计1 设计题目:数字日历钟表的设计 院系: 班级: 设计者: 学号: 设计时间:2013-6-19

哈尔滨工业大学 哈尔滨工业大学课程设计任务书 姓名:院(系): 专业:班号: 任务起至日期:2013 年 5 月日至2013 年 6 月19 日 课程设计题目:数字日历钟的设计 已知技术参数和设计要求: 1.数码管显示:秒、分、时(可同时显示,也可轮换显示) 2.能够设置时间,“设置按键”数量不限,以简单合理易用为好。 3.误差:1 秒/天(报告中要论述分析是否满足要求) 扩展(优秀必作) 1.设置校准键:当数字钟显示在“整点±30 秒”范围时,按动“校准键”,数字钟即刻被调整到整点,消除了±30 秒的误差。 2.加上“星期”显示(可以预置),并可以对其进行设置。 其他要求: 1.按动员老师的要求、课程设计报告规范进行设计 2.不允许使用时数字钟表、日历专用IC 电路。 3.可以使用通用器件:模拟、数字、单片机、EPLD、模块电路等。 4.设计方法不限。

工作量: 1. 查找资料 2. 设计论证方案 3. 具体各个电路选择、元器件选择和数值计算 4. 具体说明各部分电路图的工作原理 5. 绘制电路原理图 6. 绘制印刷电路图 7. 元器件列表 8. 编写调试操作 9. 打印论文 工作计划安排: 1. 查阅资料: 2. 方案论证 3. 设计、分析、计算、模拟调试、仿真、设计原理 4. 撰写报告:课程设计要求、方案论证、原理论述(原理框图、原理图)、分析、计算、仿真, PCB 图的设计,误差分析、总结,参考文献等 5. 上交课程设计论文2013-6-19 同组设计者及分工:

数字电路课程设计 电子日历

数字电路综合设计报告 电子日历 一、 设计要求 1.能显示年、月、日,星期; 2.年月日,星期可调; 3.不考虑闰年。 二、 题目分析 题目可概括如下:通过一个时钟信号计时,电路需要按照历法规则准确计数,并将年月日星期显示出来,此外还要求可以人工调整日期。为了实现功能,主要需搭设出一个可靠的时钟信号发生器,用于计数的计数模块,用于显示计数结果的模块。 三、 设计过程 A. 设计思路 此设计主要分为三个模块:时钟信号发生模块、时分秒计数模块、年月日计数模块。其中,时钟信号发生模块通过晶振发生一定频率的时钟信号,再通过分频,将晶振发出的信号分频成1hz 的秒脉冲信号,最后将秒脉冲信号送入。时分秒计数模块。时分秒计数模块在秒脉冲信号的控制下按规则计数,在满24小时时进位,并将进位信号送入年月日计数模块。年月日模块在时分秒模块进位信号的控制下计数,每收到一个进位信号就加一,并把每一时刻的计数结果通过数码管显示出来。各模块的关系如图一所示: B. 各 框 架 设 计 a) 时钟信号发生模块 此模块采用晶振电路产生时钟信号,再通过390、161以及D 触发器分频最后得到频率为1Hz 的秒脉冲输出信号。 基本框架如下:

仿真电路如下: b) 时分秒计数模块 在此模块中,利用390、 161构成两个六十进制和一个二十四进制计数器,分别对应秒、分、时。在时钟信号发生模块的输出信号控制下进行逐级计数, 最后将二十四进制计数器的进位信号作为输出信号。 基本框架如下:

c)年月日计数模块 此模块中利用一块161、160,分别构成七进制,二十八进制、三十进制、三十一进制、十二进制、100进制计数器。为了实现大小月功能,使用了151数据选择器,将不同触发条件作为输入数据,将12进制的触发信号作为地址输入,因此可根据“月” 的状态选择“日”的清零触发条件。为了实现年月日星期设置功能,采用四个单刀双掷开关,一边连时钟模块,一边连接按键式单脉冲。当需要设置时,将开关拨去按键式单脉冲那端,利用脉冲手动调节。 基本框架如下:

电子日历记事本--Java课程设计

《面向对象程序设计》课程设计报告 题目:电子日历记事本的设计 院(系):信息科学与工程学院 专业班级:计算机科学与技术1201班 学生姓名:程伟 学号: 20121183011 指导教师:吴奕 20 14 年 12 月 29 日至20 15 年 1 月 9 日 华中科技大学武昌分校制 面向对象程序设计课程设计任务书

目录 1需求与总体设计 1 1.1需求分析 1 1.2总体设计思路 1 1.2.1功能图 1 1.2.2类图 2 2详细设计 (3) 2.1 CalendarPad类说明 3 2.2 Year类说明 3 2.3 Month 类模块 4 2.4 NotePad类说明 4 3编码实现 6 3.1 CalendarPad模块 6

3.2 Year模块 11 3.3 Month 模块 14 3.4 NotePad模块 16 4系统运行与测试 23 4.1程序主界面 23 4.2日志查看——无日志 23 4.3建立日志 24 4.4日志查看——有日志 24 4.5删除日志 26 总结 27 1需求与总体设计 1.1需求分析 根据题目要求,将日历与记事本功能相结合,实现对某日期的事件进行记录的功能,设计出简洁方便美观的GUI界面。 将本程序主界面可以分为四个部分:日历日期信息展示、年份、月份、记事本内容、记事本下方的时钟,用四个类来实现其“日历”和“记事本”这两大功能。通过主类CalendarPad创建动日历记事本软件的主界面,且该类中含有main

方法,程序从该类开始执行。再用余下的year、mouth、NotePad类来显示并改变日期和实现记事本的功能。 1.2总体设计思路 1. 可以编辑日历的日期 2. 可以判断当前日期是否存在日志记录 3. 对有日志记录的日期,可以对该日期的日志记录进行修改和删除 4. 对没有日志记录的日期,可以创建并保存新建的日志记录 5. 对保存的日志加密,查看时得输入密码 1.2.1功能图

电子万年历课程设计

烟台南山学院单片机课程设计题目电子万年历 姓名: 所在学院:烟台南山学院 所学专业:自动化 班级: 学号: 指导教师: 完成时间:

摘要 单片机作为当今领域应用广泛的电子器件,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由5V直流电源供电,通过数码管能够准确显示时间,日期,调整时间,日期,从而到达学习、设计、开发软、硬件的能力。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本设计由单片机AT89C51芯片和LED数码管为核心,运用DS1302时钟芯片,辅以必要的电路,构成了一个单片机电子时钟。

1 绪论 (1) 2 总体方案设计与论证 (2) 2.1数字时钟方案 (2) 2.2显示方案 (3) 3 硬件系统的方案设计 (4) 3.1 系统框图 (4) 3.2 单片机的选择 (4) 3.3 时钟电路DS1302 (7) 3.4 时钟电路及复位电路 (9) 3.5 驱动电路 (9) 3.6 显示电路 (10) 3.7 按键接口 (11) 4 软件系统设计 (12) 4.1 时间信息获取程序 (12) 4.2 显示程序 (12) 5 系统调试 (13) 5.1 系统调试 (13) 5.2 时钟显示 (13) 5.3 DS1302的调试 (13) 5.4 按键电路调试 (13) 6 总结 (14) 参考文献 (15) 附录:系统程序 (16)

Java日历记事本课程设计报告

Java 日历记事本课程设计报告 在设计日历记事本时,需要编写6个JAVA源文件:、、、、和 效果图如下 . CalendarWindow 类 import .*; import .*; import .*; import .*; public class CalendarWindow extends JFrame implements ActionListener,MouseListener,FocusListener{ int year,month,day; CalendarMessage calendarMessage; CalendarPad calendarPad; NotePad notePad; JTextField showYear,showMonth; JTextField[] showDay; CalendarImage calendarImage;

String picturename; Clock clock; JButton nextYear,previousYear,nextMonth,previousMonth; JButton saveDailyRecord,deleteDailyRecord,readDailyRecord; JButton getPicture; File dir; Color backColor= ; public CalendarWindow(){ dir=new File("./dailyRecord"); (); showDay=new JTextField[42]; for(int i=0;i<;i++){ showDay[i]=new JTextField(); showDay[i].setBackground(backColor); showDay[i].setLayout(new GridLayout(3,3)); showDay[i].addMouseListener(this); showDay[i].addFocusListener(this); } calendarMessage=new CalendarMessage(); calendarPad=new CalendarPad(); notePad=new NotePad(); Calendar calendar=(); (new Date()); year=; month=+1; day=; (year); (month); (day);

单片机电子万年历课程设计报告书

单片机课程设计 姓名:吕长明 学号:04040804021 专业班级:机电四班

一、单片机原理及应用简介 随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术 的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机(Single-Chip Microcomputer)。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工 业控制系统、数据采集系统、自动测试系统、万年历电子表等。 二、系统硬件设计 8052 是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图图1: 图1 8052引脚 P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。 P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。 P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。 P3.0~P3.7 P2口8位双向口线(在引脚的10~17号端子)。 8052芯片管脚说明: VCC:供电电压。 GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用

于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如表1所示: 表1 特殊功能口 P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

基于单片机的万年历时钟设计【文献综述】

毕业设计开题报告 测控技术与仪器 基于单片机的万年历时钟设计 1前言部分 在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,需要一款灵活、稳定而又功能强大的自动定时控制系统,以规范本单位的作息时间或定时控制一些设备。目前,市面上出现的一些时控设备或功能单一,或使用烦琐,或价格昂贵,总有一些不尽如人意的地方[1]。我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,17 世纪中叶, 由荷兰人C. Huygens来发明的第一个钟摆与以前任何计时装置相比, 摆钟的精确度提高了上百倍,而他随后发明的螺旋平衡弹簧,又进一步提高精度、减小体积, 导致了怀表的出现。然而再好的摆钟,其精度也只能达到每年误差不超过一秒[2]。1939年出现了利用石英晶体振动计时的石英钟, 每天误差只有千分之二秒, 到二次大战后精度提高到30 年才差一秒。很快, 测年的技术又推进到原子层面, 1948 年出现第一台原子钟, 1955年又发明了铯原子钟, 利用Cs133原子的共振频率计时,现在精度已经高达每天只差十亿分之一秒[2]。 从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,无法更大程度上的满足人们的需求。发展到现在人们广泛使用的万年历。万年历在家庭居室、学校、车站和广场使用越来越广泛,给人们的生活、学习、工作带来极大的方便[3]。电子万年历具有信息量大、直观清晰、经济实用等优点,正成为家庭、商场、公共场所等新的消费热点,具有重要的开发价值[4]。随着科技的不断发展,家用电子产品不但种类日益丰富,而且变得更加经济实用,,功能也越来越齐全,除了公历年月、日、时分秒、星期显示及闹铃外,又增加了农历、温度、24节气及l2生肖等显示。甚至还有语音报时等独特功能。再加上造型新颖别致,附带立体动感画面,

课程设计-电子日历表

课程设计-电子日历表

————————————————————————————————作者:————————————————————————————————日期:

数字电子技术课程设计 河南城建学院自动化专业 题目:电子日历表 姓名:郑文杰 学号:092411257 指导教师:周炎 时间:2013年6月24日~2013年6月27日

指导教师评语:成绩:

摘要 本设计是一个将“年”、“月”、“日”显示出来的电子日历。数字电路具有理解简单、可靠性高、成本低等优点。所以本设计就是以数字电路为核心的时间显示装置。主要由由脉冲源,计数电路,反馈电路,门电路和显示电路构成。 由于此次设计年、月、日均为循环计数,故采用计数器实现循环计数及进位,日计数器有四个不同进制的计数器组成,月计数器输出的脉冲经过门电路来控制各计数器的使能端使被选中的日计数器工作。其中二月份的天数比较特别,在平年和闰年中的天数不同,所以让年计数器的输出脉冲与二月份信号一起控制对二月份天数的选择。最后用七段式译码显示器显示出年、月、日。同时引进电子校对电路,使得显示结果出错率大大降低。 在这次设计中我和搭档首先分析了一下要完成本次设计需要哪些功能而完成这些功能的元件又是哪些,然后再通过查找资料设计出大概方案。在对整个模块进行分析和画出电路总体电路图后,对各模块进行仿真并记录仿真所观察到的结果。 实验证明该设计电路基本上能够符合设计要求、达到预期设计效果。 关键词:电子日历、计数器、循环 目录

1 概述 (5) 1.1 设计目的 (5) 1.2 设计要求 (5) 1.3 设计任务 (5) 1.4 设计原理 (5) 2 设计方案及其比较 (6) 2.1 方案比较 (6) 2.2 设计电路的总体结构 (6) 2.3 设计所用元件 (7) 3 各部分电路设计 (8) 2.1 日计数器 (8) 2.2 月计数器 (9) 2.3 年显示电路 (10) 2.4 反馈电路 (11) 4软件仿真整体电路 (12) 5课程设计体会 (13) 6参考文献 (14) 1 概述

相关文档
相关文档 最新文档