用的板子是STM32最小系统板STM32F103C8T6
原理之前再硬件IIC那篇文章中写过,就不写了,直接附上代码了
oled.c
#include "stm32f10x.h"
#include "oled.h"
#include "oledfont.h"
#include "delay.h"
//static void delay_u(unsigned char num)
//{
// uint8_t i=10;
// while(num--)
// {
//
// while(i--);
//
// }
//}
//static void delay_ms(unsigned int ms)
//{
// unsigned int x,y;
// for(x = ms; x > 0 ; x--)
// {
// for(y = 12000;y>0;y--);
//
// }
//}
static void OLED_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //¶¨ÒåÒ»¸öGPIO_InitTypeDefÀàÐ͵ĽṹÌå
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); //´ò¿ªGPIOCµÄÍâÉèʱÖÓ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; //Ñ¡Ôñ¿ØÖƵÄÒý½Å
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //ÉèÖÃΪͨÓÿªÂ©Êä³ö
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ÉèÖÃÊä³öËÙÂÊΪ50MHz
GPIO_Init(GPIOB,&GPIO_InitStructure); //µ÷Óÿ⺯Êý³õʼ»¯GPIOA
OLED_SCLK_Set(); //ÉèPC2£¨SCL£©Îª¸ßµçƽ
OLED_SDIN_Set(); //ÉèPC3£¨SDA£©Îª¸ßµçƽ
}
static void OLED_IIC_Start(void)
{
OLED_SCLK_Set(); //ʱÖÓÏßÖøß
OLED_SDIN_Set(); //ÐźÅÏßÖøß
delay_us(1);
OLED_SDIN_CLr(); //ÐźÅÏßÖõÍ
delay_us(1);
OLED_SCLK_CLr(); //ʱÖÓÏßÖõÍ
delay_us(1);
}
static void OLED_IIC_Stop(void)
{
OLED_SDIN_CLr(); //ÐźÅÏßÖõÍ
delay_us(1);
OLED_SCLK_Set(); //ʱÖÓÏßÖøß
delay_us(1);
OLED_SDIN_Set(); //ÐźÅÏßÖøß
delay_us(1);
}
static unsigned char IIC_Wait_Ack(void)
{
unsigned char ack;
OLED_SCLK_CLr(); //ʱÖÓÏßÖõÍ
delay_us(1);
OLED_SDIN_Set(); //ÐźÅÏßÖøß
delay_us(1);
OLED_SCLK_Set(); //ʱÖÓÏßÖøß
delay_us(1);
if(OLED_READ_SDIN()) //¶ÁÈ¡SDAµÄµçƽ
ack = IIC_NO_ACK; //Èç¹ûΪ1£¬Ôò´Ó»úûÓÐÓ¦´ð
else
ack = IIC_ACK; //Èç¹ûΪ0£¬Ôò´Ó»úÓ¦´ð
OLED_SCLK_CLr();//ʱÖÓÏßÖõÍ
delay_us(1);
return ack; //·µ»Ø¶ÁÈ¡µ½µÄÓ¦´ðÐÅÏ¢
}
static void Write_IIC_Byte(unsigned char IIC_Byte)
{
unsigned char i; //¶¨Òå±äÁ¿
for(i=0;i<8;i++) //forÑ»·8´Î
{
OLED_SCLK_CLr(); //ʱÖÓÏßÖõͣ¬Îª´«ÊäÊý¾Ý×ö×¼±¸
delay_us(1);
if(IIC_Byte & 0x80) //¶ÁÈ¡×î¸ßλ
OLED_SDIN_Set();//×î¸ßλΪ1
else
OLED_SDIN_CLr(); //×î¸ßλΪ0
IIC_Byte <<= 1; //Êý¾Ý×óÒÆ1λ
delay_us(1);
OLED_SCLK_Set(); //ʱÖÓÏßÖøߣ¬²úÉúÉÏÉýÑØ£¬°ÑÊý¾Ý·¢ËͳöÈ¥
delay_us(1);
}
OLED_SCLK_CLr(); //ʱÖÓÏßÖõÍ
delay_us(1);
while(IIC_Wait_Ack()); //´Ó»úÓ¦´ð
}
static void Write_IIC_Command(unsigned char IIC_Command)
{
OLED_IIC_Start();
Write_IIC_Byte(0x78);//дÈë´Ó»úµØÖ·£¬SD0 = 0
Write_IIC_Byte(0x00);//дÈëÃüÁî
Write_IIC_Byte(IIC_Command);//Êý¾Ý
OLED_IIC_Stop(); //·¢ËÍÍ£Ö¹ÐźÅ
}
/*
@brief IICдÈëÊý¾Ý
@param IIC_Data£ºÊý¾Ý
@retval ÎÞ
*/
static void Write_IIC_Data(unsigned char IIC_Data)
{
OLED_IIC_Start();
Write_IIC_Byte(0x78); //дÈë´Ó»úµØÖ·£¬SD0 = 0
Write_IIC_Byte(0x40); //дÈëÊý¾Ý
Write_IIC_Byte(IIC_Data);//Êý¾Ý
OLED_IIC_Stop(); //·¢ËÍÍ£Ö¹ÐźÅ
}
//¶ÔOLEDдÈëÒ»¸ö×Ö½Ú
void OLED_WR_Byte(unsigned char dat,unsigned char cmd)
{
if(cmd)
{
Write_IIC_Data(dat); //дÈëÊý¾Ý
}
else {
Write_IIC_Command(dat); //дÈëÃüÁî
}
}
//ÉèÖÃÊý¾ÝдÈëµÄÆðʼÐУ¬ÁÐ
//x: ÁеÄÆðʼµÍµØÖ·ÓÚÆðʼ¸ßµØÖ·
//y: Ò³ ÆðʼҳµÄµØÖ· 0-7
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
OLED_WR_Byte(0xb0+y,OLED_CMD);//дÈëÒ³µØÖ·
OLED_WR_Byte((x&0x0f),OLED_CMD); //дÈëÁеĵØÖ· µÍ°ë×Ö½Ú
OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD);//дÈëÁеĵØÖ· ¸ß°ë×Ö½Ú
}
/*
@brief ¿ªÏÔʾ
@param ÎÞ
@retval ÎÞ
*/
void OLED_Display_On(void)
{
OLED_WR_Byte(0X8D,OLED_CMD); //ÉèÖÃOLEDµçºÉ±Ã
OLED_WR_Byte(0X14,OLED_CMD); //ʹÄÜ£¬¿ª
OLED_WR_Byte(0XAF,OLED_CMD); //¿ªÏÔʾ
}
/*
@brief ¹ØÏÔʾ
@param ÎÞ
@retval ÎÞ
*/
void OLED_Display_Off(void)
{
OLED_WR_Byte(0XAE,OLED_CMD); //¹ØÏÔʾ
OLED_WR_Byte(0X8D,OLED_CMD); //ÉèÖÃOLEDµçºÉ±Ã
OLED_WR_Byte(0X10,OLED_CMD); //ʧÄÜ£¬¹Ø
}
//ÇåÆÁÄ»
void OLED_Clear(void)
{
unsigned char i,n; //¶¨Òå±äÁ¿
for(i=0;i<8;i++)
{
OLED_WR_Byte (0xb0+i,OLED_CMD); //´Ó0~7Ò³ÒÀ´ÎдÈë
OLED_WR_Byte (0x00,OLED_CMD); //Áе͵ØÖ·
OLED_WR_Byte (0x10,OLED_CMD); //ÁиߵØÖ·
for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA); //дÈë 0 ÇåÆÁ
}
}
void OLED_ShouChar(unsigned char x,unsigned char y,unsigned char chr)
{
unsigned char c = 0,i=0;
c =chr - ' '; //»ñÈ¡×Ö·ûµÄÆ«ÒÆÁ¿
if(x>Max_Column)
{
x = 0; //Èç¹ûÁгöÁË·¶Î§£¬¾Í´ÓÏÂÁ½Ò³µÄµÚ0ÁпªÊ¼
y=y+2;
}
if(SIZE == 16) //×Ö·û´óСÈç¹ûΪ16 =8 *16
{
OLED_Set_Pos(x,y); //´Óx,y¿ªÊ¼»µã
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i],OLED_DATA);//ÕÒ³ö×Ö·ûcµÄÊý×éλÊý£¬ÏȰѵÚÒ»ÁлÍê
OLED_Set_Pos(x,y+1); //´Óx,y¿ªÊ¼»µã
for(i=0;i<8;i++)
OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA);//ÕÒ³ö×Ö·ûcµÄÊý×éλÊý£¬ÏȰѵÚÒ»ÁлÍê
}
else // 6 =6*8
{
OLED_Set_Pos(x,y); //´Óx,y¿ªÊ¼»µã
for(i=0;i<6;i++)
OLED_WR_Byte(F6x8[c][i],OLED_DATA);//ÕÒ³ö×Ö·ûcµÄÊý×éλÊý£¬ÏȰѵÚÒ»ÁлÍê
}
}
void OLED_Init(void)
{
OLED_GPIO_Init(); //GPIO¿Ú³õʼ»¯
delay_ms(200); //ÑÓ³Ù£¬ÓÉÓÚµ¥Æ¬»úÉϵç³õʼ»¯±ÈOLED¿ì£¬ËùÒÔ±ØÐë¼ÓÉÏÑÓ³Ù£¬µÈ´ýOLEDÉϸ´Î»Íê³É
OLED_WR_Byte(0xAE,OLED_CMD); //¹Ø±ÕÏÔʾ
OLED_WR_Byte(0x00,OLED_CMD); //ÉèÖõÍÁеØÖ·
OLED_WR_Byte(0x10,OLED_CMD); //ÉèÖøßÁеØÖ·
OLED_WR_Byte(0x40,OLED_CMD); //ÉèÖÃÆðʼÐеØÖ·
OLED_WR_Byte(0xB0,OLED_CMD); //ÉèÖÃÒ³µØÖ·
OLED_WR_Byte(0x81,OLED_CMD); // ¶Ô±È¶ÈÉèÖ㬿ÉÉèÖÃÁÁ¶È
OLED_WR_Byte(0xFF,OLED_CMD); // 265
OLED_WR_Byte(0xA1,OLED_CMD); //ÉèÖöΣ¨SEG£©µÄÆðʼӳÉäµØÖ·£»columnµÄ127µØÖ·ÊÇSEG0µÄµØÖ·
OLED_WR_Byte(0xA6,OLED_CMD); //Õý³£ÏÔʾ£»0xa7ÄæÏÔʾ
OLED_WR_Byte(0xA8,OLED_CMD); //ÉèÖÃÇý¶¯Â·Êý£¨16~64£©
OLED_WR_Byte(0x3F,OLED_CMD); //64duty
OLED_WR_Byte(0xC8,OLED_CMD); //ÖØÓ³Éäģʽ£¬COM[N-1]~COM0ɨÃè
OLED_WR_Byte(0xD3,OLED_CMD); //ÉèÖÃÏÔʾƫÒÆ
OLED_WR_Byte(0x00,OLED_CMD); //ÎÞÆ«ÒÆ
OLED_WR_Byte(0xD5,OLED_CMD); //ÉèÖÃÕðµ´Æ÷·ÖƵ
OLED_WR_Byte(0x80,OLED_CMD); //ʹÓÃĬÈÏÖµ
OLED_WR_Byte(0xD9,OLED_CMD); //ÉèÖÃ Pre-Charge Period
OLED_WR_Byte(0xF1,OLED_CMD); //ʹÓùٷ½ÍƼöÖµ
OLED_WR_Byte(0xDA,OLED_CMD); //ÉèÖÃ com pin configuartion
OLED_WR_Byte(0x12,OLED_CMD); //ʹÓÃĬÈÏÖµ
OLED_WR_Byte(0xDB,OLED_CMD); //ÉèÖà Vcomh£¬¿Éµ÷½ÚÁÁ¶È£¨Ä¬ÈÏ£©
OLED_WR_Byte(0x40,OLED_CMD); ʹÓùٷ½ÍƼöÖµ
OLED_WR_Byte(0x8D,OLED_CMD); //ÉèÖÃOLEDµçºÉ±Ã
OLED_WR_Byte(0x14,OLED_CMD); //¿ªÏÔʾ
OLED_WR_Byte(0xAF,OLED_CMD); //¿ªÆôOLEDÃæ°åÏÔʾ
OLED_Clear(); //ÇåÆÁ
OLED_Set_Pos(0,0); //ÉèÖÃÊý¾ÝдÈëµÄÆðʼÐС¢ÁÐ
}
//ÏÔʾ×Ö·û´®
void OLED_ShowString(unsigned char x, unsigned char y,unsigned char *chr)
{
unsigned char j=0;
while(chr[j] != '\0') //ÅжÏÊDz»ÊÇ×îºóÒ»¸ö×Ö·û
{
OLED_ShouChar(x,y,chr[j]);//ÏÔʾ×Ö·û
x+=8; //ÁÐÊý+8£¬Ò»¸ö×Ö·ûÕ¼ 8
if(x>=128)
{
x= 0 ;
y +=2;
}
j++;
}
}
//¼ÆËãm^n´Î·½£¬result Ò»¸öÊýµÄn´Î·½
unsigned int oled_pow(unsigned char m,unsigned char n)
{
unsigned int result=1;
while(n--)result*=m;
return result;
}
void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len,unsigned char size)
{
unsigned char t,temp; //¶¨Òå±äÁ¿
unsigned char enshow=0; //¶¨Òå±äÁ¿
for(t=0;t<len;t++)
{
temp=(num/oled_pow(10,len-t-1))%10;//È¡³öÊäÈëÊýµÄÿ¸ö룬Óɸߵ½µÍ
if(enshow==0&&t<(len-1)) //enshow£ºÊÇ·ñΪµÚÒ»¸öÊý£»t<(len-1)£ºÅжÏÊÇ·ñΪ×îºóÒ»¸öÊý
{
if(temp==0) //Èç¹û¸ÃÊýΪ0
{
OLED_ShouChar(x+(size/2)*t,y,' ');//ÏÔʾ 0 £»x+(size2/2)*t¸ù¾Ý×ÖÌå´óСƫÒƵÄÁÐÊý£¨8£©
continue; //Ìø¹ýÊ£ÏÂÓï¾ä£¬¼ÌÐøÖظ´Ñ»·£¨±ÜÃâÖظ´ÏÔʾ£©
}else enshow=1;
}
OLED_ShouChar(x+(size/2)*t,y,temp+'0'); //ÏÔʾһ¸öλ£»x+(size2/2)*t¸ù¾Ý×ÖÌå´óСƫÒƵÄÁÐÊý£¨8£©
}
}
void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no)
{
unsigned char t,adder = 0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)
{
OLED_WR_Byte( Hzk[2*no][t],OLED_DATA);//» noÔÚÊý×éλÖõĵÚÒ»Ò³16Áеĵã
adder+=1; //Êý×éµØÖ·+1
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte( Hzk[2*no+1][t],OLED_DATA);//» noÔÚÊý×éλÖõĵÚ2Ò³16Áеĵã
adder+=1; //Êý×éµØÖ·+1
}
}
oled.h
#ifndef _OLED_H_
#define _OLED_H_
#include "stm32f10x.h"
#define OLED_SCLK_Set() GPIO_SetBits(GPIOB,GPIO_Pin_0) //PB0(SCL)Êä³ö¸ß
#define OLED_SCLK_CLr() GPIO_ResetBits(GPIOB,GPIO_Pin_0) //PB0(SCL)Êä³öµÍ
#define OLED_SDIN_Set() GPIO_SetBits(GPIOB,GPIO_Pin_1) //PB1(SDA)Êä³ö¸ß
#define OLED_SDIN_CLr() GPIO_ResetBits(GPIOB,GPIO_Pin_1) //PB1(SDA)Êä³öµÍ
#define OLED_READ_SDIN() GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) //¶ÁÈ¡PB1(SDA)µçƽ
#define IIC_ACK 0 //Ó¦´ð
#define IIC_NO_ACK 1 //²»Ó¦´ð
#define OLED_CMD 0 //дÃüÁî
#define OLED_DATA 1 //дÊý¾Ý
#define SIZE 16 //ÏÔʾ×Ö·ûµÄ´óС
#define Max_Column 128 //×î´óÁÐÊý
//static void delay_u(unsigned char num);
//static void delay_ms(unsigned int ms);
static void OLED_IIC_Start(void);
static void OLED_IIC_Stop(void);
static unsigned char IIC_Wait_Ack(void);
static void Write_IIC_Byte(unsigned char IIC_Byte);
static void Write_IIC_Command(unsigned char IIC_Command);
static void Write_IIC_Data(unsigned char IIC_Data);
void OLED_WR_Byte(unsigned char dat,unsigned char cmd);
void OLED_Set_Pos(unsigned char x,unsigned char y);
void OLED_Display_On(void);
void OLED_Display_Off(void);
void OLED_Clear(void);
void OLED_ShouChar(unsigned char x,unsigned char y,unsigned char chr);
void OLED_Init(void);
void OLED_ShowString(unsigned char x, unsigned char y,unsigned char *chr);
void OLED_ShowNum(unsigned char x,unsigned char y,unsigned int num,unsigned char len ,unsigned char size);
void OLED_ShowCHinese(unsigned char x,unsigned char y,unsigned char no);
#endif
delay.c
#include "delay.h"
#include "stm32f10x.h"
void initSysTick(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //ÉèÖÃʱÖÓÔ´8·ÖƵ
SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk; //ʹÄÜÖжÏ
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; //¿ª¶¨Ê±Æ÷
SysTick->LOAD = 9; //ËæÒâÉèÖÃÒ»¸öÖØ×°ÔØÖµ
}
/**
* ¹¦ÄÜ£ºÎ¢Ã뼶ÑÓʱº¯Êý
* ²ÎÊý£ºxus £º¾ßÌåÑÓʱʱ¼ä (µ¥Î»£ºÎ¢Ãë)
* ·µ»ØÖµ£ºNone
*/
void delay_us(u32 xus)
{
SysTick->LOAD = 9 * xus; //¼Æ9´ÎΪ1us£¬xusÔòÖØ×°ÔØÖµÒª*9
SysTick->VAL = 0; //¼ÆÊýÆ÷¹éÁã
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); //µÈ´ý¼ÆÊýÍê³É
}
/**
* ¹¦ÄÜ£ººÁÃ뼶ÑÓʱº¯Êý
* ²ÎÊý£ºxms £º¾ßÌåÑÓʱʱ¼ä (µ¥Î»£ººÁÃë)
* ·µ»ØÖµ£ºNone
*/
void delay_ms(u32 xms)
{
SysTick->LOAD = 9000; //¼Æ9´ÎΪ1us£¬1000´ÎΪ1ms
SysTick->VAL = 0; //¼ÆÊýÆ÷¹éÁã
while (xms--)
{
while (!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)); //µÈ´ýµ¥´Î¼ÆÊýÍê³É
}
}
delay.h
#include "stm32f10x.h"
void initSysTick(void);
void delay_us(u32 xus);
void delay_nms(u32 xms);
main.c
#include "stm32f10x.h"
#include "main.h"
#include "Shake.h"
#include "Relay.h"
#include "delay.h"
#include "sys.h"
#include "DHT11.h"
#include "oled.h"
#include "DHT11.h"
int main(void)
{
initSysTick();
delay_ms(2000);
OLED_Init(); //OLED³õʼ»d¯
OLED_Clear();
OLED_ShowString(2,1,"hello");
delay_ms(2000);
OLED_WR_Byte(0x81,OLED_CMD); // ¶Ô±È¶ÈÉèÖ㬿ÉÉèÖÃÁÁ¶È
OLED_WR_Byte(0x66,OLED_CMD); // 265
delay_ms(2000);
OLED_Clear();
OLED_ShowString(2,1,"ok");
delay_ms(2000);
OLED_WR_Byte(0xAE,OLED_CMD);
OLED_Clear();
OLED_ShowString(2,1,"ok");
delay_ms(2000);
OLED_WR_Byte(0xAF,OLED_CMD);
OLED_Clear();
OLED_ShowString(2,1,"ok");
delay_ms(2000);
OLED_WR_Byte(0x8D,OLED_CMD);
OLED_WR_Byte(0x10,OLED_CMD);
OLED_Clear();
OLED_ShowString(2,1,"ok");
// OLED_ShowCHinese(0,2,6); //µ±
// OLED_ShowCHinese(16,2,7); //Ç°
// OLED_ShowCHinese(32,2,8); //ÎÂ
// OLED_ShowCHinese(48,2,9); //¶È
// OLED_ShowCHinese(66,2,10); //£º
// OLED_ShowCHinese(90,2,15); //.
// OLED_ShowCHinese(112,2,11); //C
//
// OLED_ShowCHinese(16,5,6); //µ±
// OLED_ShowCHinese(32,5,7); //Ç°
// OLED_ShowCHinese(48,5,12); //ʪ
// OLED_ShowCHinese(64,5,9); //¶È
// OLED_ShowCHinese(80,5,10); //£º
// OLED_ShowCHinese(112,5,13); //.
//
// while(1)
// {
// uint16_t i;
// uint8_t k;
// uint8_t kk;
// uint8_t kkk;
// DHT11_UpdateData();
//
// i = Rxbuff[0]+ Rxbuff[1]+Rxbuff[2]+ Rxbuff[3];
// if(Rxbuff[4] ==i)
// {
// k=Rxbuff[2];
// kk=Rxbuff[0];
// kkk=Rxbuff[3];
// OLED_ShowNum(74,2,k/10,3,3);
// OLED_ShowNum(82,2,k%10,3,3);
// OLED_ShowNum(98,2,kkk,3,3);
// OLED_ShowNum(88,5,kk/10,3,3);
// OLED_ShowNum(98,55,kkk%10,3,3);
// }
// delay_ms(2000);
// }
}
DHT11.h
#ifndef _DHT11_H
#define _DHT11_H
#include "stm32f10x.h"
#define data1 GPIO_SetBits(GPIOB, GPIO_Pin_11)
#define data0 GPIO_ResetBits(GPIOB, GPIO_Pin_11)
#define read_data GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11)
void DHT11_GPIO_Init(void);
void DHT11_GPIO_Init1(void);
void DHT11_Start(void);
void DHT11_ReceptionBuff();
void DHT11_UpdateData();
extern uint16_t Rxbuff[5];
#endif
DHT11.c
#include "stm32f10x.h"
#include "DHT11.h"
#include "delay.h"
#include "stdio.h"
uint16_t Rxbuff[5];
void DHT11_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_11);
}
void DHT11_GPIO_Init1(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_11);
}
static uint8_t DHT11_Back()
{
uint8_t i =200;
while(read_data && i--); //µÈ´ýµÍµçƽµÄµ½À´
i= 200;
while(!read_data && i--); //µÈ´ý¸ßµçƽµÄµ½À´
return 0;
}
void DHT11_Start(void)
{
data0;
delay_ms(20);
data1;
delay_us(10);
DHT11_GPIO_Init1();
while(DHT11_Back());
}
void DHT11_ReceptionBuff()
{
uint8_t y=1;
uint16_t i;
uint8_t x;
for(x=0;x<5;x++)
{
i=0;
for(y=1;y<9;y++)
{
while(read_data)
{
__nop();
}
delay_us(40);
while(!read_data)
{
__nop();
}
i= i<<1;
delay_us(30);
if(read_data)
{
i |=1;
}
while(read_data);
}
Rxbuff[x] =i;
}
}
void DHT11_UpdateData()
{
DHT11_GPIO_Init();
DHT11_Start();
DHT11_ReceptionBuff();
}