c语言通过串口设置时间,ds1302展示时间(通过串口调试助手) 您所在的位置:网站首页 ds1302按键设置时间 c语言通过串口设置时间,ds1302展示时间(通过串口调试助手)

c语言通过串口设置时间,ds1302展示时间(通过串口调试助手)

2023-12-13 04:02| 来源: 网络整理| 查看: 265

ds1302显示时间(通过串口调试助手)---C语言版本

ds1302显示时间(通过串口调试助手--C语言版本详细内容请下载地址:

/*ds1302显示时间(通过串口调试助手)*/

#include

#include

typedef unsigned char uint8;

typedef unsigned int uint16;

sbit SDA=P3^4; //数据

sbit SCK=P3^5; //时钟

sbit RST=P1^7;//DS1302复位(片选)

uint8 time[7]={50,41,20,9,8,4,12};//秒分时日月周年10-08-15 23:59:50 7代表周日

#define DS1302_W_ADDR 0x80

#define DS1302_R_ADDR 0x81

void ds1302_reset()//令SCK=0;RST=1

{

RST=0;//停止数据传送

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

RST=1;//数据操作

}

//写一个字节

void ds1302_write_byte(uint8 dat)

{

uint8 i;

for(i=0;i

uint8 i,dat=0;//用dat存储读到的数据

for(i=0;i

ds1302_reset();

RST=1;

ds1302_write_byte(0x8E);//写入地址

ds1302_write_byte(0x00);//写入数据

//写完后

SDA=0;

RST=0;

}

//设置写保护

void ds1302_set_WP()

{

ds1302_reset();

RST=1;

ds1302_write_byte(0x8E);//写入地址

ds1302_write_byte(0x80);//写入数据

//写完后

SDA=0;

RST=0;

}

//写入ds1302

void ds1302_write(uint8 addr,uint8 dat)

{

ds1302_reset();

RST=1;

ds1302_write_byte(addr);//写入地址

ds1302_write_byte(dat);//写入数据

//写完后

RST=0;

SDA=0;

}

//从ds1302读数据

uint8 ds1302_read(uint8 addr)

{

uint8 temp=0;//存储读出来的数据

ds1302_reset();

RST=1;

ds1302_write_byte(addr);//写入地址

temp=ds1302_read_byte();//写入数据

//写完后

RST=0;

SDA=0;

return temp;

}

void delay(uint16 n)

{

while(n--);

}

/**

* 设定时钟数据

其中涉及二进制和BCD转换 因为ds1302存BCD ,但是机器只认识二进制

例如:存入ds1302为50 0101 0000 那么我们写入的是ds1302_write(80)

*/

void set_time(uint8 *timedata)

{

uint8 i;

uint8 temp=0;

for(i=0;i

ds1302_write(temp,timedata[i]);

temp+=2;

}

ds1302_set_WP();

}

/**

* 读时钟数据(BCD格式)

*/

void read_time(uint8 *timedata)

{

uint8 i,temp;

temp=DS1302_R_ADDR;//读起始位置

for(i=0;i

TMOD=0x21;

SCON=0x50;

TH1=0xFD;

TL1=0xFD;

TR1=1;

}

/**

* UART发送一字节

*/

void UART_Send_Byte(uint8 dat)

{

SBUF=dat;

while(TI==0);

TI=0;

}

/**

* 将数据转换成ASC码并通过UART发送出去

*/

void UART_Send_Dat(uint8 dat) //注意是关于16取余

{

UART_Send_Byte(dat/16+'0');

UART_Send_Byte(dat%16+'0');

}

void main()

{

uart_init();

set_time(&time); //设定时间值

while(1)

{

read_time(&time); //秒分时日月周年

UART_Send_Dat(time[6]);

UART_Send_Byte('-');

UART_Send_Dat(time[4]);

UART_Send_Byte('-');

UART_Send_Dat(time[3]);

UART_Send_Byte(' ');

UART_Send_Dat(time[2]);

UART_Send_Byte(':');

UART_Send_Dat(time[1]);

UART_Send_Byte(':');

UART_Send_Dat(time[0]);

UART_Send_Byte('\r');

UART_Send_Byte('\n');

delay(10000);

}

}

有问题或是发现错误或是可以改进,希望可以留言,谢谢



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有