电子钟的设计
一、 实验目的
以 DS1302 实时时钟芯片和液晶显示屏 LCD1602 为基础设计一个电子钟
二、 实验要求
用 PROTEUS 画出原理图和 PCB 图,并完成下列任务:
⑴ 时间和日期可调整,按键采用 3 个按键
⑵ 在 Proteus 上调试通过
三、 实验内容
源代码
#include
#include
#include "da1302.h"
#include "lcd1602.h"
#include "key.h"
1
unsigned char keytemp;
unsigned char hourf,minutef;
void Init_Com(void)
{
}
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TH1 = 0xFd;
TL1 = 0xFd;
TR1 = 1;
SYSTEMTIME CurrentTime;
void main(void)
{
uchar time[8]={0x00,0x00,0x20,0x08,0x08,0x05,0x08,0x00};
//1302 的时间预设值
LCD_initial();
Initial_DS1302();
set_time(time);
while(1)
2
{
unsigned char week;
/* 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);
3
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
Header file for the low voltage Flash Atmel AT89C52 and AT89LV52.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __AT89X52_H__
#define __AT89X52_H__
/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0
= 0x80;
4
sfr SP
= 0x81;
sfr DPL
= 0x82;
sfr DPH
= 0x83;
sfr PCON
= 0x87;
sfr TCON
= 0x88;
sfr TMOD
= 0x89;
sfr TL0
= 0x8A;
sfr TL1
= 0x8B;
sfr TH0
= 0x8C;
sfr TH1
= 0x8D;
sfr P1
= 0x90;
sfr SCON
= 0x98;
sfr SBUF
= 0x99;
sfr P2
= 0xA0;
sfr IE
= 0xA8;
sfr P3
= 0xB0;
sfr IP
= 0xB8;
sfr T2CON
= 0xC8;
sfr T2MOD
= 0xC9;
sfr RCAP2L
= 0xCA;
sfr RCAP2H
= 0xCB;
sfr TL2
= 0xCC;
sfr TH2
= 0xCD;
sfr PSW
= 0xD0;
sfr ACC
= 0xE0;
5
sfr B
= 0xF0;
/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;
/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_
0x01
#define STOP_
0x02
#define PD_
0x02
/* Alternate definition */
#define GF0_
0x04
#define GF1_
0x08
#define SMOD_
0x80
6
/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0
= 0x88;
sbit IE0
= 0x89;
sbit IT1
= 0x8A;
sbit IE1
= 0x8B;
sbit TR0
= 0x8C;
sbit TF0
= 0x8D;
sbit TR1
= 0x8E;
sbit TF1
= 0x8F;
/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_
0x01
#define T0_M1_
0x02
#define T0_CT_
0x04
#define T0_GATE_ 0x08
#define T1_M0_
0x10
#define T1_M1_
0x20
#define T1_CT_
0x40
#define T1_GATE_ 0x80
7
#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F
/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;
sbit T2
= 0x90;
/* External input to Timer/Counter 2, clock out */
sbit T2EX = 0x91;
/* Timer/Counter 2 capture/reload trigger & dir ctl */
/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
sbit RI
= 0x98;
sbit TI
= 0x99;
sbit RB8
= 0x9A;
sbit TB8
= 0x9B;
8