本帖最后由 jinglixixi 于 2018-11-22 11:13 编辑
机智云功能板提供了DHT11温湿度传感器和OLED显示屏的接口,其电路原理图如下。
由于其提供的OLED屏接口与常规的OLED屏引脚有所差异,因此需要自行将NC引脚与3.3V引脚连接起来。 经转换,相关引脚与MCU的连接关系如下: DHT11 --- P1.24 DIN --- P0.9 CLK --- P1.29 CS --- P0.2 D/C --- P2.3 RES --- P1.28
向OLED屏输出高低电平的语句为: #defineOLED_SCLK_Clr() Chip_GPIO_SetPinState(LPC_GPIO, 0, 9, 0); #defineOLED_SCLK_Set() Chip_GPIO_SetPinState(LPC_GPIO, 0, 9, 1); #defineOLED_SDIN_Clr() Chip_GPIO_SetPinState(LPC_GPIO, 1, 29,0); #defineOLED_SDIN_Set() Chip_GPIO_SetPinState(LPC_GPIO, 1, 29, 1); #defineOLED_RST_Clr() Chip_GPIO_SetPinState(LPC_GPIO, 0, 2, 0); #defineOLED_RST_Set() Chip_GPIO_SetPinState(LPC_GPIO, 0, 2, 1); #defineOLED_DC_Clr() Chip_GPIO_SetPinState(LPC_GPIO, 2, 3, 0); #defineOLED_DC_Set() Chip_GPIO_SetPinState(LPC_GPIO, 2, 3, 1); #defineOLED_CS_Clr() Chip_GPIO_SetPinState(LPC_GPIO, 1, 28, 0); #defineOLED_CS_Set() Chip_GPIO_SetPinState(LPC_GPIO, 1, 28, 1);
OLED屏的引脚配置函数为: - voidLCD_GPIO_Cogfig(void)
- {
- Chip_GPIO_SetPinDIROutput(LPC_GPIO, 1,29);
- Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0,9);
- Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0,2);
- Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2,3);
- Chip_GPIO_SetPinDIROutput(LPC_GPIO, 1,28);
- }
复制代码
#defineDHT11_IO_PIN 24 #defineDHT11_IO_PORT 1
// SetGPIO Direction #defineDHT11_IO_IN() Chip_GPIO_SetPinDIRInput(LPC_GPIO,DHT11_IO_PORT, DHT11_IO_PIN) #defineDHT11_IO_OUT() Chip_GPIO_SetPinDIROutput(LPC_GPIO,DHT11_IO_PORT, DHT11_IO_PIN)
// SetData output state #defineDHT11_DATA_CLR() Chip_GPIO_SetPinState(LPC_GPIO,DHT11_IO_PORT, DHT11_IO_PIN, false) #defineDHT11_DATA_SET() Chip_GPIO_SetPinState(LPC_GPIO,DHT11_IO_PORT, DHT11_IO_PIN, true)
// getDATA input state #define DHT11_DQ_IN Chip_GPIO_GetPinState(LPC_GPIO, DHT11_IO_PORT, DHT11_IO_PIN)
staticuint8_t us_ticks = 0;
- voiddelay_init(uint8_t sysclk)
- {
- us_ticks = sysclk;
- }
复制代码
- void delay_us(uint32_tnus)
- {
- uint32_t ticks;
- uint32_t start_tick, cur_tick,total_tick = 0;
- uint32_t reload_tick =SysTick->LOAD;
- ticks = nus * us_ticks;
- start_tick = SysTick->VAL;
- while (1)
- {
- cur_tick = SysTick->VAL;
- if (cur_tick != start_tick)
- {
- if (cur_tick <start_tick)
- total_tick+= start_tick - cur_tick;
- else
- total_tick+= reload_tick - cur_tick + start_tick;
- start_tick =cur_tick;
- if (total_tick >=ticks)
- break;
- }
- }
- }
复制代码
- voiddelay_ms(uint16_t nms)
- {
- uint16_t i;
- for (i = 0; i < nms; i++)
- delay_us(1000);
- }
复制代码
温湿度显示的主程序为: - intmain(void)
- {
- uint8_t i=0;
- SystemCoreClockUpdate();
- Board_Init();
- SysTick_Config(SystemCoreClock /TICKRATE_HZ1);
- delay_init(SystemCoreClock / 1000000);
- BSP_DHT11_Init();
- OLED_Init();
- OLED_Clear();
- OLED_ShowString(8,0,"LPC11U68");
- OLED_ShowString(8,2,"DHT11TEST");
- OLED_ShowString(8,4,"temp: C");
- OLED_ShowString(8,6,"humi: %");
- while (1)
- {
- BSP_DHT11_Read_Data(&dht_temp,&dht_humi);
- OLED_ShowNum(48,4,dht_temp,3,16);
- OLED_ShowNum(48,6,dht_humi,3,16);
- delay_ms(1000);
- }
- }
复制代码
温湿度显示效果
|