51单片机用蓝牙和ds1302调时程序代码
时间: 2024-05-08 14:21:17 浏览: 79
以下是51单片机使用蓝牙和DS1302调时的程序代码:
```C
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P2^0; //DS1302数据线
sbit SCLK=P2^1; //DS1302时钟线
sbit RST=P2^2; //DS1302复位线
uchar Time[8]={0x00,0x30,0x13,0x00,0x01,0x01,0x20}; //初始化时间
uchar ReadTime[8]; //读取时间
uchar i,j; //循环计数器
void Delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void WriteDS1302(uchar dat) //向DS1302写入一个字节
{
uchar i;
for(i=0;i<8;i++)
{
SCLK=0;
SDA=dat&0x01;
dat>>=1;
SCLK=1;
}
}
uchar ReadDS1302() //从DS1302读取一个字节
{
uchar dat=0x00,i;
for(i=0;i<8;i++)
{
SCLK=0;
dat>>=1;
if(SDA) dat|=0x80;
SCLK=1;
}
return dat;
}
void InitDS1302() //初始化DS1302
{
uchar i;
RST=0;
Delay(10);
RST=1;
Delay(10);
WriteDS1302(0x8e); //写入控制寄存器
WriteDS1302(0x00); //禁止写保护
for(i=0;i<7;i++)
WriteDS1302(Time[i]); //写入时间
}
void ReadTimeDS1302() //从DS1302读取时间
{
uchar i;
WriteDS1302(0xbf); //读取保护位
for(i=0;i<8;i++)
ReadTime[i]=ReadDS1302(); //读取时间
}
void UART_Init() //初始化串口
{
TMOD=0x20;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void UART_SendData(uchar dat) //通过串口发送一个字节
{
SBUF=dat;
while(!TI);
TI=0;
}
void UART_SendString(uchar *str) //通过串口发送一个字符串
{
while(*str!='\0')
{
UART_SendData(*str);
str++;
}
}
void main()
{
InitDS1302(); //初始化DS1302
UART_Init(); //初始化串口
while(1)
{
ReadTimeDS1302(); //读取时间
UART_SendString("Time: ");
for(i=6;i>=1;i--)
{
if(ReadTime[i]<10)
UART_SendData('0');
UART_SendData(ReadTime[i]+0x30);
if(i==6)
UART_SendData('-');
else if(i==4)
UART_SendData('-');
else if(i==2)
UART_SendData(' ');
else if(i==0)
UART_SendData('\r');
else
UART_SendData(':');
}
Delay(1000); //延时1秒
}
}
```
以上代码需要通过蓝牙模块连接到电脑或手机,使用串口调试工具可以查看程序输出的时间信息。在程序中,`InitDS1302()`函数用于初始化DS1302,`ReadTimeDS1302()`函数用于读取DS1302中的时间信息,`UART_SendString()`函数用于通过串口发送字符串。在主函数中,程序不断循环读取时间并通过串口发送时间信息,同时每次循环延时1秒。
阅读全文