单片机将时间发送给计算机,【求救】我用DS1302想把时间用串口发到电脑上

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

//这是DS1302的头文件

#ifndef __DS1302_h__

#define __DS1302_h__

#include

#define uint unsigned int

#define uchar unsigned char

#define ulong unsigned long

//写指令宏定义地址

#define WRITE_SECOND 0x80//秒钟

#define WRITE_MINUTE 0x82//分钟

#define WRITE_HOUR 0x84//小时

#define WRITE_DATE 0x86//日

#define WRITE_MONTH 0x88//月

#define WRITE_WEEK 0x8a//星期

#define WRITE_YEAR 0x8c//年

//读指令宏定义地址

#define READ_SECOND 0x81//秒钟

#define READ_MINUTE 0x83//分钟

#define READ_HOUR 0x85//小时

#define READ_DATE 0x87//日

#define READ_MONTH 0x89//月

#define READ_WEEK 0x8b//星期

#define READ_YEAR 0x8d//年

//读写保护宏定义地址

#define WRITE_PROTECT 0x8E//写保护

uchar data tab[]={"0123456789"};

char *p;//定义一个指针处理星期字符串

//位寻址寄存器定义

sbit ACC_7 = ACC^7;

//管脚定义

sbit SCLK = P2^0; // DS1302时钟信号7脚

sbit DIO= P2^1; // DS1302数据信号6脚

sbit CE = P2^2; // DS1302片选5脚

uchar second,minute,hour;//时分秒

uint second_1,second_0,minute_1,miunte_0,hour_1,hour_0;

uchar week;//星期

uchar date,month,year;//年月日

uint date_1,date_0,month_1,month_0,year_1,year_0;

/**************************地址、数据发送子程序*************************/

void Write1302 ( unsigned char addr,dat )//写子程序

{

unsigned char i,temp;

CE=0; //CE引脚为低,数据传送中止

SCLK=0; //清零时钟总线

CE = 1; //CE引脚为高,逻辑控制有效

//发送地址

for ( i=8; i>0; i-- ) //循环8次移位

{

SCLK = 0;

temp = addr;

DIO = (bit)(temp&0x01); //每次传输低字节

addr >>= 1; //右移一位

SCLK = 1;

}

//发送数据

for ( i=8; i>0; i-- )

{

SCLK = 0;

temp = dat;

DIO = (bit)(temp&0x01);

dat >>= 1;

SCLK = 1;

}

CE = 0;

}

/****************************数据读取子程序********************************/

unsigned char Read1302 ( unsigned char addr )//读子程序

{

unsigned char i,temp,dat1,dat2;

CE=0;

SCLK=0;

CE = 1;

//发送地址

for ( i=8; i>0; i-- ) //循环8次移位

{

SCLK = 0;

temp = addr;

DIO = (bit)(temp&0x01); //每次传输低字节

addr >>= 1; //右移一位

SCLK = 1;

}

//读取数据

for ( i=8; i>0; i-- )

{

ACC_7=DIO;

SCLK = 1;

ACC>>=1;

SCLK = 0;

}

CE=0;

dat1=ACC;

dat2=dat1/16; //数据进制转换

dat1=dat1%16; //十六进制转十进制

dat1=dat1+dat2*10;

return (dat1);

}

/*******************************初始化DS1302***********************************/

void Initial(void)//上电初始化化模块2010年12月26号22点10分00秒星期日

{

Write1302 (WRITE_PROTECT,0X00); //禁止写保护

Write1302 (WRITE_SECOND,0x30); //秒位初始化

Write1302 (WRITE_MINUTE,0x59); //分钟初始化

Write1302 (WRITE_HOUR,0x23); //小时初始化,默认24小时制

Write1302 (WRITE_DATE,0x26); //日期初始化

Write1302 (WRITE_MONTH,0x12); //月初始化

Write1302 (WRITE_WEEK,0x07); //星期初始化,01-07

Write1302 (WRITE_YEAR,0x10); //年初始化00-99

Write1302 (WRITE_PROTECT,0x80); //允许写保护

}

/*******************************校时初始化*************************************/

/*void correct()//校时模块

{

Write1302 (WRITE_PROTECT,0X00); //禁止写保护

Write1302 (WRITE_SECOND,0x00); //秒位初始化

Write1302 (WRITE_MINUTE,0x30); //分钟初始化

Write1302 (WRITE_HOUR,0x21); //小时初始化,默认24小时制

Write1302 (WRITE_DATE,0x26); //日期初始化

Write1302 (WRITE_MONTH,0x12); //月初始化

Write1302 (WRITE_WEEK,0x07); //星期初始化,01-07

Write1302 (WRITE_YEAR,0x10); //年初始化00-99

Write1302 (WRITE_PROTECT,0x80); //允许写保护

}

/*******************************星期转化程序***********************************/

void week_c()//星期转化

{

char *pp;//定义一个局部指针

switch(week)

{

case 1:pp="Mon 1";break;

case 2:pp="Tue 2";break;

case 3:pp="Wed 3";break;

case 4:pp="Tur 4";break;

case 5:pp="Fri 5";break;

case 6:pp="Sat 6";break;

case 7:pp="Sun 7";break;

default:pp="error";break;

}

p=pp;//函数地址赋值

}

/*******************************数据刷新DS1302*********************************/

void freshtime()//读取时间

{

second=Read1302 (READ_SECOND);//读取十进制数

minute=Read1302 (READ_MINUTE);

hour=Read1302 (READ_HOUR);

date=Read1302 (READ_DATE);

month=Read1302 (READ_MONTH);

week=Read1302 (READ_WEEK);

year=Read1302 (READ_YEAR);

second_1=second/10;//高位赋值

second_0=second-second_1*10;//低位赋值

minute_1=minute/10;

miunte_0=minute-minute_1*10;

hour_1=hour/10;

hour_0=hour-hour_1*10;

date_1=date/10;

date_0=date-date_1*10;

month_1=month/10;

month_0=month-month_1*10;

year_1=year/10;

year_0=year-year_1*10;

}

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值