一、資源說明
單片機型號 | 測試條件 | 模塊名稱 | 代碼功能 |
---|---|---|---|
STC89C52RC | 晶振11.0592M | MQ2傳感模塊 | STC89C52RC采集MQ2傳感模塊參數(shù) 串口與OLED0.96雙顯示 |
STM32F103C8T6 | 晶振8M/系統(tǒng)時鐘72M | MQ2傳感模塊 | STM32F103C8T6采集MQ2傳感模塊參數(shù) 串口與OLED0.96雙顯示 |
其他資料目錄 直戳跳轉(zhuǎn)
二、基本參數(shù)
參數(shù)
可以用于家庭和工廠的氣體泄漏監(jiān)測裝置,適宜于液化氣、丁烷、丙烷、 甲烷、 酒精、煙霧等的探測;
靈敏度可調(diào)(圖中藍色數(shù)字電位器調(diào)節(jié))
工作電壓 5V 使用前,供電至少預(yù)熱 2 分鐘以上,傳感器稍微發(fā)燙屬于正 ?,F(xiàn)象;
輸出形式:
a 模擬量電壓輸出
b 數(shù)字開關(guān)量輸出(0 和 1)
引腳說明
MQ2傳感模塊 | 引腳說明 |
---|---|
VCC | 正極 5V供電 |
GND | 負(fù)極 接GND |
DO | 數(shù)字量輸出(默認(rèn)高電平輸出 到閥值輸出低電平) |
AO | 模擬量輸出 |
三、驅(qū)動說明
STC89C52RC無ADC所以需要借助外部ADC模塊 此處用PCF8591模塊進行采集
IIC地址/采集通道選擇/時序
對應(yīng)程序:
以51為例
/*******************************************************************
起動總線函數(shù)
函數(shù)原型: void Start_I2c();
功能: 啟動I2C總線,即發(fā)送I2C起始條件.
********************************************************************/
void Start_I2c()
{
PCF8591_SDA=1; /*發(fā)送起始條件的數(shù)據(jù)信號*/
PCF8591_SCL=1;
IIC_Delay();
PCF8591_SDA=0; /*發(fā)送起始信號*/
IIC_Delay();
PCF8591_SCL=0; /*鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) */
IIC_Delay();
}
/*******************************************************************
結(jié)束總線函數(shù)
函數(shù)原型: void Stop_I2c();
功能: 結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件.
********************************************************************/
void Stop_I2c()
{
PCF8591_SDA=0; /*發(fā)送結(jié)束條件的數(shù)據(jù)信號*/
PCF8591_SCL=1; /*結(jié)束條件建立時間大于4μs*/
IIC_Delay();
PCF8591_SDA=1; /*發(fā)送I2C總線結(jié)束信號*/
IIC_Delay();
}
/*******************************************************************
字節(jié)數(shù)據(jù)發(fā)送函數(shù)
函數(shù)原型: void SendByte(UCHAR c);
功能: 將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對
此狀態(tài)位進行操作.(不應(yīng)答或非應(yīng)答都使ack=0)
發(fā)送數(shù)據(jù)正常,ack=1; ack=0表示被控器無應(yīng)答或損壞。
********************************************************************/
void SendByte(uint8_t c)
{
uint8_t BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++) /*要傳送的數(shù)據(jù)長度為8位*/
{
if((c<<BitCnt)&0x80)PCF8591_SDA=1; /*判斷發(fā)送位*/
else PCF8591_SDA=0;
PCF8591_SCL=1; /*置時鐘線為高,通知被控器開始接收數(shù)據(jù)位*/
IIC_Delay();
PCF8591_SCL=0;
}
IIC_Delay();
PCF8591_SDA=1; /*8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位*/
IIC_Delay();
PCF8591_SCL=1;
IIC_Delay();
if(PCF8591_SDA==1)ack=0;
else ack=1; /*判斷是否接收到應(yīng)答信號*/
PCF8591_SCL=0;
IIC_Delay();
}
/*******************************************************************
字節(jié)數(shù)據(jù)接收函數(shù)
函數(shù)原型: UCHAR RcvByte();
功能: 用來接收從器件傳來的數(shù)據(jù),并判斷總線錯誤(不發(fā)應(yīng)答信號),
發(fā)完后請用應(yīng)答函數(shù)應(yīng)答從機。
********************************************************************/
uint8_t RcvByte()
{
uint8_t retc;
uint8_t BitCnt;
retc=0;
PCF8591_SDA=1; /*置數(shù)據(jù)線為輸入方式*/
for(BitCnt=0;BitCnt<8;BitCnt++)
{
PCF8591_SCL=0; /*置時鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/
IIC_Delay();
PCF8591_SCL=1; /*置時鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/
IIC_Delay();
retc=retc<<1;
if(PCF8591_SDA==1)retc=retc+1; /*讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中 */
IIC_Delay();
}
PCF8591_SCL=0;
IIC_Delay();
return(retc);
}
/********************************************************************
應(yīng)答子函數(shù)
函數(shù)原型: void Ack_I2c(bit a);
功能: 主控器進行應(yīng)答信號(可以是應(yīng)答或非應(yīng)答信號,由位參數(shù)a決定)
********************************************************************/
void Ack_I2c(uint8_t a)
{
if(a==0)PCF8591_SDA=0; /*在此發(fā)出應(yīng)答或非應(yīng)答信號 */
else PCF8591_SDA=1;
IIC_Delay();
PCF8591_SCL=1;
IIC_Delay();
PCF8591_SCL=0; /*清時鐘線,鉗住I2C總線以便繼續(xù)接收*/
IIC_Delay();
}
采集通道選擇:
ISendByte(PCF8591,0x42);
地址:
#define PCF8591 0x90 //PCF8591 地址
四、部分代碼說明
1、接線引腳定義
需要自定義引腳可在此處更改,STM32要自定義引腳的話也要注意引腳時鐘使能的更改
1.1、STC89C52RC+MQ2傳感參模塊
//MQ2傳感+PCF8591模塊引腳定義
MQ2傳感模塊---------------------------PCF8591
AO-------------------------------------AIN2
sbit PCF8591_SCL=P1^0; //I2C 時鐘
sbit PCF8591_SDA=P1^1; //I2C 數(shù)據(jù)
//OLED0.96模塊引腳定義
sbit SCL=P1^2; //串行時鐘
sbit SDA=P1^3; //串行數(shù)據(jù)
1.2、STM32F103C8T6+MQ2傳感參模塊
//MQ2傳感模塊引腳定義 GPIOA_0 ADC1通道0
#define ADC_GPIO_APBxClock_FUN RCC_APB2PeriphClockCmd
#define ADC_GPIO_CLK RCC_APB2Periph_GPIOA
#define ADC_PORT GPIOA
#define ADC_PIN GPIO_Pin_0
//OLED0.96模塊引腳定義
//-----------------OLED IIC端口定義----------------
#define OLED_SCLK_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_8)//SCL
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_8)
#define OLED_SDIN_Clr() GPIO_ResetBits(GPIOB,GPIO_Pin_9)//SDA
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_9)
五、基礎(chǔ)知識學(xué)習(xí)與相關(guān)資料下載
1、STC89C52RC程序下載 直戳跳轉(zhuǎn)
2、STM32F103C8T6程序下載
(1)串口下載 直戳跳轉(zhuǎn)
(2)ST-LINK下載 直戳跳轉(zhuǎn)
(3)J-LINK下載 直戳跳轉(zhuǎn)
(4)DAP-LINK下載 直戳跳轉(zhuǎn)
3、OLED0.96程序說明 直戳跳轉(zhuǎn)
4、串口助手下載與使用
(1)安信可調(diào)試助手使用 直戳跳轉(zhuǎn)
(2) sscom33串口調(diào)試助手使用 直戳跳轉(zhuǎn)
(3)STC-ISP串口調(diào)試助手使用 直戳跳轉(zhuǎn)
六、視頻效果展示與程序資料獲取
視頻連接 直戳跳轉(zhuǎn)
??資料獲取 ? ? ? ? ? ?( 滑到最后添加群號看公告免費獲?。?mark hidden color="red">文章來源:http://www.zghlxwxcb.cn/news/detail-429676.html
七、注意事項
1、VCC GND請勿接反,接反易燒
2、OLED顯示異常時,排除接線接觸不良
3、使用前需要預(yù)熱文章來源地址http://www.zghlxwxcb.cn/news/detail-429676.html
八、接線說明
STC89C52RC
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 : MQ2傳感模塊測試程序
// 測試條件 : STC89C52RC 晶振11.0592
接線
MQ2傳感模塊----------------------STC89C52RC
VCC-------------------------------5V
GND-------------------------------GND
MQ2傳感模塊----------------------PCF8591
AO--------------------------------AIN2
PCF8591--------------------------------STC89C52RC
VCC-- ---------------------------------5V
GND- ----------------------------------GND
SCL- ----------------------------------P1.0 //SCL
SDA- ----------------------------------P1.1 //SDA
OLED0.96(IIC) -------------------------STC89C52RC
VCC------------------------------------3.3V
GND------------------------------------GND
SCL------------------------------------P1^2
SDA------------------------------------P1^3
*************************************************************************************/
STM32F103C8T6
/************************************************************************************
// 生成日期 : 2021-6-21
// 最近修改 : 2021-11-21
// 功能描述 : MQ2傳感模塊測試程序
// 測試條件 : STM32F103C8T6 晶振8M 系統(tǒng)時鐘 72M
接線
MQ2傳感模塊-----------------------STM32F103C8T6
VCC-------------------------------------5V
GND-------------------------------------GND
AO--------------------------------------PA_0
OLED0.96
VCC-- -----------------------------------3.3V
GND- ------------------------------------GND
SCL- ------------------------------------PB_8 //SCL
SDA- ------------------------------------PB_9 //SDA
*****************************************************************************************/
到了這里,關(guān)于K_A18_001 基于STM32等單片機采集MQ2傳感參數(shù)串口與OLED0.96雙顯示的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!