工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->控制电路图->定时控制电路图->时钟芯片DS1302的使用

时钟芯片DS1302的使用

作者:dolphin时间:2011-05-04

对于熟悉了集成开发环境后,下面我们来做我们的第一个电子作品——电子时钟。用一片pic16f877a作处理器,时钟芯片选用ds1302。用数码管显示时间。六位数码管显示时间和日期,默认显示的是时间,通过小数点区分时与分、分与秒。通过一个按键接到RB1口,按下按键显示年月日。具体程序如下:

//实验目的:熟悉时钟芯片DS1302的使用
//先设置时间和日期为:秒(08),分(58),时(05),日(13),月(01),年(55)
//六位数码观显示时间和日期,默认显示的是时间,通过小数点区分时与分、分与秒
//按下RB1键不放,显示切换到日期显示。
//硬件要求:拨码开关S9全部置ON
// 拨码开关S5、S6全部置ON
// 拨码开关S1第7位置ON,其他位置OFF
// 其他拨码开关置OFF

#i ncludepic.h //包含单片机内部资源预定义
//__CONFIG(0x1832);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡

#define i_o RB4 //定义DS1302的数据口
#define sclk RB0 //定义DS1302的时钟口
#define rst RB5 //定义DS1302的复位口

// unsigned char time_rx;
unsigned char time_rx @ 0x30; //定义接收寄存器
static volatile bit time_rx7 @ (unsigned)&time_rx*8+7; //接收寄存器的最高位
//static volatile bit temp0 @ (unsigned)&temp*8+0;

void port_init(); //申明引脚初始化函数
void ds1302_init(); //申明DS1302初始化函数
void set_time(); //申明设置时间函数
void get_time(); //申明读取时间函数
void display(); //申明显示函数
void time_write_1(unsigned char time_tx); //申明写一个字节函数
unsigned char time_read_1(); //申明读一个字节函数
void delay(); //申明延时函数
//定义待设置的时间:秒、分、时、日、月、星期、年、控制字
const char table[]={0x00,0x42,0x13,0x11,0x5,0x05,0x07,0x00};
//定义读取时间和日期存放表格
char table1[7];
//定义0-9的显示代码
const char table2[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//----------------------------------------------
//主函数
void main()
{
port_init(); //调用引脚初始化函数
ds1302_init(); //调用DS1302初始化函数
set_time(); //调用设置时间函数
while(1)
{
get_time(); //调用取时间函数
display(); //调用显示函数
}
}

//---------------------------------------------
//DS1302初始化函数
void ds1302_init()
{
sclk=0; //拉低时钟信号


关键词: 时钟 芯片 DS1302 使用

评论

EEPW网友 · 2012-05-11 15:13:05

不全啊

EEPW网友 · 2012-09-23 20:09:20

以后不要发表这样没用的东西!

技术专区