久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
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://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
91国在线高清视频
|
国产视频久
|
欧洲成人
|
99视频在线免费观看
|
日本不卡免费新一二三区
|
中文字幕免费视频
|
免费一区
|
成人免费网站视频
|
蜜桃毛片
|
欧洲毛片
|
特黄色一级毛片
|
精品一区在线
|
欧美大片久久久
|
日韩在线精品视频
|
欧美日韩国产在线观看
|
久久久久国产一级毛片高清网站
|
99精品国产一区二区青青牛奶
|
日韩精品一区二区三区在线观看
|
久久国产精品一区二区三区
|
国产女人与拘做受免费视频
|
欧美中文字幕一区
|
国产乱码高清区二区三区在线
|
日日综合
|
亚洲精选一区
|
欧美电影免费网站
|
日韩精品一区二区三区在线观看
|
一级免费在线视频
|
亚洲精品一区在线
|
91小视频
|
亚洲国产欧美在线
|
亚洲欧美一区二区三区国产精品
|
国产精品久久久久久久久久三级
|
中文字幕人成乱码在线观看
|
不卡一区
|
国产999精品久久久久久
|
中文字幕亚洲视频
|
免费人成在线观看网站
|
免费亚洲一区二区
|
毛片大全
|
亚洲三区在线观看
|
在线观看国产wwwa级羞羞视频
|