历时钟的设计.docx
《历时钟的设计.docx》由会员分享,可在线阅读,更多相关《历时钟的设计.docx(32页珍藏版)》请在冰豆网上搜索。
历时钟的设计
日历时钟
一、实验目的
以DS1302实时时钟芯片和液晶显示屏LCD1602为基础设计一个日历时钟
二、实验要求
用PROTEUS画出原理图和PCB图,并完成下列任务:
1时间和日期可调整,按键采用3个按键
2实验流程图
3在Proteus上调试通过
三、流程图
四、.ProteusISIS的使用
1、进入ProteusISIS
双击桌面上的ISIS7Professional图标或者单击屏幕左下方的“开始”→“程序”→“Proteus7Professional?
→“ISIS7Professional”,出现如图1-1所示界面,随后就进入了ProteusISIS集成环境
五、图1-1启动时的屏幕
2、工作界面
ProteusISIS的工作界面是一种标准的Windows界面,如图1-2所示。
包括:
标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。
图1-2ProteusISIS的工作界面
3.
KeilC与Proteus连接调试
1、假若KeilC与Proteus均已正确安装在C:
\ProgramFiles的目录里;
2、安装KeilC与Proteus的连接插件vdmagdi.exe;
3、进入KeilCμVision2开发集成环境,创建一个新项目(Project),并为该项目选定合适的单片机CPU器件(如:
Atmel公司的AT89C51)。
并为该项目加入KeilC源程序。
4、需要设置KeilC的选项
单击“Project菜单/OptionsforTarget”选项或者点击工具栏的“optionfortarget”按扭,弹出窗口,点击“Debug”按钮,出现如图3-1所示页面
出现的对话框里在右栏上部的下拉菜单里选中“ProteusVSMMonitor一51Driver”。
并且还要点击一下“Use”前面表明选中的小圆点,再点击“Setting”按钮,设置通信接口,在“Host”后面添上?
27.0.0.1”,如果使用的不是同一台电脑,则需要在这里添上另一台电脑的IP地址(另一台电脑也应安装Proteus)。
在“Port”后面添加?
000”。
设置好的情形如图所示,然后点击“OK”按钮。
最后将工程编译,进入调试状态,并运行。
设置完之后,请重新编译、链接、生成可执行文件
5.Proteus的设置
进入Proteus的ISIS,鼠标左键点击菜单“Debug”,选中“useromotedebugermonitor”,如图3-2所示。
此后,便可实现KeilC与Proteus连接调试
选项设置
6.Proteus里加载可执行文件
左键双击AT89C52原理图,点击加载可执行文件
调试结果
六、实验内容
源代码
#include
#include
#include"da1302.h"
#include"lcd1602.h"
#include"key.h"
unsignedcharkeytemp;
unsignedcharhourf,minutef;
voidInit_Com(void)
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xFd;
TL1=0xFd;
TR1=1;
}
SYSTEMTIMECurrentTime;
voidmain(void)
{
uchartime[8]={0x00,0x00,0x20,0x08,0x08,0x05,0x08,0x00};//1302的时间预设值
LCD_initial();
Initial_DS1302();
set_time(time);
while
(1)
{
unsignedcharweek;
/*DS1302_GetTime(&CurrentTime);
DateToStr(&CurrentTime);
TimeToStr(&CurrentTime);
LCD_set_position(0x06);
LCD_prints(CurrentTime.DateString);
LCD_set_position(0x46);
LCD_prints(CurrentTime.TimeString);
*/
Initial_DS1302();
DS1302_GetTime(&CurrentTime);
if((CurrentTime.Hour==7)&&(CurrentTime.Minute==15)&&(CurrentTime.Second==0))
{
LCD_initial();
LCD_set_position(0x00);
}
week=CurrentTime.Week+'0';
Delay1ms
(1);
DateToStr(&CurrentTime);
TimeToStr(&CurrentTime);
LCD_set_position(0x02);
LCD_prints(CurrentTime.DateString);
LCD_set_position(0x42);
LCD_prints(CurrentTime.TimeString);
LCD_set_position(0x4c);
LCD_printc(week);
Delay1ms(100);
}
}/*--------------------------------------------------------------------------
AT89X52.H
HeaderfileforthelowvoltageFlashAtmelAT89C52andAT89LV52.
Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.
Allrightsreserved.
--------------------------------------------------------------------------*/
#ifndef__AT89X52_H__
#define__AT89X52_H__
/*------------------------------------------------
ByteRegisters
------------------------------------------------*/
sfrP0=0x80;
sfrSP=0x81;
sfrDPL=0x82;
sfrDPH=0x83;
sfrPCON=0x87;
sfrTCON=0x88;
sfrTMOD=0x89;
sfrTL0=0x8A;
sfrTL1=0x8B;
sfrTH0=0x8C;
sfrTH1=0x8D;
sfrP1=0x90;
sfrSCON=0x98;
sfrSBUF=0x99;
sfrP2=0xA0;
sfrIE=0xA8;
sfrP3=0xB0;
sfrIP=0xB8;
sfrT2CON=0xC8;
sfrT2MOD=0xC9;
sfrRCAP2L=0xCA;
sfrRCAP2H=0xCB;
sfrTL2=0xCC;
sfrTH2=0xCD;
sfrPSW=0xD0;
sfrACC=0xE0;
sfrB=0xF0;
/*------------------------------------------------
P0BitRegisters
------------------------------------------------*/
sbitP0_0=0x80;
sbitP0_1=0x81;
sbitP0_2=0x82;
sbitP0_3=0x83;
sbitP0_4=0x84;
sbitP0_5=0x85;
sbitP0_6=0x86;
sbitP0_7=0x87;
/*------------------------------------------------
PCONBitValues
------------------------------------------------*/
#defineIDL_0x01
#defineSTOP_0x02
#definePD_0x02/*Alternatedefinition*/
#defineGF0_0x04
#defineGF1_0x08
#defineSMOD_0x80
/*------------------------------------------------
TCONBitRegisters
------------------------------------------------*/
sbitIT0=0x88;
sbitIE0=0x89;
sbitIT1=0x8A;
sbitIE1=0x8B;
sbitTR0=0x8C;
sbitTF0=0x8D;
sbitTR1=0x8E;
sbitTF1=0x8F;
/*------------------------------------------------
TMODBitValues
------------------------------------------------*/
#defineT0_M0_0x01
#defineT0_M1_0x02
#defineT0_CT_0x04
#defineT0_GATE_0x08
#defineT1_M0_0x10
#defineT1_M1_0x20
#defineT1_CT_0x40
#defineT1_GATE_0x80
#defineT1_MASK_0xF0
#defineT0_MASK_0x0F
/*------------------------------------------------
P1BitRegisters
------------------------------------------------*/
sbitP1_0=0x90;
sbitP1_1=0x91;
sbitP1_2=0x92;
sbitP1_3=0x93;
sbitP1_4=0x94;
sbitP1_5=0x95;
sbitP1_6=0x96;
sbitP1_7=0x97;
sbitT2=0x90;/*ExternalinputtoTimer/Counter2,clockout*/
sbitT2EX=0x91;/*Timer/Counter2capture/reloadtrigger&dirctl*/
/*------------------------------------------------
SCONBitRegisters
------------------------------------------------*/
sbitRI=0x98;
sbitTI=0x99;
sbitRB8=0x9A;
sbitTB8=0x9B;
sbitREN=0x9C;
sbitSM2=0x9D;
sbitSM1=0x9E;
sbitSM0=0x9F;
/*------------------------------------------------
P2BitRegisters
------------------------------------------------*/
sbitP2_0=0xA0;
sbitP2_1=0xA1;
sbitP2_2=0xA2;
sbitP2_3=0xA3;
sbitP2_4=0xA4;
sbitP2_5=0xA5;
sbitP2_6=0xA6;
sbitP2_7=0xA7;
/*------------------------------------------------
IEBitRegisters
------------------------------------------------*/
sbitEX0=0xA8;/*1=EnableExternalinterrupt0*/
sbitET0=0xA9;/*1=EnableTimer0interrupt*/
sbitEX1=0xAA;/*1=EnableExternalinterrupt1*/
sbitET1=0xAB;/*1=EnableTimer1interrupt*/
sbitES=0xAC;/*1=EnableSerialportinterrupt*/
sbitET2=0xAD;/*1=EnableTimer2interrupt*/
sbitEA=0xAF;/*0=Disableallinterrupts*/
/*------------------------------------------------
P3BitRegisters(Mnemonics&Ports)
------------------------------------------------*/
sbitP3_0=0xB0;
sbitP3_1=0xB1;
sbitP3_2=0xB2;
sbitP3_3=0xB3;
sbitP3_4=0xB4;
sbitP3_5=0xB5;
sbitP3_6=0xB6;
sbitP3_7=0xB7;
sbitRXD=0xB0;/*Serialdatainput*/
sbitTXD=0xB1;/*Serialdataoutput*/
sbitINT0=0xB2;/*Externalinterrupt0*/
sbitINT1=0xB3;/*Externalinterrupt1*/
sbitT0=0xB4;/*Timer0externalinput*/
sbitT1=0xB5;/*Timer1externalinput*/
sbitWR=0xB6;/*Externaldatamemorywritestrobe*/
sbitRD=0xB7;/*Externaldatamemoryreadstrobe*/
/*------------------------------------------------
IPBitRegisters
------------------------------------------------*/
sbitPX0=0xB8;
sbitPT0=0xB9;
sbitPX1=0xBA;
sbitPT1=0xBB;
sbitPS=0xBC;
sbitPT2=0xBD;
/*------------------------------------------------
T2CONBitRegisters
------------------------------------------------*/
sbitCP_RL2=0xC8;/*0=Reload,1=Captureselect*/
sbitC_T2=0xC9;/*0=Timer,1=Counter*/
sbitTR2=0xCA;/*0=Stoptimer,1=Starttimer*/
sbitEXEN2=0xCB;/*Timer2externalenable*/
sbitTCLK=0xCC;/*0=SerialclockusesTimer1overflow,1=Timer2*/
sbitRCLK=0xCD;/*0=SerialclockusesTimer1overflow,1=Timer2*/
sbitEXF2=0xCE;/*Timer2externalflag*/
sbitTF2=0xCF;/*Timer2overflowflag*/
/*------------------------------------------------
T2MODBitValues
------------------------------------------------*/
#defineDCEN_0x01/*1=Timer2canbeconfiguredasup/downcounter*/
#defineT2OE_0x02/*Timer2outputenable*/
/*------------------------------------------------
PSWBitRegisters
------------------------------------------------*/
sbitP=0xD0;
sbitFL=0xD1;
sbitOV=0xD2;
sbitRS0=0xD3;
sbitRS1=0xD4;
sbitF0=0xD5;
sbitAC=0xD6;
sbitCY=0xD7;
/*------------------------------------------------
InterruptVectors:
InterruptAddress=(Number*8)+3
------------------------------------------------*/
#defineIE0_VECTOR0/*0x03ExternalInterrupt0*/
#defineTF0_VECTOR1/*0x0BTimer0*/
#defineIE1_VECTOR2/*0x13ExternalInterrupt1*/
#defineTF1_VECTOR3/*0x1BTimer1*/
#defineSIO_VECTOR4/*0x23Serialport*/
#defineTF2_VECTOR5/*0x2BTimer2*/
#defineEX2_VECTOR5/*0x2BExternalInterrupt2*/
#endif
/*--------------------------------------------------------------------------
STDIO.H
PrototypesforstandardI/Ofunctions.
Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.
Allrightsreserved.
--------------------------------------------------------------------------*/
#ifndef__STDIO_H__
#define__STDIO_H__
#ifndefEOF
#defineEOF-1
#endif
#ifndefNULL
#defineNULL((void*)0)
#endif
#ifndef_SIZE_T
#define_SIZE_T
typedefunsignedintsize_t;
#endif
#pragmaSAVE
#pragmaREGPARMS
externchar_getkey(void);
externchargetchar(void);
externcharungetchar(char);
externcharputchar(char);
externintprintf(constchar*,...);
externintsprintf(char*,constchar*,...);
externintvprintf(constchar*,char*);
externintvsprintf(char*,constchar*,char*);
externchar*gets(char*,intn);
externintscanf(constchar*,...);
externintsscanf(char*,constchar*,...);
externintputs(constchar*);
#pragmaRESTORE
#endif//#include
#include
//#include"ds1302.h"
//#include"lm3228.h"
//#include"hanzi.h"
#defineucharunsignedchar
voidWrite1302(unsignedcharucAddr,unsignedcharucDa);
unsignedcharRead1302(unsignedcharucAddr);
voidLCD_prints(unsignedchar*lcd_string);
#defineucharunsignedchar
#defineDS1302_SECOND0x80
#defineDS1302_MINUTE0x82
#defineDS1302_HOUR0x84
#defineDS1302_WEEK0x8a
#defineDS1302