|
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++;
- }
- }
復制代碼
|
評分
-
查看全部評分
|