欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
ds3231單片機程序 時間和溫度發送到串口顯示
[打印本頁]
作者:
accumulation
時間:
2019-7-27 18:38
標題:
ds3231單片機程序 時間和溫度發送到串口顯示
IMG_0477.JPG
(5.58 MB, 下載次數: 47)
下載附件
效果展示
2019-7-27 18:34 上傳
#include<global.h>
void DS3231WriteByte(unsigned char addr,unsigned char dat)
{
bit ack;
IICStart();
ack = IICWrite(0xD0);//寫設備地址+寫操作
while(~ack);
ack = IICWrite(addr);//內部寄存器指針
while(~ack);
ack = IICWrite(dat);//寫數據
while(~ack);
IICStop();
}
void DS3231ReadByte(unsigned char addr,unsigned char *buf)
{
bit ack;
IICStart();
ack = IICWrite(0xD0);//寫設備地址+寫操作
while(~ack);
ack = IICWrite(addr);//內部寄存器指針
while(~ack);
IICStop();
IICStart();
ack = IICWrite(0xD1);//寫設備地址+讀操作
while(~ack);
*buf = IICReadNAK();//讀一個字節數據
IICStop();
}
void DS3231Read7Byte(unsigned char *buf)
{
bit ack;
unsigned char i;
IICStart();
ack = IICWrite(0xD0);//寫設備地址+寫操作
while(~ack);
ack = IICWrite(0x00);//秒寄存器地址
while(~ack);
IICStop();
IICStart();
ack = IICWrite(0xD1);//寫設備地址+讀操作
while(~ack);
for(i=0;i<6;i++)
{ //上面寫了秒寄存器地址,內部寄存器指針會自動+1
*buf++= IICReadACK();//所以只需要發送一個開始地址
} //讀數據,發送還需要讀數據的應答位
*buf= IICReadNAK();//讀數據,不需要再讀取數據應答位
IICStop();
}
void DS3231Write7Byte(unsigned char *dat)
{
bit ack;
unsigned char i;
IICStart();
ack = IICWrite(0xD0);//寫設備地址+寫操作
while(~ack);
ack = IICWrite(0x00);//秒寄存器地址
while(~ack);
for(i=0;i<7;i++)
{
ack = IICWrite(dat[i]);//連續寫入數據7次,和上面同理
while(~ack);
}
IICStop();
}
void GetRealTime(struct sTime *time)
{
unsigned char buf[8];
DS3231Read7Byte(buf);
time->year = buf[6];
time->mon = buf[5];
time->day = buf[4];
time->hour = buf[2];
time->min = buf[1];
time->sec = buf[0];
time->week = buf[3];
}
復制代碼
#include<global.h>
sbit SDA = P2^1;
sbit SCL = P2^0;
void Delay5us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 11;
while (--i);
}
void IICStart()
{
SDA = 1; //確保sda為高電平為開始信號做準備
SCL = 1; //scl一直保持高電平等待讀取sda由高向低切換
Delay5us(); //協議規定:sda高電平狀態時間大于4.7us
SDA = 0; //協議規定:在scl為高時sda由高向低切換,為iic開始信號
Delay5us(); //協議規定:sda低電平狀態時間大于4us
SCL = 0; //拉低scl為后面sda數據做準備
}
void IICStop()
{
SDA = 0; //確保sda為低電平為結束信號做準備
SCL = 1; //scl一直保持高電平等待讀取sda由低向高切換
Delay5us(); //協議規定:sda低電平時間大于4us
SDA = 1; //協議規定:在scl為高時sda由低向高切換,為iic結束信號
Delay5us(); //協議規定:sda高電平狀態時間大于4.7us
}
bit IICWrite(unsigned char dat)
{
bit ack; //暫時存應答值
unsigned char mask; //用于探測字節內一位的值
for(mask = 0x80; mask!=0; mask>>=1) //從高位到低位依次進行
{
if ((dat & mask) == 0) //將該位值輸出到引腳
SDA = 0;
else
SDA = 1;
Delay5us(); //穩定數據
SCL = 1; //拉高時鐘
Delay5us(); //維持時鐘時間大于4us
SCL = 0;
}
SDA = 1; //釋放總線準備接收數據
Delay5us();
SCL = 1;//開始讀取應答位
ack = SDA;
Delay5us();
SCL = 0;
return ~ack;
}
unsigned char IICReadNAK()
{
unsigned char dat;
unsigned char mask;
SDA = 1;//釋放總線準備接收數據
for(mask = 0x80; mask != 0; mask >>= 1)
{
SCL = 1;
if(SDA == 1)
dat |= mask;
else
dat &= ~mask;
Delay5us();
SCL = 0;
}
SDA = 1;
Delay5us();
SCL = 1;
Delay5us();
SCL = 0;
return dat;
}
unsigned char IICReadACK()
{
unsigned char dat;
unsigned char mask;
SDA = 1;//釋放總線準備接收數據
for(mask = 0x80; mask != 0; mask >>= 1)
{
SCL = 1;
if(SDA == 1)
dat |= mask;
else
dat &= ~mask;
Delay5us();
SCL = 0;
}
SDA = 0;
Delay5us();
SCL = 1;
Delay5us();
SCL = 0;
return dat;
}
復制代碼
全部資料51hei下載地址:
ds3231.rar
(58.74 KB, 下載次數: 79)
2019-7-27 18:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
ldh2009
時間:
2020-5-6 21:52
謝謝樓主分享。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1