久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
AM2320_I2C溫濕度51單片機(jī)程序
[打印本頁(yè)]
作者:
JNXNKJ
時(shí)間:
2017-7-29 11:21
標(biāo)題:
AM2320_I2C溫濕度51單片機(jī)程序
0.png
(41.22 KB, 下載次數(shù): 106)
下載附件
2017-7-29 22:18 上傳
包含:
AM2320_I2C.C文件
AM2320_I2C.h頭文件
51單片機(jī)源程序如下:
//****************************************************************//
// AM系列讀IIC使用范例
//單片機(jī) :AT89S52 或 STC89C52RC
// 功能 :串口發(fā)送溫濕度數(shù)據(jù) 波特率 9600
// 晶振 :12M (用戶系統(tǒng)時(shí)鐘如不是12M 請(qǐng)更改相關(guān)宏定義及注釋的延時(shí)時(shí)間)
// 編譯環(huán)境: Keil3
// 公司 :奧松電子
//****************************************************************//
#include "STC15W4K.h"
#include "AM2320_I2C.h"
#include <intrins.h>
//端口位定義,可修改
//sbit AM2320_SDA = P3^4;
//sbit AM2320_SCL = P3^5;
//器件地址
#define IIC_Add 0xB8
#define IIC_RX_Length 8
//內(nèi)部數(shù)據(jù)定義
unsigned char idata IIC_TX_Buffer[]={0x03,0x00,0x04}; //讀溫濕度命令(無(wú)CRC校驗(yàn))
unsigned char idata IIC_RX_Buffer[IIC_RX_Length] = {0x00};//讀回的溫濕度
unsigned char *String;
unsigned char WR_Flag;
//***************************************************
void delay10us() //@18.432MHz這個(gè)延時(shí)函數(shù) 要大于5US以上
{
unsigned char i;
_nop_();
_nop_();
i = 43;
while (--i);
}
//***************************************************
void Delay2ms() //@18.432MHz
{
unsigned char i, j;
i = 36;
j = 217;
do{
while (--j);
} while (--i);
}
//**********************************************
//送起始位 AM2320_SDA =1->0
void I2C_Start()
{
AM2320_SDA =1;
AM2320_SCL=1;
delay10us();
AM2320_SDA =0;
delay10us();
AM2320_SCL=0;
}
//************************************************
//送停止位 AM2320_SDA =0->1
void I2C_Stop()
{
AM2320_SDA =0;
delay10us();
AM2320_SCL=1;
delay10us();
AM2320_SDA =1;
}
//************************************************
//主應(yīng)答(包含ack:AM2320_SDA =0和no_ack:AM2320_SDA =0)
void Ack()
{
AM2320_SDA =0;//設(shè)置AM2320_SDA 口為輸出
AM2320_SCL=0;
delay10us();
AM2320_SCL=1;
delay10us();
AM2320_SCL=0;
AM2320_SDA =1;
}
//***************************************************
void NoAck()
{
AM2320_SDA =1; //設(shè)置AM2320_SDA 口為輸出
AM2320_SCL=0;
delay10us();
AM2320_SCL=1;
delay10us();
AM2320_SDA =1;
AM2320_SCL=0;
}
//***************************************************
// 檢測(cè) AM2320_SDA 是否回ACK
bit Test_Ack()
{ //設(shè)置AM2320_SDA 口為輸入
bit ACK_Flag=0;
AM2320_SCL=0;
AM2320_SDA =1;
delay10us();
AM2320_SCL=1;
delay10us();
if(AM2320_SDA ==0) ACK_Flag = 1;
else ACK_Flag = 0;
AM2320_SCL=0;
return ACK_Flag;
}
//*************************************************
//字節(jié)發(fā)送程序
//發(fā)送c(可以是數(shù)據(jù)也可是地址),送完后接收從應(yīng)答
//不考慮從應(yīng)答位
void SendData(unsigned char buffer)
{
unsigned char BitCnt=8;//一字節(jié)8位
//設(shè)置AM2320_SDA 口為輸出
do{
AM2320_SCL=0;
delay10us();
if((buffer&0x80)==0) AM2320_SDA =0;//判斷最高位是0還是1
else AM2320_SDA =1;
AM2320_SCL=1;
delay10us();
buffer=buffer<<1;//將buffer中的數(shù)據(jù)左移一位
BitCnt--;
}
while(BitCnt);
AM2320_SCL=0;
}
//**************************************************
//字節(jié)接收程序
//接收器件傳來(lái)的數(shù)據(jù),此程序應(yīng)配合|主應(yīng)答函數(shù)|i2c_ack_main()使用
//return: uchar型1字節(jié)
unsigned char ReceiveData()
{
unsigned char BitCnt=8,IIC_RX_Data=0;
unsigned char temp=0;
AM2320_SDA =1; //讀入數(shù)據(jù) 設(shè)置AM2320_SDA 口為輸入
do{
AM2320_SCL=0;
delay10us();
IIC_RX_Data=_crol_(IIC_RX_Data,1); //數(shù)據(jù)左移一位
BitCnt--;
AM2320_SCL=1;
delay10us();
if(AM2320_SDA ==1) IIC_RX_Data = IIC_RX_Data|0x01; //低位置1
else IIC_RX_Data = IIC_RX_Data&0x0fe; //低位清0
}
while(BitCnt);
AM2320_SCL=0;
return IIC_RX_Data;
}
//***************************************************
bit WriteNByte(unsigned char sla,unsigned char *ss,unsigned char nn)
{
unsigned char ii;
I2C_Start(); //啟動(dòng)I2C
SendData(sla);//發(fā)送器件地址
if(!Test_Ack()){
WR_Flag = 1;
return(0);
}
for(ii=0;ii<nn;ii++){//寫入8字節(jié)數(shù)據(jù)
SendData(*(ss+ii));
if(!Test_Ack()){
WR_Flag = 1;
return(0);
}
}
I2C_Stop();
return(1);
}
//***************************************************
bit ReadNByte(unsigned char Sal, unsigned char *pp,unsigned char nn)
{
unsigned char ii;
I2C_Start(); // 啟動(dòng)I2C
SendData((Sal)| 0x01); //發(fā)送器件地址
if(!Test_Ack()){
WR_Flag = 1;
return(0);
}
delay10us();
delay10us();
delay10us(); // 延時(shí)時(shí)間必須大于30us 只要大于 30us 以上的值都可以 但是最好不要太長(zhǎng) ,測(cè)試時(shí),試過(guò)25MS都OK!
for(ii=0;ii<nn-1;ii++){ //讀取字節(jié)數(shù)據(jù)
*(pp+ii)=ReceiveData(); //讀取數(shù)據(jù)
Ack();
}
*(pp+nn-1)=ReceiveData();
NoAck();
I2C_Stop();
return(1);
}
//***************************************************
///計(jì)算CRC校驗(yàn)碼
unsigned int CRC16(unsigned char *ptr, unsigned char len)
{
unsigned int crc=0xffff;
unsigned char i;
while(len--){
crc ^=*ptr++;
for(i=0;i<8;i++){
if(crc & 0x1){
crc>>=1;
crc^=0xa001;
}
else{
crc>>=1;
}
}
}
return crc;
}
//***************************************************
///檢測(cè)CRC校驗(yàn)碼是否正確
unsigned char CheckCRC(unsigned char *ptr,unsigned char len)
{
unsigned int crc;
crc=(unsigned int)CRC16(ptr,len-2);
if(ptr[len-1]==(crc>>8) && ptr[len-2]==(crc & 0x00ff)) return 0xff;
else return 0x0;
}
//***************************************************
void Waken()
{
I2C_Start(); // 啟動(dòng)I2C
SendData(IIC_Add); // 發(fā)送器件地址
Test_Ack(); // 喚醒指令時(shí) 傳感器不會(huì)回ACK 但是第一定要發(fā)檢測(cè)ACK的時(shí)鐘 否則會(huì)出錯(cuò)
Delay2ms(); // 至少延時(shí)1個(gè)Ms 說(shuō)明書里,有個(gè)最大值 ,實(shí)際當(dāng)中 你只要大于1MS
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
AM2320_I2C.zip
(2.68 KB, 下載次數(shù): 156)
2017-7-29 11:20 上傳
點(diǎn)擊文件名下載附件
AM2320_I2C.C;AM2320_I2C.h
下載積分: 黑幣 -5
作者:
ppa8086xp
時(shí)間:
2017-8-19 14:32
謝謝分享3333333333333
作者:
yayuncn
時(shí)間:
2017-12-15 20:27
謝謝分享,用89C52RC可以,但是換了12C5A60S2或者STC15就是怎么也不行,正好對(duì)照一下試試。
作者:
dragon_gao
時(shí)間:
2017-12-27 11:43
謝謝分享,我學(xué)習(xí)一下
作者:
903039401
時(shí)間:
2017-12-27 15:39
謝謝分享,學(xué)習(xí)了 哈哈哈
作者:
5swords
時(shí)間:
2018-5-10 16:29
下載不了了,幣也扣了
作者:
sdfadfadf
時(shí)間:
2018-12-23 15:32
學(xué)習(xí)了。
作者:
飛翔的啥
時(shí)間:
2019-1-22 18:06
好好學(xué)習(xí)一下
作者:
chenfengfa
時(shí)間:
2019-2-24 10:46
程序不完整樣的。
作者:
15195858826
時(shí)間:
2019-3-4 08:46
謝謝分享
作者:
FADST
時(shí)間:
2019-7-9 18:38
謝謝分享,很有用的資源
作者:
jasonact
時(shí)間:
2019-8-6 15:06
下來(lái)看看 正好有要用到
作者:
YANGZHONGYI
時(shí)間:
2021-10-9 15:58
為什么發(fā)送和接收數(shù)據(jù)要左移
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
一区二区三区四区不卡视频
|
久久久精品久久久
|
国产免费自拍
|
毛片一级黄色
|
高清一区二区三区
|
一区天堂
|
免费毛片网站在线观看
|
精品久久久久久久久久久久久久
|
婷婷一级片
|
91精品国产高清一区二区三区
|
91视视频在线观看入口直接观看
|
在线免费观看日本视频
|
国产精品久久久久久久久久久新郎
|
欧美一级黄色片
|
日韩福利在线
|
国产免费一区二区
|
日韩精品一二三
|
亚洲欧美国产视频
|
久草在线在线精品观看
|
欧美一级二级视频
|
亚洲精品一区二三区不卡
|
国产欧美日韩一区二区三区在线观看
|
色网在线看
|
色综合久久久
|
99精品视频在线观看
|
四虎永久影院
|
精品视频久久久久久
|
色网站入口
|
国产欧美精品一区二区三区
|
a毛片
|
免费观看黄色一级片
|
亚洲视频在线免费观看
|
国产精品免费一区二区三区
|
日韩久久久久久久久久久
|
一级做a爰片性色毛片视频停止
|
国产精品久久久久影院色老大
|
久久一二区
|
免费在线观看一区二区
|
日韩精品一区在线
|
亚洲欧美日韩成人在线
|
亚洲欧美自拍偷拍视频
|