您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于单片机的电子日历钟设计
1电子日历设计摘要用单片机控制时间的读取并显示在液晶屏幕上面,并可通过按键实现对时间的修改。文中详细论述了电子日历钟设计原理、使用的各芯片的介绍,阐明了本实例所使用的设计方案、详细的电路图以及电子程序。关键词:电子日历钟单片机DS1302LCD16022目录摘要................................................21前言.................................................51.1设计任务.............................................51.2本设计的应用意义.....................................52总体设计方案.............................................52.1设计原理及相关说明................................52.2总体设计框图...............................................52.3电子日历钟电路图......................................52.4电子日历钟程序......................................53芯片设计及对其的调用..........................................63.1DS1302实时时钟电路....................................63.1.1DS1302的结构及工作原理............................63.1.2引脚功能及结构...................................63.1.3DS1302的控制字节...................................63.1.4数据输入输出(I/O)...................................63.1.5DS1302的寄存器...................................73.2LCD1602字符型液晶模块....................................73.2.1LCD1602模块介绍...................................73.2.2LCD1602的一些参数及操作指令..........................4系统调试...............................................124.1硬件电路调试.........................................124.2软件程序调试.........................................124.3综合调试.............................................12参考文献.......................................................14\31前言1.1设计任务本设计实现一个小巧的电子日历钟,可以利用DS1302读取日期及时间并传至89C51,使之显示于LCD1602液晶显示屏上。设有四个按键,可以进入设置菜单对电子日历钟进行时间设置。开机时可以显示制作单位以及制作者名称。1.2本设计的应用意义此电子日历钟小巧便捷利于携带,界面清爽,一目了然,方便的使您知晓当前时间,并可对时间做出修改,实在是居家旅行日常生活之必备用品!2总体设计方案2.1设计原理及相关说明设计原理:利用DS1302实时时钟电路芯片来读取系统中的日期以及时间信息,并利用P1.6端口将相关信息传送至AT89C51主芯片之中,利用P2端口使之显示于LCD1602液晶显示屏上,四个按键分别置于P1口的0、1、2、3端口可以对时间进行控制修改。详细请参阅第三节的芯片介绍。相关说明:点击确定按键可以进入LCD屏上方显示的主菜单,点击返回按键可以退出菜单,在时间修改菜单中点击修改“小时”按键可以修改时间中的小时数,点击修改“分钟”按键可以修改时间中的分钟数。2.2总体设计框图电子日历钟设计框图如图2.1所示:图2.1电子日历钟设计框图AT89C51增加“年月日”键减少“年月日”键增加“时分秒”键减少“年月日”键LCD显示42.3电子日历钟电路图电子日历钟电路图请见附件A2.3电子日历钟程序电子日历钟程序清单请见附件B//SMC1602.h#ifndef__SMC1602_H__#define__SMC1602_H__#definevdInitialize()vWriteCMD(0x01);vWriteCMD(0x38);vWriteCMD(0x0C);//初始化//vWriteCMD(0x01);清屏//vWriteCMD(0x38);显示模式设置:8位2行5x7点阵//vWriteCMD(0x0C);(0x0C)文字不动,光标自动右移//vWriteCMD(0x0F);显示器开、光标开、闪烁开voidvWriteCMD(unsignedcharucCommand);//把1个命令写入LCD。voidvWriteData(unsignedcharucData);//把1个数据写入LCD。voidvShowOneChar(unsignedcharucChar);//在当前光标处显示1个字符。voidvShowChar(unsignedcharucaChar[]);//在当前光标处显示1个字符串#endif5//KeyProcess.h#ifndef__KEYPROCESS_H__#define__KEYPROCESS_H__voidvKeyProcess(unsignedcharucKeyCode);#endif//KeyScan.h#ifndef__KEYSCAN_H__#define__KEYSCAN_H__unsignedcharucKeyScan();//键盘扫描程序#endif#includeat89x51.h//端口设置宏定义#defineLCDRSP3_5//寄存器选择信号://0--数据寄存器;//1--指令寄存器。#defineLCDRWP3_6//读写信号://1--读LCD;//0--写LCD。#defineLCDEP3_7//片选信号,当输入下降沿信号时,//执行指令或传送数据。#defineLCDPORTP0//LCD数据接口。//*******************************延时函数voidvDelay(){unsignedintuiCount;for(uiCount=0;uiCount250;uiCount++);}//***************************把1个命令写入LCDvoidvWriteCMD(unsignedcharucCommand){vDelay();//先延时。LCDE=1;//然后把LCD改为写入命令状态。LCDRS=0;LCDRW=0;LCDPORT=ucCommand;//再输出命令。LCDE=0;//最后执行命令。6}//***************************把1个数据写入LCDvoidvWriteData(unsignedcharucData){vDelay();//先延时。LCDE=1;//然后把LCD改为写入数据状态。LCDRS=1;LCDRW=0;LCDPORT=ucData;//再输出数据。LCDE=0;//最后显示数据。}//***********************把1个字符显示到当前光标处voidvShowOneChar(unsignedcharucChar){switch(ucChar){case'':vWriteData(0x20);break;case'!':vWriteData(0x21);break;case'':vWriteData(0x22);break;case'#':vWriteData(0x23);break;case'$':vWriteData(0x24);break;case'%':vWriteData(0x25);break;case'&':vWriteData(0x26);break;case'':vWriteData(0x27);break;case'(':vWriteData(0x28);break;case')':vWriteData(0x29);break;case'*':vWriteData(0x2A);break;case'+':vWriteData(0x2B);break;case'-':vWriteData(0x2D);break;case'.':vWriteData(0x2E);break;case'/':vWriteData(0x2F);break;case'=':vWriteData(0x3D);break;case'':vWriteData(0x3E);break;case'?':vWriteData(0x3F);break;case'^':vWriteData(0x5E);break;case':':vWriteData(0x3A);break;case'0':vWriteData(0x30);break;case'1':vWriteData(0x31);break;case'2':vWriteData(0x32);break;case'3':vWriteData(0x33);break;case'4':vWriteData(0x34);break;case'5':vWriteData(0x35);break;case'6':vWriteData(0x36);break;7case'7':vWriteData(0x37);break;case'8':vWriteData(0x38);break;case'9':vWriteData(0x39);break;case'A':vWriteData(0x41);break;case'B':vWriteData(0x42);break;case'C':vWriteData(0x43);break;case'D':vWriteData(0x44);break;case'E':vWriteData(0x45);break;case'F':vWriteData(0x46);break;case'G':vWriteData(0x47);break;case'H':vWriteData(0x48);break;case'I':vWriteData(0x49);break;case'J':vWriteData(0x4A);break;case'K':vWriteData(0x4B);break;case'L':vWriteData(0x4C);break;case'M':vWriteData(0x4D);break;case'N':vWriteData(0x4E);break;case'O':vWriteData(0x4F);break;case'P':vWriteData(0x50);break;case'Q':vWriteData(0x51);break;case'R':vWriteData(0x52);break;case'S':vWriteData(0x53);break;case'T':vWriteData(0x54);break;case'U':vWriteData(0x55);break;case'V':v
本文标题:基于单片机的电子日历钟设计
链接地址:https://www.777doc.com/doc-6102444 .html