您的位置 首页 芯片行情

中科昊芯DSC28034湖人版OLED屏上显示温湿度值

中科昊芯DSC28034湖人版OLED屏上显示温湿度值-将GPIO0设为普通IO口,并设置为输出状态,拉高主机,拉低主机18-20ms,拉高主机20-40us;设置为输入状态,等待从机响应;响应过后判断输入的高电平,在高电平段延时40us后仍为高电平则输入1,为低电平则输入0。

 

/******************************************************************

编  译  器:Haawking IDE V0.1.2

  D  S  P:dsc28034湖人板

电 脑 配 置:Windows10 专业版; 64 位操作系统

仿  真  器:HX100v2

使  用  库:无

作         用:在OLED屏上显示温湿度值

说         明:Debug as程序后在oled屏上显示温湿度数值

版         本:V0.0.1

******************************************************************/

第一步:创建工程

上篇文章中有具体流程,这里不做过多赘述

第二步:编程

根据官方提供的DHT11使用手册。流程如下:

DHT11链接:https://pan.baidu.com/s/1DxBY9vMtx5BlxtpIx6okKQ 

提取码:8034

image.png

       将GPIO0设为普通IO口,并设置为输出状态,拉高主机,拉低主机18-20ms,拉高主机20-40us;设置为输入状态,等待从机响应;响应过后判断输入的高电平,在高电平段延时40us后仍为高电平则输入1,为低电平则输入0。

程序如下:

 

DHT11.c

 

//初始化GPIO0

void gpio0_init(void)

{

EALLOW;

GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;

GpioCtrlRegs.GPAMUX1.bit.GPIO0 =0;

GpioCtrlRegs.GPAQSEL1.bit.GPIO0 = 0;

EDIS;

}

image.png

//主机输出设置

void DHT11_Rst(void)

{

uchar i;

EALLOW;

DAT_DIR=1;

EDIS;

// // test

// while(1) {

// DAT= 0;

// DELAY_US(10);

// DAT = 1;

// DELAY_US(10);

// }

DAT= 0;

DELAY_US(300000);

DAT = 1;

DELAY_US(350);

}

(注:程序中的test目的是测试延时函数DELAY_US()的真实值)

 

//等待DHT11的响应

Uint8 Dht11_Check(void){

Uint8 retry=0;

EALLOW;

DAT_DIR=0;

EDIS;

    while (DAT&&retry<100){

        retry++;

        DELAY_US(1);

    }

    if(retry>=100)return 1; else retry=0;

    while (!DAT&&retry<100){

        retry++;

        DELAY_US(1);

    }

    if(retry>=100)return 1;else return 0;

}

 

//初始化DHT11

Uint8 DHT11_Init (void){

DHT11_Rst();

return Dht11_Check();

}

image.pngimage.png

//从DHT11读取一个位

uchar Dht11_ReadBit(void){

    uchar retry=0;

    while (DAT&&retry<100){

           retry++;

            DELAY_US(1);

        }

       retry=0;

    while(!DAT&&retry<100){

      retry++;

      DELAY_US(1);

    }

    DELAY_US(400);

    if(DAT)return 1; else return 0;

}

 

//从DHT11读取一个字节

uchar Dht11_ReadByte(void){

    uchar i,dat;

    dat=0;

    for (i=0;i<8;i++){

        dat<<=1;

        dat|=Dht11_ReadBit();

    }

    return dat;

}

 

//读取一次数据

Uint8 DHT11_ReadData(Uint8 *temp,u8 *humi){

uchar buf[5];

uchar i;

DHT11_Rst();

    if(Dht11_Check()==0){

        for(i=0;i<5;i++){

            buf[i]=Dht11_ReadByte();

        }

        if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4]){

        *humi=buf[0];

        *temp=buf[2];

        }

    }

}

 

DHT11.h

 

#define uchar                  unsigned char

#define DAT_DIR GpioCtrlRegs.GPADIR.bit.GPIO0 

#define DAT GpioDataRegs.GPADAT.bit.GPIO0

 

extern char temp[4];

 

void gpio0_init(void);

void DHT11_Rst(void);

Uint8 Dht11_Check(void);

Uint8 DHT11_Init (void);

uchar Dht11_ReadBit(void);

uchar Dht11_ReadByte(void);

Uint8 DHT11_ReadData(Uint8 *temp,u8 *humi);

 

这里给出OLED屏.h取字模板,OLED模块例程主页有,还请自行参考

 

staTIc int Hzk[][32]=

{

{0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},

{0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00},/*\”温\”,0*/

 

{0x10,0x60,0x02,0x8C,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00},

{0x04,0x04,0x7E,0x01,0x44,0x48,0x50,0x7F,0x40,0x40,0x7F,0x50,0x48,0x44,0x40,0x00},/*\”湿\”,1*/

 

{0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00},

{0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},/*\”度\”,2*/

};

staTIc int F8X16[]=

{

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*\”0\”,0*/

0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,/*\”1\”,1*/

0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*\”2\”,2*/

0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,/*\”3\”,3*/

0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,/*\”4\”,4*/

0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,/*\”5\”,5*/

0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,/*\”6\”,6*/

0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,/*\”7\”,7*/

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*\”8\”,8*/

0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,/*\”9\”,9*/

0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,/*\”C\”,10*/

0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00,/*\”%\”,11*/

0x00,0x00,0x04,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*\”^\”,12*/

0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,/*\”R\”,13*/

0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,/*\”H\”,14*/

};

 

main.c

 

void delay();

Uint8 temperature;

Uint8 humidity;

void main(void)

{

InitSysCtrl();

DINT;

InitPieCtrl();

IER_DISABLE(0xFFFF);

IFR_DISABLE(0xFFFF);

InitPieVectTable();

InitCpuTImers();

    gpio0_init();

    I2C_GPIO_Config_OLED();

    OLED_Init();

OLED_Clear();

OLED_ShowCHinese(0,0,0);

OLED_ShowCHinese(16,0,2);

OLED_ShowCHinese(0,4,1);

OLED_ShowCHinese(16,4,2);

    while(1)

    {

          DHT11_ReadData(&temperature,&humidity);

      OLED_ShowNum(40,0,temperature,2,16);

      OLED_ShowNum(40,4,humidity,2,16);

OLED_ShowChar(56,0,12,16);

OLED_ShowChar(64,0,10,16);

OLED_ShowChar(56,4,11,16);

OLED_ShowChar(64,4,13,16);

OLED_ShowChar(72,4,14,16);

      delay();

   }

}

void delay(void)

{

for(int i=0;i<50000;i++);

}

第三步:调试与显示温湿度

调试无错后,全速状态下显示的温湿度值会因环境温湿度的变化而变化,显示效果如下:

微信图片编辑_20210826163351.jpg特别鸣谢 原创作者 博主「晟逸轩」

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

作者: jf_69554756

为您推荐

如何使用GPU编程优化模型/代码

  使用 Python 和 NumPy 库开发的 HIM 模型在 hackathon 开始时没有并行或 GPU 计算。在活动期间, THINKLAB 团队使用 CuPy 为了使他们的代码在 GPU 上并行运行,然后重点将用户定义的 CUDA 内核应用于参数。结果是 672 倍加速,计算时间从 2 周缩短到大约 30 分钟。\” />

<meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1

NVIDIA驱动程序支持OpenCL和Vulkan进行互操作

  OpenCL 和 Vulkan 之间的互操作在移动和桌面平台上都有很强的需求。 NVIDIA 与 Khronos OpenCL 工作组密切合作,发布了一套临时跨供应商的 KHR 扩展。这些扩展使应用程序能够在 OpenCL 和 Vulkan 等 API 之间高效地共享数据,与使用隐式资源的前一代互操作 API 相比,灵活性显著提高。\” />

<meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1

准备去元宇宙过第二人生?小心别被骗了

准备去元宇宙过第二人生?小心别被骗了   电子发烧友网报道(文/黄山明)随着元宇宙在近期的大火,相信大家对于这一技术已不陌生。但元宇宙因为其特性,也需要建立合适的网络安全防护措施,来应对这项技术带来的独特挑战。并且在元宇宙想要得以持续,需要用去中心化的平权式共享机制与共治机制来作为保障,既要做大“蛋糕”,也要分好“蛋糕”。但问题在于,去中心化的元宇宙,在安全问题上也将面临更大的挑战。     先简单解释一下元\” />

<meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1

代工巨头再次换帅,中芯国际高管频频离职,业绩喜人之下原因为何?

电子发烧友网(文/黄山明)3月17日,中芯国际发出公告,公司代理董事长高永岗博士,获委任为中芯国际董事长,自2022年3月17日生效。而在半年前辞去中芯国际董事长职位的“芯片泰斗”周子学最终以身体原因为由,辞去了执行董事一职。   对于这一次的交接,有业内人士称这是一次完美的交接,对中芯国际乃至中国半导体产业都有着重要的影响。不过另一方面,自周子学辞任中芯国际董事长之后,其股价便一路走低,从半年前的21.1港元降至如今的\” />

<meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1

电子测量仪器企业普源精电上市!年营收超3亿,募资7.6亿加速自研芯片项目

电子发烧友网报道(文/莫婷婷)4月8日,普源精电在科创板上市,发行价格60.88元/股,公开发行股份约3032.74万股,占公司发行后总股本的比例为25%。该股上市当日开盘即破发,截至今日收盘,普源精电报39.78元,跌幅34.66%,总市值48.26亿元。   图源:东方财富   在上市之前,普源精电在招股书的风险因素中提到,“公司无法保证未来几年内实现盈利,公司上市后亦可能面临退市的风险”。2020年、2021年上半年,普源精电分别亏损2716.6万元、2036.48万元,连\” />

<meta http-equiv=X-UA-Compatible content=\"IE=edge,chrome=1

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部