[CW32F030系列] 【CW32F030CxTx StartKit测评】+驱动OLED和DHT11

[复制链接]
1013|3
 楼主| 51xlf 发表于 2022-7-8 15:30 | 显示全部楼层 |阅读模式
ar, cw
本帖最后由 51xlf 于 2022-7-8 17:01 编辑

这里要驱动是IIC接口的OLED,没有使用硬件IIC,这样便于移植相关的程序到其他的芯片上。

oled的资料就不再赘述了。
OLED和CW32F030CxTx的对应接口是PA3--SCL,PA4--SDA
使用宏定义,便于后期好修改IO口。
  1. #define OLED_SCLK_Pin GPIO_PIN_3
  2. #define OLED_SCLK_GPIO_Port CW_GPIOA
  3. #define OLED_SDIN_Pin GPIO_PIN_4
  4. #define OLED_SDIN_GPIO_Port CW_GPIOA


使用宏定义,确定SCL和SDA的IO操作。CW库里面直接给定义好了如何给IO置高或者置低。
cw32f030_gpio.h里面有所有的IO的操作。
  1. #define OLED_SCLK_Clr() PA03_SETLOW()//SCL  拉低
  2. #define OLED_SCLK_Set() PA03_SETHIGH()   //SCL  拉高

  3. #define OLED_SDIN_Clr() PA04_SETLOW()//SDA  拉低
  4. #define OLED_SDIN_Set() PA04_SETHIGH()  //SDA  拉高


初始化一下IO口。
  1. GPIO_InitTypeDef GPIO_InitStructure;
  2.             __RCC_GPIOA_CLK_ENABLE();
  3.     GPIO_InitStructure.Pins = OLED_SDIN_Pin|OLED_SCLK_Pin;
  4.     GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
  5.     GPIO_InitStructure.IT = GPIO_IT_NONE;
  6.         GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
  7.     GPIO_Init(OLED_SDIN_GPIO_Port, &GPIO_InitStructure);


其他的设置都是开发板默认的设置了。
  1. OLED_Init();
  2.     OLED_Clear();
  3.     OLED_ShowStringCN(0,16,"芯源CW32 MCU ",1);
  4.     OLED_ShowString(0,0,"bbs.21ic.com",16,1); //表示x=4,y=8开始显示字符串
  5.     OLED_Refresh();

主要是介绍一下,如何将汉字和英文字符混合显示。
  1. void OLED_ShowStringCN(uint8_t x,uint8_t y,uint8_t *chr,uint8_t mode)
  2. {   unsigned short k,x0;
  3.     unsigned char i,j;
  4.     while(*chr) {
  5.         if((*chr) < 128)
  6.         {
  7.             OLED_ShowChar(x,y,*chr,16,mode);
  8.             x+=8;
  9.             chr++;
  10.         } else {

  11.             for (k=0; k<hz16_num; k++)
  12.             {
  13.                 if ((hz16[k].Index[0]==*(chr))&&(hz16[k].Index[1]==*(chr+1)))
  14.                 {
  15.                     for(i=0; i<16; i++)
  16.                     {
  17.                         for(j=0; j<8; j++)
  18.                         {
  19.                             if(hz16[k].Msk[i*2]&(0x80>>j))        OLED_DrawPoint(x+j,y+i,mode);
  20.                             else {
  21.                                 OLED_DrawPoint(x+j,y+i,!mode);;
  22.                             }
  23.                         }
  24.                         for(j=0; j<8; j++)
  25.                         {
  26.                             if(hz16[k].Msk[i*2+1]&(0x80>>j))        OLED_DrawPoint(x+j+8,y+i,mode);
  27.                             else
  28.                             {
  29.                                 OLED_DrawPoint(x+j+8,y+i,!mode);;
  30.                             }
  31.                         }
  32.                     }
  33.                 }
  34.             }
  35.             chr+=2;
  36.             x+=16;
  37.         }

  38.     }
  39. }


看看显示的效果怎么样?


已经实现了OLED的驱动,这里测试一下如何读取温湿度传感器DHT11。具体怎么读取温湿度这里就不再赘述了。
看看如何在程序里面实现吧。
首选是要定义使用的DHT11的IO口,使用的PA2.
  1.   #define DHT11_IO_Pin GPIO_PIN_2
  2. #define DHT11_IO_GPIO_Port CW_GPIOA
驱动端口,使用宏定义实现1或者0的输入,
  1. //设置驱动IO端口
  2. #define DHT11_DQ_OUT_1 PA02_SETHIGH();
  3. #define DHT11_DQ_OUT_0 PA02_SETLOW();
  4. #define DHT11_DQ_IN GPIO_ReadPin(DHT11_IO_GPIO_Port,DHT11_IO_Pin)
配置IO口为输入或者输出。这里使用的是库函数自带的宏定义。PA02_DIR_OUTPUT();这个可以直接实现,非常方便。
  1. void DHT11_IO_OUT(void)
  2. {
  3.                 PA02_DIR_OUTPUT();
  4. }

  5. void DHT11_IO_IN(void)
  6. {
  7.                 PA02_DIR_INPUT() ;
  8. }
这里重点说一下,延时1us,我没有修改systick的延时,直接使用的是for循环。
这里测试了一下,for循环10个数据正好1us。
  1. void delayUs(uint32_t nus)
  2. {
  3.                 uint32_t i;
  4. i = nus * 10;
  5. while(i--);
  6. }

然后就是在main函数读取温湿度数据就行了。

  1.         if(!dht11Read(&temperature, &humidity))//Read DHT11 Value
  2.         {
  3.             sprintf(s_temp,"温度:%02d'C",temperature);
  4.             OLED_ShowStringCN(0,0,(unsigned char*)s_temp,1);// 显示温湿度
  5.             sprintf(s_temp,"湿度:%02d%%  ",humidity);
  6.             OLED_ShowStringCN(0,16,(unsigned char*)s_temp,1);// 显示温湿度
  7.             OLED_Refresh();
  8.         }
看看显示的效果。
搜狗截图22年07月08日1529_1.jpg

源代码如下
BSP.rar (1.96 KB, 下载次数: 4)

妇女半边天 发表于 2022-7-14 11:15 | 显示全部楼层
这么多评测,是有活动吗
huquanz711 发表于 2022-7-15 07:29 来自手机 | 显示全部楼层
DHT11很经典的传感器啊
duo点 发表于 2022-7-15 14:43 来自手机 | 显示全部楼层
一楼的老铁有点后知后觉了,活动早就过了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

551

主题

9967

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部