用DS1302与LCD1602可调数字万年历课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字开发与实践

题目:用DS1302与LCD1602

设计可调式电子日历时钟

班级:

姓名:

学号:

学院:

二O一二年六月五日

用DS1302与LCD1602设计

的可调式电子日历时钟

一、总体设计

1.1、设计目的

为巩固所学的单片机知识,把所学理论运用到实践中,用LCD1602与DS1302 设计可调式电子日历时钟。

1.2、设计要求

(1)显示:年、月、日、时、分、秒和星期;

(2)设置年、月、日、时、分、秒和星期的初始状态;

(3)能够用4个按键调整日历时钟的年、月、日、时、分、秒和星期;

完成可调式电子日历时钟的硬件和软件的设计,包括单片机的相关内

容;日历时钟模块的设计,液晶显示模块的设计,按键模块的设计。

控制程序的编写等。

备注:本程序另外添加了每到上午8:10和下午2:10的闹钟提醒功能。

1.3、系统基本方案选择和论证

1.3.1、单片机芯片的选择方案

方案一:

采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。

方案二:

采用STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全

兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。但造价较高。

1.3.2 、显示模块选择方案和论证:

方案一:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用显示数字显得太浪费,且价格也相对较高。所以不用此种作为显示。

方案二:

采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字。所以也不用此种作为显示。

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,且视觉效果较好,外形美观。LCD1602可实现显示2行十六个字符。

1.3.3、时钟芯片的选择方案和论证:

方案一:

直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。

方案二:

采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、星期、月、年以及闰年补偿的年进行计数,而且精度高,31*8位的RAM做为数据暂存区,工作电压范围为2.5V~5.5V,2.5V时耗电小于300nA。

1.3.4、电路设计最终方案决定

综上各方案所述,对此次作品的方案选定:采用80C51作为主控制系统;DS1302提供时钟;LCD1602液晶带汉字库显示屏作为显示部分。

二、硬件设计

2.1、电路设计模块图如图2-1所示

图2-1

2.2、系统总体设计原理图

2.3、要求用proteus仿真软件仿真并抓图。

三、软件设计

3.1、画出各个函数流程图。

3.1.1、DS1302实时控制芯片的流程图如图3-1

图3-1

3.1.2、LCD1602液晶显示控制流程图如图3-2

图3-2

如图3-3

图3-3

3.2、写出程序代码。

/**************DS1302及1602时钟设计**********/ #include

#include

#define uchar unsigned char

#define uint unsigned int

#define SECOND 0x81

#define MINUTE 0x83

#define HOUR 0x85

sbit rs=P2^0;

sbit rw=P2^1;

sbit ep=P2^2;

sbit DS1302_IO= P1^0;

sbit DS1302_SCLK = P1^1;

sbit DS1302_RST = P1^2;

sbit M=P3^1; //选择

sbit U=P3^2; // 加

sbit D=P3^3; // 减

sbit W=P3^4; //确定

sbit SPK=P3^7; //蜂鸣器

uchar sel=0;

uchar code DIS1[]={"10 ji ying "};

uchar code DIS2[]={"ke cheng she ji"};

/////////////////////////延时////////////////////////////////

void delay(uint ms)

{

unsigned int a,b;

for(a=0;a

for(b=0;b<124;b++);

}

////////////////////////////////////////////////////////////

/***************DS1302驱动************************/

////////////////////////////////////////////////////////////

void DS1302_Write(uchar D)

{

uchar i;

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

{

DS1302_IO =D&0x01;

DS1302_SCLK=1;

相关文档
最新文档