万年历设计(嵌入式)

万年历设计(嵌入式)
万年历设计(嵌入式)

目录

摘要 (2)

ABSTRACT (3)

一、系统基本方案选择与论证 (4)

1.1 单片机芯片的选择方案与论证 (4)

1.2时钟芯片选择 (4)

1.3显示模块的选择 (4)

二、系统硬件设计与实现 (5)

2.1 系统总体框图 (5)

2.2 主控单元和按键部分设计 (6)

2.3 LCD1602显示模块 (7)

2.4 DS1302时钟部分 (8)

1. 工作原理: (9)

2. DS1302的控制字节 (9)

3. 数据输入输出(I/O) (10)

4. DS1302的寄存器 (10)

三、系统软件设计与实现 (11)

3.1 系统总体软件流程图 (11)

3.2 LCD1602部分 (11)

3.3 DS1302部分 (12)

3.4 按键处理子程序 (13)

3.5 定时器部分 (14)

四、设计心得 (15)

五、参考文献 (15)

教师评阅:

□设计思路正确;□仿真结果正确可信;□设计成果符合要求;□设计报告规范;

□设计过程原始记录(元件参数、原理图、计算等)符合要求;□设计分析总结全面;评分:

摘要

随着经济的腾飞、科技的发展,信息起着越来越重要的作用。计算机、网络和嵌入式等信息技术在各个领域的应用也愈来愈广泛,尤其是嵌入式技术。在如今办、公生活领域,随处可见各种嵌入式设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统。21世纪,是信息化的时代,是科学技术日新月异时代。随着科技的不断进步与更新,以及人们对智能时代的向往,嵌入式技术将迎来属于它的春天。

本文以电子万年历为例,采用AT89C51作为主控芯片,选择DS1302作为时钟芯片,利用LCD1302液晶作为显示器件为主要部件。实现了以时间、年份、星期的实时显示功能,并可对其进行修改保存。

关键词:嵌入式;电子万年历;AT89C51。

ABSTRACT

With the rapid economic growth, technological development, information plays an increasingly important role. Computers, networks, and embedded in various fields such as information technology applications are increasingly widespread, especially in embedded technology. In today's office, the public areas of life, you can see a variety of embedded devices, such as watches, microwaves, VCRs, cars, etc., all use embedded systems. 21st century is the era of information technology, is the era of science and technology. As technology continues to progress and updates, as well as people's desire for smart era, embedded technology will usher in a part of its spring.

In this paper, electronic calendar, for example, using AT89C51 as the master chip, select DS1302 clock chip as using LCD1302 as a display piece for the main components. Implementation of a time, year, week, real-time display function, and can be modified to save.

Keywords:Embedded;Electronic calendar; AT89C51.

一、系统基本方案选择与论证

1.1 单片机芯片的选择方案与论证

AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。它是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1.2时钟芯片选择

方案一:选择AT89C51单片机内部的定时器0或定时器1来提供基准的秒信号。比如选择定时0的方式1来计数50ms,然后循环20次,便可提供1秒的基准信号,从而实现年、月、日、时、分等。优点:采用这种方案的话,系统外围的的器件比较少,且实现起来比较方便,成本也比较低。但是这种方案也有其不足之处,作为万年历的设计,不仅要求简单实用,最重要的是要时间准确,误差极小。缺点:误差比较大,且没有掉电保护的功能,也就是说在掉电之后,需要手动再调准时间,使用上不是很方便。

方案二:选择DS1302时钟芯片。

DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时,时钟/日历和31 字节静态RAM,可通过简单的串行接口与单片机进行通信。可提供: --秒、分、时、日、月、年的信息;

--每月的天数和闰年的天数可自动调整;

--可通过AM/PM 指示决定采用24 或12 小时格式;

--保持数据和时钟信息时功率小于1mW。

芯片的工作电压为2.0至5.0V,提供主电源和备用电源双电源引脚。可以对后备电源进行涓细电流充电。芯片采用串行接口方式和外部单片机进行同步通信,数据可以每次以一个字节或多个字节形式传送时钟信号或RAM数据。

综上所述,选择方案二。

1.3显示模块的选择

方案一:选择LED数码管动态扫描。优点:数码管作为平时最常见的一种的

显示器件,原理与实现方法相对比较简单,对于显示数字来说是不错的选择。缺点:增加外围设备的负担,显得不是很直观。另外,虽说原理简单,但对于本设计来说,实现起来稍显复杂。

方案二:选择LCD12864液晶显示模块。LCD12864液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置8192 个中文汉字(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。可与CPU直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等。LCD12864显示的信息很大,但随之带来的就是比较复杂的程序。

方案三:选择LCD1602液晶显示模块。LCD1602是字符点阵系列液晶模块,它是一类专门用于显示字母、数字、符号等的点阵型液晶显示模块,分为四位和八位数据传输方式,提供5*7点阵+光标和5*10点阵+光标的显示模式,提供显示数据缓冲区DDRAM、字符发生器CGRAM、CGROM,可以使用CGRAM来存储自己定义的最多8个5*8点阵的图形的字模数据。程序设计相对LCD12864简单一些。

由于本设计要显示基本的时间信息,但又不需要显示汉字,综合考虑,选择方案三——LCD1302液晶显示模块。

二、系统硬件设计与实现

2.1 系统总体框图

图 1

如图1所示,本设计从整体的框图上来看是比较简单的。主要包括AT89C51主控单片机芯片、键盘模块、液晶显示模块、时钟芯片。主控芯片AT89C51是整个系统的核心,接收键盘传入的信息,控制显示液晶,从DS13202中读取和写入数据等等一系列的操作和控制都在这里完成;键盘主要是为了纠正时间,对时间进行修改;液晶模块则是显示时间,星期,年月日;时钟芯片部分主要是进行计时。

2.2 主控单元和按键部分设计

图 2

1.主控部分:

对于主控方面的设计,其实就是一个单片机的最小系统。主控芯片使用的是AT89C51,可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统

继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。该系统主要包含两部分:时钟部分和复位电路。下面简单介绍一下这两部分。

时钟部分:单片机工作时,从取指令到译码再进行微操作,必须在时钟信号控制下才能有序地进行,时钟电路就是为单片机工作提供基本时钟的。单片机的时钟信号通常有两种产生方式:内部时钟方式和外部时钟方式。在本设计中显然采取的是外部时钟的方式。选择的是12MHz,其机器周期是1us,也就是说执行一条单周期指令只需要1us,执行一条双周期指令则需要2us。

复位电路部分:无论是在单片机刚开始接上电源时,还是运行过程中发生故障都需要复位。复位电路用于将单片机内部各电路的状态恢复到一个确定的初始值,并从这个状态开始工作。

单片机的复位条件:必须使其RST引脚上持续出现两个(或以上)机器周期的高电平。

2. 按键部分:

按键部分的主要功能是,对时间进行修改,包含三个按键和三个上拉电阻。功能键的作用是选择要改变的数据,按下增量键则是对数据在原来的基础上加一,减量键则是相反的共能。

2.3 LCD1602显示模块

图 3

1.连接说明:

LCD1602显示器部分的电路原理以及连接方式如图3所示。其中LCD1602的RS端口连接在单片机的P2.0口;使能端连接在P2.1口上;数据端口D7至D0则连接在单片机的P0口上。

2.引脚功能简介及说明。

表1:LCD1602引脚功能

第1脚:VSS 为地电源。 第2脚:VDD 接5V 正电源。

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

4

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

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

第6脚:E 端为使能端,当E 端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 3. LCD 指令:

表2:指令表

2.4 DS1302时钟部分

上图示出DS1302电路原理图,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中

图 4

的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST 输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS

置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc 大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。

1.工作原理:

DS1302时钟芯片主要有寄存器、控制寄存器、振荡器、实时时钟以及RAM

组成。为了对任何数据传送进行初始化,需要将/RST置为高电平且将8位地址

和命令信息装入移位寄存器。数据在SCLK的上升沿沿串行输入,前8位指定

访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作输出数据,写操作输入数据。时钟的个数在单字节方式下为8加8(8位地址加8位数据),

在多字节方式下为8加最多可达248的数据。

DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置“0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图2.3.3所示。表2-1

为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进

行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,

CK

=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该

位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/

输出的。表2-2为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,

当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时

钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必

须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。

2.DS1302的控制字节

DS1302的控制字如表2.1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历

时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有

效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是

从最低位开始输出。

表3 DS1302的控制字格式

RAM RD

1

CK A4 A3 A2 A1 A0

RW

3. 数据输入输出(I/O)

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图所示:

图 5

4. DS1302的寄存器

DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表2.2。

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

表4 DS1302寄存表

三、系统软件设计与实现

3.1 系统总体软件流程图

从系统的总体流程图可以看出,在整个程序设计中,主要涉及到LCD1602初始化,DS1302初始话,定时器0的初始化以及按键的处理子程序;其实还有一些其他的辅助程序,例如BCD 码与十六进制之间的转换函数等。

3.2 LCD1602部分

1.初始化的流程图

图6

2.涉及到的函数:

1)BCD 码与十六进制之间的转换函数。

因为字符信息在LCD1602中是已BCD 码的形式存储的。所以需要将十六进制的数据转换成BCD 码的形式,在传到液晶里去。将BCD 转十六进制的方法:原高4位数据*10+低4位即可。反过来的方法:将十六进制数除以10,所得整数部分乘以16再加上原数据的个位即可。

2)延时函数:延时函数相对比较简单,直接使用两个循环即可。

3)液晶写入指令和数据函数:这两个函数的实现也是很简单的,设定相应模式,直接使用赋值语句即可。比如说写如数据的函数:先将RS 口置一,然后将数据赋值给数据端口,延时一段时间,拉高使能端,再延时一段时间,最后再拉低使能端即可完成。相应的写入指令函数,也可类似操作。

3.3 DS1302部分

1. 初始化的流程图:

图7

图8

2.涉及到的函数:

1)1302字节写函数:主要实现往DS1302中写入一个字节的数据。实现方法: 首先启动读写操作,使用循环,从最低位开始,一位一位的往里写,每写一位数据后,要制造一个时钟上升沿,这样数据采用写入。

2)字节读函数:此函数的功能与写函数的正好相反,是从DS1302中读出一个数据。只不过在读出的时候,是要制造一个下降沿才有效。

3)液晶地址、数据读函数。在这个函数中,首先一样,得启动读写操作,然后调用写函数写入地址,再调用读函数,读出数据即可。

3.4 按键处理子程序

1.功能键程序流程图:

当判断到功能键按下时,使用一个延时来消去抖动。然后将标志加1,判断标志是否为9,如果为9将其置为1,这位做的原因是,总共需要修改的数据只有8位,因此以8为周期。然后根据不同的标志,使用switch ,case 语句来判断需要修改的到底是哪个数据。

图9

2.增、减量键程序流程图,以增量键为例:

增量键和减量键只有在功能键按下的时候才有效,其他情况不会产生任何操作。当功能键按下的时候,程序扫描这两个按键。比如当增量键按下的时候,同样会利用以个延时来消去抖动。然后等待按键释放,按键释放后根据不同的标志值,将相应的数据加1,然后送至液晶显示并送至DS1302芯片存贮。而相应的减量键则是一样的。

3.5定时器部分

定时器部分主要使用的是AT89C51内部的定时器中断。在本设计中选定的定

时器为定时器0,并选择其工作方式为方式1。设定为每隔0.5ms 读取一次DS1302中的数据并送至液晶显示器显示。在中断处理程序中调用上面写好的数据读取函数即可。

图10

四、设计心得

五、参考文献

[1] 徐敏,等. 单片机原理及其应用[M]. 北京:机械工业出版社,2012.

[2] 郑锋,等. 51单片机典型应用开发范例大全[M]. 北京:中国铁道出版社,2011.

[3] 赵建领,等. 精通51单片机开发技术与应用实例[M]. 北京:电子工业出版社,2012.

[4] 戴佳,等. 51单片机C语言应用程序设计实例精讲[M]. 北京:电子工业出版社,2006.

[5] 郭天祥. 新概念51单片机C语言教程[M]. 北京:电子工业出版社,2009.

附录:主要程序代码

#include

#define uint unsigned int

#define uchar unsigned char

//-------初始设置--------

uchar

Second,Minute,Hour,Date,Month,Year,week= 0;//定义时间等变量

#define one 0x80 //第一行的初始位置

#define two 0xc0 //第二行的初始位置

sbit RS_1602=P2^0;

//1602RS端

sbit E_1602=P2^1;

//1602使能端

sbit IO_1302=P2^4;

//1302I/O端

sbit CLK_1302=P2^3;

//1302时钟端

sbit RST_1302=P2^2;

//1302复位端

sbit key_mode=P1^0;

//功能按键

sbit key_up=P1^1; //增量键

sbit key_down=P1^2;

//减量键

sbit ACC0=ACC^0;

sbit ACC7=ACC^7;

uchar code tab1[]={"20 - - week "}; //液晶第一行默认显示数据

uchar code tab2[]={" : : "}; //液晶第二行默认显示数据

//-------函数声明----------

void init(); //定时器0初始化

uchar BCD_Decimal(uchar bcd);

//BCD转16进制数

uchar Dec_BCD(uchar Dec);

//16进制数转BCD

void delay(uint xms); //延时函数

write_1602com(uchar com); //液晶写入指令函数

write_1602dat(uchar dat); //液晶写入数据函数

void write_hms(uchar add,uchar dat); //1602写时分秒

void write_ymd(uchar add,uchar dat); //1602写年月日

void write_week(uchar week);

//1602写星期函数

lcd_init(); //液晶初始化函数

void write_byte(uchar dat);

//1302字节写

uchar read_byte();

//1302字节读

void write_1302(uchar add,uchar dat); //1302地址写

uchar read_1302(uchar add);

//1302地址读

void ds1302_init();

//1302初始化

void keyscan();

//按键处理子程序

//-----------主函数----------

main()

{

lcd_init();

ds1302_init();

init();

while(1)

keyscan();

}

//-------定时器0初始化--------

void init()

{

TMOD=0x01;

//定时器0,16位定时器模式

TH0=0xFF;

TL0=0x06;

EA=1;

//总中断使能

ET0=1;

//定时器0中断使能

TR0=1;

//定时器0启动

}

//--------BCD转16进制数----------

uchar BCD_Decimal(uchar bcd)

{

uchar Decimal;

Decimal=bcd>>4;

//高4位移到低4位

return(Decimal=Decimal*10+(bcd&=0x0 F));//原高4位数据*10+低4位

}

//--------16进制数转BCD----------

uchar Dec_BCD(uchar Dec)

{

uchar BCD;

BCD=(Dec)/10*16+(Dec)%10;

return(BCD);

}

//----------延时函数-----------

void delay(uint xms)

{

uint i,j;

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

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

}

/******************液晶1602写入************************/

//--------液晶写入指令函数--------

write_1602com(uchar com)

{

RS_1602=0;

//置RS为0,写入命令

P0=com;

//送入数据

delay(1);

E_1602=1;

//拉高使能端,为写操作做准备

delay(1);

E_1602=0;

//完成高脉冲

}

//--------液晶写入数据函数--------

write_1602dat(uchar dat)

{

RS_1602=1;

//置RS为1,写入数据

P0=dat;

//送入数据

delay(1);

E_1602=1;

//拉高使能端

delay(1);

E_1602=0;

//完成高脉冲

}

//--------1602写时,分,秒--------

void write_hms(uchar add,uchar dat)

{

uchar gw,sw;

gw=dat%10;

//分出个位数据

sw=dat/10;

//分出十位数据

write_1602com(two+add);

//在第一行对应位置显示

write_1602dat(0x30+sw);

write_1602dat(0x30+gw);

}

//--------1602写年,月,日--------

void write_ymd(uchar add,uchar dat)

{

uchar gw,sw;

gw=dat%10;

//分出个位数据

sw=dat/10;

//分出十位数据

write_1602com(one+add);

//在第二行对应位置显示

write_1602dat(0x30+sw);

write_1602dat(0x30+gw);

}

//--------1602写星期函数--------

void write_week(uchar week)

{

write_1602com(one+0x0f);

write_1602dat(0x30+week-1);

}

//--------液晶初始化函数--------

lcd_init()

{

uchar kk;

write_1602com(0x38); //设置液晶工作模式:采用8位数据显示,两行显示

write_1602com(0x0c); //开显示,不显示光标

write_1602com(0x06); //整屏不移动,指针自动加一

write_1602com(0x01);

write_1602com(one);

//第一行字符写入的位置

for(kk=0;kk<16;kk++)

write_1602dat(tab1[kk]);

write_1602com(two+4); //第二行字符写入的位置,空4位

for(kk=0;kk<8;kk++)

write_1602dat(tab2[kk]);

}

/********************DS1302********** ******************/

//----------1302字节写------------

void write_byte(uchar dat)

{

uchar kk;

ACC=dat;

RST_1302=1;

//启动读写操作

for(kk=8;kk>0;kk--)

//8位数据

{

IO_1302=ACC0;

//先传送数据低位

CLK_1302=0;

CLK_1302=1;

//上升沿输入数据

ACC=ACC>>1;

//右移位,下次接着取低位

}

}

//----------1302字节读------------

uchar read_byte()

{

uchar kk;

RST_1302=1;

//启动读写操作

for(kk=8;kk>0;kk--)

{

ACC7=IO_1302;

//先读入数据低位

CLK_1302=1;

CLK_1302=0;

//下降沿输出数据

ACC=ACC>>1;

//右移位,下次接着取

}

return (ACC);

}

//-----------1302地址、数据写------------- void write_1302(uchar add,uchar dat)

{

RST_1302=0;

CLK_1302=0;

RST_1302=1;

//启动读写操作

write_byte(add); //写地址

write_byte(dat); //写数据

CLK_1302=1;

RST_1302=0;

//禁止读写操作

}

//----------1302地址、数据读---------------- uchar read_1302(uchar add)

{

uchar temp;

RST_1302=0;

CLK_1302=0;

RST_1302=1;

//启动读写操作

write_byte(add); //写地址

temp=read_byte(); //读数据

CLK_1302=1;

RST_1302=0;

//禁止读写操作

return(temp);

}

//-----------1302初始化----------------

void ds1302_init()

{

RST_1302=0;

//禁止读写操作

CLK_1302=0;

//时钟为低

write_1302(0x80,Second|0x00); //允许写

}

//----------按键处理子程序-------------

void keyscan() {

uchar key1n; //功能键按下次数

if(key_mode==0)

//key_mode为功能键

{

delay(5); //延时去抖动

if(key_mode==0)

//功能键确认按下

{

while(!key_mode); //等待按键释放

key1n++; //功能键按下次数加一

if(key1n==9) //为9时调为1 只允许取值1~8

key1n=1;

switch(key1n) //功能键按键次数不同实现不同操作

{

case 1: //时调整秒

TR0=0;

//关闭定时器

write_1602com(two+0x0b); //写入光标位置,即秒所在的位置

write_1602com(0x0f); //设置光标为闪烁

write_1302(0x8e,0x00); //允许写

write_1302(0x80,0x80|Dec_BCD(Secon d));//Second

break;

case 2: write_1602com(two+8);break;

//Minute闪烁

case 3: write_1602com(two+5);break; //Hour 闪烁

case 4: write_1602com(one+0x0f);break; //week闪烁

case 5: write_1602com(one+0x09);break; //Date闪烁

case 6: write_1602com(one+0x06);break; //Month闪烁

case 7: write_1602com(one+0x03);break; //Year闪烁

case 8:

write_1602com(0x0c); //设置光标不闪烁

write_1302(0x80,0x00|Dec_BCD(Secon d)); //Second

write_1302(0x8e,0x80); //禁止写

TR0=1;

//打开定时器

break;

}

}

}

if(key1n!=0) //当key_mode按下以后。再按以下键才有效{

if(key_up==0)

//上调键

{

delay(5); //延时去抖动

if(key_up==0) //上调键确认按下

{

while(!key_up);

//等待按键释放

switch(key1n) //功能键按键次数不同实现不同操作

{

case 1:Second++;

//秒加1

if(Second==60)

//加到60时调为0

Second=0;

write_hms(0x0a,Second); //显示新的秒数

write_1302(0x80,0x80|Dec_BCD(Secon d));//写入新的秒数

write_1602com(two+0x0b);//因指针自动加一,要写回原位置

break;

case 2:Minute++;

//分钟加1

if(Minute==60)

//加到60时调为0

Minute=0;

write_hms(7,Minute); //显示新的分钟

write_1302(0x82,Dec_BCD(Minute));//写入新的分钟

write_1602com(two+8); //光标在原位闪烁

break;

case 3:Hour++;

//小时加1

if(Hour==24)

//加到24时调为0

Hour=0;

write_hms(4,Hour); //显示新的小时

write_1302(0x84,Dec_BCD(Hour)); //写入新的小时

write_1602com(two+5); //光标在原位闪烁

break;

case 4:week++;

//星期加1

if(week==9)

//加到8时调为1

week=2;

write_week(week); //显示新的星期

write_1302(0x8a,week); //写入新的星期

write_1602com(one+0x0f);//光标在原位闪烁

break;

case 5:Date++;

//日期加1

if(Date==32)

//加到32时调为1

Date=1;

write_ymd(8,Date); //显示新的日期

write_1302(0x86,Dec_BCD(Date));//写入新的日期

write_1602com(one+9); //光标在原位闪烁

break;

case 6:Month++;

//月份加1

if(Month==13)

//加到13时调为1

Month=1;

write_ymd(5,Month); //显示新的月份

write_1302(0x88,Dec_BCD(Month));//写入新的月份

write_1602com(one+6); //光标在原位闪烁

break;

case 7:Year++;

//年加1

if(Year==100)

//加到100时调为0

Year=0;

write_ymd(2,Year); //显示新的年份

write_1302(0x8c,Dec_BCD(Year));//写入新的年份

write_1602com(one+3); //光标在原位闪烁

break;

}

}

}

if(key_down==0)

//下调键

{

delay(5);

//延时去抖动

if(key_down==0)

//下调键确认按下

{

while(!key_down);

//等待按键释放

switch(key1n)

//功能键按键次数不同实现不同操作

{

case 1:Second--;

//秒减1

if(Second==-1)

//减为-1时调为59

Second=59;

write_hms(0x0a,Second); //显示新的秒数

write_1302(0x80,0x80|Dec_BCD(Secon d));//写入新的秒数

write_1602com(two+0x0b);//光标在原位闪烁

break;

case 2:Minute--;

//分钟减1

if(Minute==-1)

//减为-1时调为59

Minute=59;

write_hms(7,Minute); //显示新的分钟数

write_1302(0x82,Dec_BCD(Minute));//写入新的分钟数

write_1602com(two+8); //光标在原位闪烁

break;

case 3:Hour--;

//小时减1

if(Hour==-1)

//减为-1时调为59

Hour=23;

write_hms(4,Hour); //显示新的小时数

write_1302(0x84,Dec_BCD(Hour));//写入新的小时数

write_1602com(two+5); //光标在原位闪烁

break;

case 4:week--;

//星期减1

if(week==1)

//减为0时调为7

week=8;

write_week(week); //显示新的星期数

write_1302(0x8a,week); //写入新的星期数

write_1602com(one+0x0f);//光标在原位闪烁

break;

case 5:Date--;

//日期减1

if(Date==-1)

//减为0时调为31

Date=31;

write_ymd(8,Date); //显示新的日期数

write_1302(0x86,Dec_BCD(Date));//写入新的日期数

write_1602com(one+9); //光标在原位闪烁

break;

case 6:Month--;

//月份减1

if(Month==255)

//减为0时调为12

Month=12;

write_ymd(5,Month); //显示新的月份数

write_1302(0x88,Dec_BCD(Month));//写入新的月份数

write_1602com(one+6); //光标在原位闪

数字电子课设:万年历的设计

编号 北京工商大学 数字电子技术基础 《万年历的设计》 姓名 学院 班级 学号 设计时间

一、设计目的 1、熟悉集成电路的引脚安排 2、掌握芯片的逻辑功能及使用方法 3、了解数字电子钟及万年历的组成及工作原理 4、熟悉数字电子钟及万年历的设计与制作 5、熟悉multisim电子电路设计及仿真软件的应用 二、设计思路 1、设计60进制秒计数器芯片 2、设计24进制时计数器芯片 3、设计31进制天计数器芯片 4、设计12机制月计数器芯片 5、设计7进制周计数器芯片 6、设计闰年平年不同月份不同进制逻辑 三、设计过程 1、Tr_min and s 60进制计数器芯片: “秒”、“分”电路都六十进制,它由一级十进制计数器和一级六进制计数器组成,六十进制计数器的设计图如下,采用四个片74ls161N串联而成,低位芯片的抚慰信号作为下级输入信号,串接起来构成“秒”、“分”计数器芯片。

2、Tr_hour24进制计数器芯片: 24进制计数器芯片的设计图如下,时计数电路由两片74ls161串联组成。当时个位计数为4,十位计数为2时,两片74ls160N复零,从而构成24进制计数。 3、Tr_day天计数器芯片: 采用两片74ls160N和一片74ls151N串联而成,天计数器的进制受到月计数器反馈M、N影响和年计数器反馈R4的影响,在M、N不收到反馈信息的时候,天计数器为28进制,电路设计图如下:

4、Tr_week周计数器芯片: 周计数器由一块74ls161N构成一个七进制计数器,原理与秒、分、时计数器相似,电路设计图如下 5、Tr_month月计数器芯片: 采用两片74160N和两片74HC151D_2V串联而成,月计数器的反馈信息M、N影响

推荐-电子万年历的设计与制作课程设计 精品

华南农业大学 电子工程学院应用物理系 课程设计(报告)任务书 设计题目:电子万年历的设计与制作 任务与要求(请按所选题目自行总结) 任务:设计一个电子万年历,利用实时时钟芯片ds1302和51单片机制作实时时钟。 要求: 1.使用LCD1602显示屏显示日期和时间; 2.能够显示新历和农历; 3. 包括时钟模块,能够显示实时时钟; 4. 要有时间设置按键部分; 5. 完成硬件电路的设计后,编写程序,实现时间和日期的显示等功能; 6. 调试程序,完成功能验证,写出完整的课程设计。 实验器材: 1.单片机最小系统:单片机(插座),晶振,电阻,电容,按键; 2.电源模块:自锁开关,LED灯,USB插座; 3.按键模块:按键; 4.1602显示模块:1602(排母),电位器,电容; 5.RTC模块:DS1302芯片(插座),晶振,CR2032电池(插座); 6.DIY小部件:漆包线,杜邦线,排针,排母,IC插座,电阻包,电容包,烙铁套装; 开始日期20XX 年 3 月 4 日完成日期20XX 年3 月 23 日

电子万年历设计 摘要:本系统是由单片机最小系统、电源模块、按键模块、LCD1602显示模块及RTC模块组成的电子万年历系统。通过时钟模块实时进行时间和日期的计数,进而传递给单片机处理,单片机再将其传递给LCD1602模块显示当前时间,另设有按键模块可以完成时间设置以及日期查询等功能操作。其设计简单,性能优良,时间设置可调,同时同步显示农历和星期,具有较强的实用性。本文先简要介绍每个模块的工作原理,再作整个系统电路的综合分析,说明该电子万年历的实现过程。 Summary:This system,electronic calendar system,is posed of SCM minimum system, power supply module, keys module, LCD1602 display module and RTC module .Through RTC module for counting the time and date, and then transmit to SCM for processing,and then send it to the LCD1602 module to show the current time, also operates key modules can be pleted time setting and operating date query function.Its simple design, excellent performance, adjustable time setting, synchronous display lunar calendar and week at the same time, has strong practicability.This paper first briefly introduces the working principle of each module, and then a prehensive analysis of the circuit.The last,illustrate the whole system implementation process of the electronic calendar. 关键词:万年历,计时,显示,农历 Keywords: calendar、timing、display、

电子万年历课程设计报告

课程:创新与综合课程设计 电子与电气工程系 实践教学环节说明书 题目名称电子万年历 院(系)电子与电气工程学院 专业电子信息工程 班级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)所示

基于AT89C51的数字万年历设计

江西理工大学南昌校区 毕业设计(论文) 题目:基于AT89C51的数字万年历设计 系别:信息工程系 专业:电气自动化 班级:09电子自动化1班 学生: 学号:09321131 指导教师:职称:助教

摘要 电子万年历是一种日常广泛应用的计时工具,在现代社会中越来越流行。数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周、时、分、秒、温度等信息,还具有时间校准等功能。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步。 本文中万年历的设计过程在硬件与软件方面进行同步设计,硬件部分主要由AT89C51单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路等组成。在单片机的选择上使用了AT89C51单片机,该单片机适合于许多较为复杂控制应用场合,显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序、显示程序等,这些程序采用C语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。并且利用Protel软件进行制图,画出PCB图并且制作出实物。 关键词: 时钟电钟;液晶LCD1602;单片机

ABSTRACT E-calendar is a very extensive daily timing tool, more popular in modern society. For digital electronic calendar using intuitive digital display, simultaneously displays year, month, day, day, hour, minute, second, temperatures and other information, also with a time calibration capabilities. The third revolution is a single-chip digital timing technology ( electronic calendar ), so that the timing product walk time difference from graded narrowing to 1/ 6000000 of a second, from the original traditional pointer timing for the development of people's daily more familiar luminous digital display, intuitive and clear, and the increase of the full automatic date, week, temperature and other daily auxiliary information display function, which is more in line with consumer needs. Therefore, the electronic calendar brings a watch industry a big progress. Synchronizing design of calendar is based on hardware and software design. Hardware part by AT89C51 microcontroller, circuit for LCD, reset circuit, clock circuits, voltage-stabilizing circuit and serial download circuits and other components of the circuit. On the choice of using single-chip microcomputer AT89C51 microcontroller, the microcontroller is suitable for a host of complex control applications. Monitor LCD LCD1602. Software includes calendar, LCD drivers, display program. Programs using a language. All the programming is completed, Kiel C51 debugging software, sure no problem, in Proteus software embedded in single-chip microcomputer in the simulation. And the use of Portal software for drawing and draw the PCB. Keywords : clock electric clock II

万年历电子钟设计报告

课程设计报告课程设计名称 SOPC原理及应用专业电子科学与技术 班级电子13-1班 学号 姓名郑航 指导教师冯丽 成绩

2016年1月13日

目录 一、设计目的 (1) 二、设计内容要求 (1) 三、系统软、硬件需求分析 (1) 1. 硬件系统组成规划 (1) 2. 软件系统规划 (2) 四、设计步骤 (3) 3. 新建工程“count_binary” (3) 4. 添加ip核 (4) 5. 添加SDRAM Controller (5) 6. 添加flash (6) 7. 添加外部RAM总线(Avalon三态桥) (7) 8. 添加pio核 (7) 9. 添加cpu核 (8) 10. 添加LCD核 (9) 11. 自动分配基地址并生成系统 (9) 12. 设置顶层模块图 (10) 13. 管脚分配并编译 (11) 14. 启动Nios II IDE,新建工程 (12)

15. 导入设计程序 (12) 16. 编译工程并烧录 (13) 五、设计结果 (14) 六、源程序 (16) 1. 程序......................................... 错误!未定义书签。 2. 程序......................................... 错误!未定义书签。 3. 程序......................................... 错误!未定义书签。 4. 程序 (16) 七、实验心得 (28)

项目基于NiosII系统的电子钟设计 一、设计目的 1.掌握基本的开发流程。 2.熟悉QUARTUS II软件的使用。 3.熟悉NIOS II软件的使用。 4.掌握SOPC硬件系统的搭建和NIOSII软件编程方法。 5.掌握SOPC系统设计方法。 6.进一步了解简单的设置及其编程。 二、设计内容要求 NiosII系统的硬件设计,软件设计,该系统能实现一个电子钟功能。 三、系统软、硬件需求分析 1.硬件系统组成规划 根据系统要实现的功能和开发板配置,本项目中需要用到的Cyclone II开发板上的外围器件有: LCD:电子钟显示屏幕 按钮:电子钟设置功能键 Flash存储器:存储软、硬件程序 SRAM存储器:程序运行时将其导入SRAM 根据所用到的外设和器件特性,在SOPC Builder中建立系统要添加的模块包括:NiosII CPU定时器,按键PIO,LCD,外部RAM总线(Avalon三态桥),

基于单片机的数字电子钟万年历课程设计

汇编语言 课程设计报告书 一.课程设计的题目和内容 用汇编语言编写一个万年历程序系统,该系统要有进入系统的封面,要有验证用户名和密码的功能,能正确显示万年历,在推出系统的时候,要有封底。 二.系统设计及功能要求 1.系统封面设计 内容:题目名称,设计日期,设计者姓名。 要求:具有动感,如题目名称移动;字体具有立体感。可插入一些图画,如学校的校徽图。 2.输入画面设计 内容及要求:①密码及口令:输入,核查及修改功能。②年份:输入及判断功能。如:年份值是否为4位整数,不为4位,提示用户重输。 3.日历计算功能设计 ①求某年某月某日是星期几的子功能。(要求编成子程序) 算法:s=(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+c (其中:y为年份;c为某月某日是这一年的第几天,由②求出;s为总天数。“/”为整除。) n=s%7 (其中:n为星期数;“%”为求余数)

②求某月某日是这一年的第几天的子功能。(要求编成子程序) 二月份是否为平年(28天)或闰年(29天)的算法: y/400=0∨y/4=0∧y/100≠0 (y为年份;“/”整除),则y为以闰年;否则,y为平年。 根据①②可求出一年中的日历。 4.日历输出功能设计。 ①格式及显示设计 显示要求:设置显示滚动区;在该区中每次显示4个月的日历(并列排列)。 ②日历打印设计:将日历按年存入磁盘不同的文件中保存,供打印或 再次显示使用。 1.程序系统总体功能模块调用图及模块功能说明 封面程序的功能是显示欢迎信息,并且显示制 作人的信息的;验证用户名和密码的程序是验证用 户是否是合法的用户的,该程序要有容错的功能; 万年历程序是主程序,该程序的功能是通过用户输 入年和月,来查询日历的,并且该程序还可以判断 输入的年份是平年还是闰年。封底程序是用来显示 用户退出万年历系统的时候,一个感谢用户使用万 年历的界面的。

Java万年历课程设计报告

杭州师范大学钱江学院课程设计 题目万年历 学院钱江学院 专业信电分院计算机科学与技术 班级计算机1101 姓名崔伊平 指导教师王李冬 2013 年9 月20 日

目录 一.概述 (1) 二.总体方案设计 (2) 三.详细设计 (3) 四.最终输出 (7) 五.课程设计总结 (8) 参考文献 (9)

一、概述 1.课程设计的目的 通过显示年日历程序的设计,培养学生综合利用java语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力。 通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固《java语言程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了java语言的好处和其可用性! 2.课程设计的要求 2.1 输入查询的年份与月份,单击“更新”按扭,则可得到相应的日历。本实验是对图形用户界面,布局管理器的综合运用。要掌握APPLET容器中添加组件的方法,理解JAVA 的事件处理机制,编写独立的运行窗口。 2.2 输出形式 使用独立的运行窗口进行显示。界面主要由两部分组成——查询输入部分和结果显示部分。查询输入部分包括两个文本域,一个用于输入年份:一个用于选择月份:一个更新按扭,用来触发查询事件。

二总体方案设计 1.程序开发环境 a.开发环境:eclipse b.系统环境:windows xp/7 c.设计工具:Microsoft office 2003 2.整体流程图 图1 流程图 3.功能模块图

C语言万年历设计报告

C语言课程 设计报告题目:编写万年历系统 年级: 专业: 班级: 姓名: 学号:

目录 第1章设计目的 第2章需求分析 第3章概要设计 第4章源程序清单 第5章执行结果 1)登陆界面 2)显示当前日月历 3)显示具体日期信息 第6章程序问题调试与课程设计心得

第1章设计目的 设计目的(实验要求): 1.模仿现实生活中的挂历. 2.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几). 3.当系统日期变到下一月时,系统自动翻页到下一月. 第2章需求分析 (1)程序运行时,首先给出菜单选项和输入提示: (2)用户可以通过主菜单选择不同选项。输入1,通过输入当前日期可显示当前月的日历;输入2,通过输入具体日期(中间以空格分开)可显示该日具体信息;输入3,则退出查询系统。

第3章概要设计 1.菜单选择界面可通过下面所示函数时现; 主要思路: 通过while语句与swich…case以及if条件语句实现菜单的循环功能和不同选 项的功能实现。 闰年与平年的判断: 代码如下: void main() { int year,month,day,a,b; while(1) { printf("\n\n\n\n"); printf(" **********************************************************\n\n"); printf(" * * \n");

printf(" Welcome to enter calendar system \n"); printf(" * * \n\n"); printf(" **********************************************************\n\n\n" ); printf(" 1 The month of current date 2 Date 3 Exit\n"); printf(" please import your choose<1~3>,press Enter to define: "); scanf("%d",&b); switch(b) { case 1: printf("\n Please import the year,month and day which you want to check,the year,month and day separation by blank space: "); scanf("%d%d%d",&year,&month,&day); a=x3(year,month,1); if(a==0) { printf("Error!Please import again.\n"); break;} yueli(year,month,day); break; case 2: printf("\n Please import the year,month and day which you want to check, the year,month and day separation by blank space: "); scanf("%d%d%d",&year,&month,&day); a=x3(year,month,day); if(a==0) { printf("Error!Please import again.\n"); break;} rili(year,month,day); break; case 3: exit(0); default: printf("Error!Please import again.\n\n"); } }

基于单片机电子万年历的毕业设计说明

单片机课程设计报告 电子万年历设计 姓名:建强 学号: 专业班级: 08电气(2)班指导老师:吴永 所在学院:科技学院 2011年6月30日

摘要 随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。 具体实现功能: (1)显示年月日时分秒及星期信息 (2)具有可调整日期和时间功能 (3)与即时时间同步

目录 1方案论证 (3) 1.1单片机芯片的选择方案和论证 (3) 1.2显示模块选择方案和论证 (3) 1.3时钟芯片的选择方案和论证 (4) 1.4电路设计最终方案决定 (4) 2系统的硬件设计与实现 (5) 2.1电路设计框图 (5) 2.2系统硬件概述 (5) 2.3主要单元电路的设计 (5) 2.3.1单片机主控制模块的设计 (5) 2.3.2时钟电路模块的设计 (6) 2.3.3电路原理及说明 (7) 2.3.4显示模块的设计 (8) 3系统的软件设计 (9) 3.1程序流程框图 (9) 4测试与结果分析 (11) 4.1硬件测试 (10) 4.2软件测试 (10) 4.3测试结果分析与结论 (10) 4.3.1 测试结果分析 (10) 4.3.2 测试结论 (10) 5prodeus软件仿真........................................ ..........错误!未定义书签。 5.1Proteus ISIS简介 (12) 5.2Proteus运行流程 (13) 5.3Proteus功能仿真 (13) 6课程设计总结与体会.......................................... .....错误!未定义书签。 参考文献...........................................................错误!未定义书签。 附录一:系统电路图.................................................错误!未定义书签。 附录二:系统程序...................................................错误!未定义书签。

基于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)

基于STM32的智能万年历课程设计说明书

课程设计说明书 设计题目:基于STM32的智能万年历 专业:电气工程及其自动化 班级: 设计人:

课程设计任务书 学院电气信息系专业电气工程及其自动化 一、课程设计题目:基于STM32的智能万年历 专题名称:最小应用系统 二、课程设计主要参考资料 (1)刘火良,杨森.STM32库开发实战指南[M].北京:机械工业出版社.2013.5 (2)ADS7943中文参考资料[M/CD]. (3)ILI9320控制器中文参考资料[M/CD]. 三、课程设计应解决主要问题 (1)最小应用系统:包括MCU、复位、启动、晶振、电源等。 (2)日历的显示和设置; (3)万年历的算法和实现; (4)定时闹钟功能; (5)无线设置功能。 四、课程设计相关附件(如:图纸、软件等) (1)软件:Keil μVision4 (2)开发平台:神州Ⅱ号STM32嵌入式技术开发板 五、任务发出日期:课程设计完成日期: 指导教师签字:系主任签字:

指导教师对课程设计的评语 指导教师(签章): 日期:

摘要 单片机应用技术飞速发展,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及生活中广泛使用的各种智能IC卡、电子宠物等,从大到国家防卫,小到日常生活,方方面面都离不开单片机。单片机是集CPU,RAM,ROM,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。 二十一世纪的今天科技与经济迅速发展,人们的生活节奏变得越来越快,生活水平越来越高,对于生活的品味和质量的要求也更高。人们不再满足于只能提供简单计时功能的时钟,希望在能保证计时精确的基础上能多添加一些其他功能,诸如日历、定时等。 本文主要介绍了以STM32F103VCT6开发板为核心部件来设计的一款万年历,以其内部的RTC时钟模块作为时钟,用TFTLCD液晶显示器作为显示模块,时钟电路能准确提供24小时制时间、平年闰年的判断以及定时。采用Keil uVision4进行编写调试程序,以神州二号嵌入式技术开发板为硬件平台进行设计,最终实现在显示屏上显示时间、日期、以及进行定时等功能。 以基于STM32的智能万年历作为设计的课题,因为它有很好的开放性和可发挥性,不仅考察了对单片机的掌握能力而且强调了对单片机扩展的应用。另外液晶显示的万年历已经越来越流行,特别适合在家庭居室、办公室、大厅、会议室、车站和广场等地方使用,它具有显示清晰直观、走时准确、可以进行夜视等功能,并且还可以扩展出其它多种功能。所以,电子万年历作为设计课题很有价值。 经过两周的课程设计,我们完成了按键和触摸两种方式对万年历的控制,实现了基本的万年历功能和闹钟功能。本次课程设计让我对万年历有了深刻理解,更让我对stm32有了更进一步的学习。 关键词:STM32F103VCT6;最小应用系统;万年历

简单万年历设计

信电学院 电子信息工程专业CDIO一级项目项目设计说明书(2013/2014学年第一学期) 项目名称:简单万年历的设计 专业班级:电子信息工程 学生姓名: 学号: 指导教师: 设计周数:一周 设计成绩: 2013 年12 月29 日

目录 1项目设计目的及任务--------------------------------------------------------------2 2 设计方案--------------------------------------------------------------2 3 电路仿真与分析--------------------------------------------------------------9 4项目设计心得-------------------------------------------------------------17 5参考文献-------------------------------------------------------------17

1.项目设计目的及任务 用51单片机或52单片机为主体,设计并制作一台数字万年历。基本要求有时钟显示(时/分/秒);日期、星期显示,可设定月份;上电即可显示当前系统的时间该系统的设计电路是以 AT89C51单片机为核心控制器,其外围电路主要包括时钟模块,液晶模块,和与电脑主机通信模块等。通过 PC 机在 Internet 上同步时间,整个系统使用C语言进行编程,实现其设计的各种功能。输出方式灵活、功耗低、计时准确、性能稳定、维护方便等优点。实用电子时钟是一个时间控制系统,既能作为一般的时间显示器,同时可以根据需要扩展其功能。系统上电自检后,实时实现小时、分钟、秒以及日历的显示等指示信息的显示,通过按键可实现校对时间等功能。 2 设计方案 2.1总方案设计:设计简单万年历一般有三个可行方案,方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。方案二:用可编程逻辑器件(PLD)实现。这种方案与前一种相比,可靠性增加,同时可以很好的完成时钟的功能。同时这种方案只能选用数码管显示,显示的效果不够理想,无法很好的完成扩展功能的要求。同时,系统的灵活性不够。方案三:采用单片机作为系统的控制核心。随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。我们选用的是方案三。因为单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:

数字万年历毕业设计

数字万年历毕业设计 目录 第一章数字万年历需求分析 (1) §1-1万年历的概念 (1) §1-2需求分析 (1) 第二章系统的硬件设计与实现 (2) §2-1系统电路示意图 (2) §2-2驱动电路 (2) §2-3时钟控制电路 (3) §2-4所需主要器件 (4) §2-5系统硬件概述 (4) 第三章系统的软件设计 (17) §3-1程序流程框图 (17) §3-2程序设计 (19) 第四章安装与调试 (25) §4-1安装 (25) §4-2调试 (25) §4-3软、硬件测试 (26) 4-3-1硬件测试 (26) 4-3-2软件测试 (26) §4-4测试结果分析与结论 (27) 4-4-1测试结果分析 (27) 4-4-2测试结论 (27) 第五章总结 (27) 致谢 (28) 参考文献 (29)

第一章数字万年历需求分析 §1-1万年历的概念 万年历我国古代传说中最古老的一部太阳历。为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。而现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用,与原始历法并无直接联系。万年历只是一种象征,表示时间跨度大。 §1-2需求分析 在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,没有更大程度上的满足人们的需求。因此在这里,我想能不能把一些辅助功能加入钟表中去。在此设计中所设计的钟表不但具有普通钟表的功能,它还能实现额外的功能:世界时间、农历显示。 改革开放30年来,中国电子万年历市场从无到有,从小到大、从总量快速扩张到结构明显升级,逐步形成了有中国特色的多样化、多层次的消费市场。电子万年历市场规模比改革初期扩大了几倍乃至几十倍,其发展成就令世人瞩目。 同时随着数字技术网络技术飞速发展,今天数字万年历也得到了迅猛的发展。万年历早超越了单纯的钟表只显视时间的结构,它已经了发展成为一套完整的系统。它在日常生活发挥着巨大的作用人们对它需求也越来越高。 本系统采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LED显示电路、键盘电路,使人机交互简便易行,此外结合音乐闹铃电路、看门狗和供电电路。本方案设计出的万年历可以显示日期时间、世界时、农历,设置闹铃功能。

Java课程设计-万年历

河北科技大学课程设计报告 号:学生姓名:学 专业班级:程序设计课程设计Java课程名称:学期学年第 2 2 015 学年学期: 2 014 — 指导教师:刘伟月年 2 0

的?.................................................................. ................................1?? 2.需求分................................................................... .........析................................1? 3.总体设计................................................................... ........................................1? 4.详细设计................................................................... ........................................1?

5.软件测试................................................................... . (10) 6.课程设计总结................................................................... ................................11. 一、课程设计目的(1)熟练使用java语言编写程序,解决实际问题。? (2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;? (3)学会自己调试程序的方法并掌握一定的技巧。 二、需求分析本程序的要求为: 1.使用图形用户界面;? 2.本程序能够实现日期与星期的查询。 ?三、总体设计(1)可以通过图形界面显示日历。? (2)能以月历形式显示日期与星期。? (3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。? ?四、详细设计1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。 ,0若是取余得几既为星期几,7使总天数除以输出月份第一天为星期几的算法:2. 则为星期日。? 3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。? 4.查询年份必须为四位有效数字,否则不予显示。 程序源代码: import import import import import import; import import import ; import ; import import import java.awt.*; import import java.text.*; import ;

C语言课程设计报告-万年历1

课程设计题目:万年历 实验题目:万年历程序的编写 实验目的:综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体和文件等相关内容的综合应用, 使同学们能进一步熟悉掌握C语言的基本语法,进一步提升自 己的编程能力并逐步培养编程思维,进而不断提高同学们解决问 题的能力,并为以后的语言学习打下良好的基础。 实验要求:万年历设计 主要功能包括: 1、查询某年某月每一天对应星期几。 2、可以查询某年某月的上个月或是下个月的日历情况。 3、查询某年某月某日是这一年的第几天,并查询改天 是星期几。 4、判断该年是闰年还是平年,判断这一年的生肖。实现思路(要求有文字描述,并画出流程图):

实现过程(要求有文字说明实现的过程,并对相应的代码添加注释):见程序(程序见后)后的解析。。。运行时只要你输入年月日,你要的星系都会显示出来;如果想继续输入日期的话,只需按y就可以,祥结束按n就可以结束。 实验总结(分析程序的得与失): 得:通过这次程序设计,更使我了解了编程序的严谨性,每个问题,每个不走都得有依据,不得盲目乱造,同时也让我获得了一点 编写简单程序的能力,使自己平时在理论课中很多部明白的东 西明白了好多,学会了好多语句的用法,比如会用‘y’ or‘ n’ 来决定程序是否要继续;怎么控制输出格式等等。总之在这次 程序设计中我学到了很多。 失:在编程序过程中有些函数的用法不怎么会用,偶尔会落下写简单的东西。如‘,’‘;’等;同时在编写输出上下个情况及判断 程序是否要继续的程序上花费了好多时间;函数的声明、调用 既然不清楚,感到很惭愧。实验的过失就是成功的阶梯,在过 失中我也学到很多。 心得体会:我体会到了编程序的严谨性,也觉得如果我们要是熟悉课本所讲的内容,不怕麻烦,坚持不懈,我们一定可以将它实现的。 要有耐心,有时候很多的错误就是一个地方引起的,只要认真 检查,一定能突破的,所以在以后的编程序是要细心,有耐心, 人不断调试程序,直至最后成功。 #include struct //定义包含年月日数组结构体 {int year; int month; int day;

电子万年历的设计与实现

毕业设计(论文)任务书 题目:电子万年历的设计与实现 任务与要求: 设计一以单片机为核心控制的万年历,具有多项显示和控制功能。要求:准确计 时,以数字形式显示当前年月日、星期、时间; 具有年月日、星期、时间的设置和调整功能;自行设计所需直流电源 时间: 2010年9 月 27 日至 2010 年 11 月 23 日共 8 周 所属系部:电子工程系

摘要 随着微电子技术的高速发展,单片机在国民经济的个人领域得到了广泛的运用。单片机以体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。 而电子万年历作为电子类小设计不仅是市场上的宠儿,也是是单片机实验中一个很常用的题目。因为它的有很好的开放性和可发挥性,因此对作者的要求比较高,不仅考察了对单片机的掌握能力更加强调了对单片机扩展的应用。而且在操作的设计上要力求简洁,功能上尽量齐全,显示界面也要出色。数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。LED数字显示的日历钟显示清晰直观、走时准确、可以进行夜视,并且还可以扩展出多种功能。所以,电子万年历无论作为比赛题目还是练习题目都是很有价值。 关键词:单片机;万年历 1

目录 1 概述 (5) 1.1单片机原理及应用简介 (5) 1.2系统硬件设计 (6) 1.3结构原理与比较.............................. 错误!未定义书签。2系统总体方案及硬件设计......................... 错误!未定义书签。 2.1系统总体方案................................ 错误!未定义书签。 2.2硬件电路的总体框图设计 (12) 2.3硬件电路原理图设计 (12) 3软件设计 (13) 3.1主程序流程图 (13) 3.2显示模块流程图 (14) 4P ROTEUS软件仿真 (15) 4.1仿真过程 (15) 4.2仿真结果 (16) 5课程设计体会 (17) 参考文献 (18) 附录:源程序代码附 (18) 结束语 (25) 2

相关文档
最新文档