|
51单片机 DS1302电子钟 带仿真和源程序
部分程序预览:
- /*****************************************************************
- 介绍:DS1302模块程序文件,调用时请根据你所接的IO口不同修改io sclk rst的值
- 使用说明:调用时,只用调用
- (1)ds1302_init_time()初始化时钟函数
- (2)ds1302_get_time(uint8 *dat)获取时间函数 定义一个数组data[7],形参即为data
- (3)ds1302_write_data(uint8 addr,uint8 dat)写入数据函数 addr值参见ds1302.h中定义的命令
- 作者:方正电子工作室 联系QQ:1959635216
- 时间:20150323 淘宝店铺:
- *****************************************************************/
- #include<reg52.h>
- #include"common.h"
- #include"ds1302.h"
- sbit io = P1^0;
- sbit sclk = P1^1;
- sbit rst = P1^2;
- /******************DS1302写入命令***********************
- 输入参数:地址addr
- *************************************************************/
- void ds1302_write_cmd(uint8 addr)
- {
- uint8 i;
- rst = 0;
- sclk = 0;
- rst = 1;
- for(i=0;i<8;i++)
- {
- io = addr & 0x01;
- sclk = 1;
- sclk = 0;
- addr >>= 1;
- }
- }
- /******************DS1302指定地址读数据***********************
- 输入参数:地址addr
- 输出参数:时间dat
- *************************************************************/
- void ds1302_read_data(uint8 addr,uint8 *dat)
- {
- uint8 i;
- ds1302_write_cmd(addr);
- for(i=0;i<8;i++)
- {
- *dat >>= 1;
- if(io == 1)
- *dat |= 0x80;
- sclk = 1;
- sclk = 0;
- }
- *dat = *dat/16*10 + *dat%16;
- }
- /******************DS1302指定地址写数据***********************
- 输入参数:地址addr 时间dat
- *************************************************************/
- void ds1302_write_data(uint8 addr,uint8 dat)
- {
- uint8 i;
- dat = dat/10*16 + dat%10;
- ds1302_write_cmd(addr);
- for(i=0;i<8;i++)
- {
- io = dat & 0x01;
- sclk = 1;
- sclk = 0;
- dat >>= 1;
- }
- }
- /******************DS1302初始化时间***********************
- 初时化时间为 2015-03-26 星期四 23:59:50
- *************************************************************/
- void ds1302_init_time()
- {
- uint8 temp;
- ds1302_read_data(0xc1,&temp);
- if(temp!= 0xaa)
- {
- ds1302_write_data(write_wp,0); //允许写操作
- ds1302_write_data(write_sec,50);
- ds1302_write_data(write_min,59);
- ds1302_write_data(write_hour,23);
- ds1302_write_data(write_date,26);
- ds1302_write_data(write_mon,3);
- ds1302_write_data(write_year,15);
- ds1302_write_data(write_week,3);
- ds1302_write_data(0xc1,0xaa); //写入初始化标志RAM
- }
- }
- /******************DS1302获取时间***********************
- 输出参数:时间dat
- *************************************************************/
- void ds1302_get_time(uint8 *dat)
- {
- uint8 i,addr = 0x81;
- for(i=0;i<7;i++)
- {
- ds1302_read_data(addr,dat);
- addr += 2;
- dat++;
- }
- }
复制代码
|
评分
-
查看全部评分
|