位置: IT常识 - 正文

基于stm32的太空人温湿度时钟项目——DHT11(HAL库)(基于stm32的飞行器)

编辑:rootadmin
基于stm32的太空人温湿度时钟项目——DHT11(HAL库)

推荐整理分享基于stm32的太空人温湿度时钟项目——DHT11(HAL库)(基于stm32的飞行器),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:基于stm32f4,基于stm32的简单设计,基于stm32f103,基于stm32的lora,基于stm32的lora,基于stm32项目合集,基于stm32项目合集,基于stm32项目合集,内容如对您有帮助,希望把文章链接给更多的朋友!

        项目介绍:本项目属于复合型项目,主要包括的功能模块有RTC时钟,OLED动态显示,DHT11温湿度传感器。稍作修改可以作为一级菜单界面等使用,本文将会详细讲解各部分原理与编程思路,文章末尾会有源码开源(HAL库)。

        硬件设备:STM32F103C8T6,OLED,HDT11

        硬件实物图:

         效果图:

 引脚连接:

OLED:

VCC --> 3.3V

GND --> GND

SCL --> PB10

SDA --> PB11

DHT11:

DATA --> PA9

VCC --> 3.3V

GND --> GND

一、 DHT11简介1.1 DTH11概念与介绍

        DHT11 是广州奥松有限公司生产的一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信(DATA引脚),仅仅需要一个I/O 口。传感器内部湿度和温度数据 40Bit的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。(正常使用3.3V即可)

工作电压范围:3.5V-5.5V 工作电流 :平均 0.5mA 湿度测量范围:20-90%RH 温度测量范围:0-50℃ 湿度分辨率 :1%RH 8 位 温度分辨率 :1℃ 8 位 采样周期 :1S 单总线结构 与 TTL 兼容(5V)

        注意事项:DTH11由于物理与化学结构性质,是比较容易损坏的,需要尽量远离恶劣坏境进行工作测量。如果实在不小心,对DHT1传感器造成了破坏,读者可以去网上搜索一下修复教程进行抢救一下。

实物图:

1.2 DTH11工作原理

        前文有提到:DTH11传感器只具有3根引脚,所以是单总线进行通讯(DATA),为了方便读者对于通讯原理与编程的同步高效率理解。关于时序的通讯方式将在本文代码段部分逐个详细讲解。

        单片机读取数据

        DHT11数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(5个字节=40Bit)组成。数据分小数部分和整数部分,具体格式在下面说明。一次完整的数据传输为40bit,高位先出。

校验方式:校验和数据为前四个字节相加。

        传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。如果,某次从传感器中读取如下5Byte数据:

 由以上数据就可得到湿度和温度的值,计算方法:         humi (湿度)= byte4 . byte3=45.0 (%RH)         temp (温度)= byte2 . byte1=28.0 ( ℃)         jiaoyan(校验)= byte4+ byte3+ byte2+ byte1=73(=humi+temp)(校验正确)         注意:DHT11一次通讯时间最大3ms,主机连续采样间隔建议不小于100ms。(这一点在时序编程的时候也会经常体现出来)

if(data[0] + data[1] + data[2] + data[3] == data[4]){ //执行程序}

        时序部分是笔者认为DHT11最为重要的部分,结合代码与文字描述可能会让读者有更好的理解,读者可以调至下文代码段进行学习。

二、RTC简介

        RTC(Real Time Clock)即实时时钟,RTC究其本质还是一个定时器(独立的定时器)。RTC模块拥有一个连续计数的计数器,在相应的软件配置下,可以提供时钟日历的功能。修改计数器的值可以重新设置当前时间和日期 RTC还包含用于管理低功耗模式的自动唤醒单元。

在断电情况下 RTC仍可以独立运行 只要芯片的备用电源一直供电,RTC上的时间会一直走。(部分最小系统板是没有芯片备用电源的,所以不一定都可以掉电仍然计时)

        其拥有的两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时( 12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。

RCT特征:

● 可编程的预分频系数:分频系数高为220。 ● 32位的可编程计数器,可用于较长时间段的测量。 ● 2个分离的时钟:用于APB1接口的PCLK1和RTC时钟(RTC时钟的频率必须小于PCLK1时钟 频率的四分之一以上)。 ● 可以选择以下三种RTC的时钟源:      ● HSE时钟除以128;      ● LSE振荡器时钟;(比较常用的)      ● LSI振荡器时钟

● 2个独立的复位类型:      ● APB1接口由系统复位;      ● RTC核心(预分频器、闹钟、计数器和分频器)只能由后备域复位

● 3个专门的可屏蔽中断:      ● 1.闹钟中断,用来产生一个软件可编程的闹钟中断。

     ● 2.秒中断,用来产生一个可编程的周期性中断信号(长可达1秒)。

     ● 3.溢出中断,指示内部可编程计数器溢出并回转为0的状态。

RTC时钟源:

三种不同的时钟源可被用来驱动系统时钟(SYSCLK):

基于stm32的太空人温湿度时钟项目——DHT11(HAL库)(基于stm32的飞行器)

        ● HSI振荡器时钟         ● HSE振荡器时钟         ● PLL时钟

CubexMX时钟树下的选择:

三、OLED简介与使用

        关于OLED的使用与原理不熟悉的笔者欢迎去笔者另一篇文章学习【强烈推荐】基于stm32的OLED各种显示实现(含动态图)_混分巨兽龙某某的博客-CSDN博客

四、CubexMX配置

        1、RCC配置外部高速晶振(精度更高)——HSE;RTC时钟选择:LSE;

         2、SYS配置:Debug设置成Serial Wire(否则可能导致芯片自锁);

         3、GPIO配置:PA9设置为普通输出(DHT11的DATA接线引脚);

         4、RTC配置:年月日,时分秒;

         5、TIM2配置:由上面可知DHT11的使用需要us级的延迟函数,HAL库自带只有ms的,所以需要自己设计一个定时器;

         6、I2C2配置:作为OLED的通讯方式;

         7、时钟树配置

        8、工程配置

 五、代码部分5.1 DTH11代码:

        要编写出DHT11温湿度传感器的程序代码,需要从DHT11时序图来分析:

        如下图所示,用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取部分数据。从模式下,DHT11接收到开始信号触发一次温湿度采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集。采集数据后转换到低速模式。

总结:DHT11的代码实现总共分为6个部分:

        1、DTH11——DATA引脚配置

        2、DHT11复位函数(即MCU发出起始信号)

        3、DHT11检查函数

        4、读取DHT11一位数据(返回值0/1)

        5、读取一个字节(返回值:读到的数据)

        6、读取显示温湿度传感器数据

5.1.1 配置输入输出

        由于DHT11温湿度传感器采用了单总线通讯的方式,所以DATA引脚连接的PB9必须既要设置成输入也要设置成输出。

/** * @brief 设置引脚模式 * @param mode: 0->out, 1->in * @retval None */static void DHT11_GPIO_MODE_SET(uint8_t mode){ if(mode) { /* 输入 */ GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_9; // 9号引脚 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式 GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉输入 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } else { /* 输出 */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.Pin = GPIO_PIN_9; // 9号引脚 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; // Push Pull 推挽输出模式 GPIO_InitStructure.Pull = GPIO_PULLUP; // 上拉输出 GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; // 高速 HAL_GPIO_Init(GPIOB,&GPIO_InitStructure); }}5.1.2 DHT11复位函数

        复位DHT11就是发送DHT11起始信号,告诉传感器通讯开始。起始信号要求主机MCU先将总线PB9拉为低电平持续至少18ms(这里设置20ms),随后主机MCU将总线PB9设置为高电平持续20~40us(这里取中间值30us,HAL库中没有us,这里需要TIM2定时器制作一个延迟函数)​

us延迟函数:

/** * @brief 定时器延时us,Prescaler -> 32-1 * @param us: <= 65535 * @retval None */void Tims_delay_us(uint16_t nus){__HAL_TIM_SET_COUNTER(DLY_TIM_Handle, 0);__HAL_TIM_ENABLE(DLY_TIM_Handle);while (__HAL_TIM_GET_COUNTER(DLY_TIM_Handle) < nus){}__HAL_TIM_DISABLE(DLY_TIM_Handle);}DTH11复位函数(起始):/** * @brief 温湿度传感器启动信号发送 * @param void * @retval None */void DHT11_START(void){ DHT11_GPIO_MODE_SET(0); // 主机设置为输出模式 DHT11_PIN_RESET; // 主机拉低电平 HAL_Delay(20); // 主机等待 18 < ms > 30 DHT11_GPIO_MODE_SET(1); // 主机设置为输入模式,等待DHT11答应} // 因为设置了上拉输入,GPIO -> 15.1.3 DHT11检查函数

        检查DHT11是否正常,正常的话会在单片机发送起始信号完成后,传感器返回80us低电平,然后发送80us高电平。即证明DHT11工作正常,该函数工作正常返回0,否则返回1,该函数中利用了while循环检测在一定时间内的电平变化,此类用法在后面也会经常用到。(笔者这里采用了另一种检查DHT11是否正常的方式,就是直接延迟40us,虽然读取PB9引脚的数值,为1则正常,为0则重启DHT11即可)

/** * @brief 检测温湿度传感器是否存在(检测DHT11的应答信号) * @param void * @retval 0/1 */unsigned char DHT11_Check(void){ Tims_delay_us(40); if(DHT11_READ_IO == 0) // 检测到DHT11应答 { return 1; } else // 检测到DHT11不应答 { return 0; }} 5.1.4 读取DHT11一位数据

        这里延时40us后判断引脚电平,来判断该位数据为1或0。之所以是40微秒是因为传感器数字0的信号持续时间为26-28us。同时,从笔者日常实验中发现,DHT11中最好不要频繁使用延迟函数取可以检验DHT11是否正常工作,很有可能造成死机或者数据为0。

/** * @brief 读取一位数据 1bit * @param void * @retval 0/1 */unsigned char DHT11_READ_BIT(void){ while(!DHT11_READ_IO); // 过度数据的低电平 Tims_delay_us(40); // 过度数据的高电平 if(DHT11_READ_IO) // 此时如果还为高电平则数据为 1 { while(DHT11_READ_IO); // 过度数据的高电平 return 1; } else // 若此时为低则为 0 { return 0; }}5.1.5 读取一个字节

        循环读入一个字节的数据,并将每一步新加入的数据放置在最低位。

/** * @brief 读取一个字节数据 1byte / 8bit * @param void * @retval temp */unsigned char DHT11_READ_BYTE(void){ uint8_t i,temp = 0; // 暂时存储数据 for(i=0; i<8 ;i++) { temp <<= 1; if(DHT11_READ_BIT()) // 1byte -> 8bit { temp |= 1; // 0000 0001 } } return temp;}5.1.6 读取显示温湿度传感器数据

        读取数据将数据存入数组,这里仅保留了温度数据的整数位,注意数据较验方法,校验和数据等于“8bit湿度整数数据+8bit湿度小数数据 +8bi温度整数数据+8bit温度小数数据”所得结果的末8位。

/** * @brief 读取温湿度传感器数据 5byte / 40bit * @param void * @retval 0/1/2 */unsigned char DHT11_READ_DATA(void){ uint8_t i; uint8_t data[5] = {0}; DHT11_START(); // 主机发送启动信号 if(DHT11_Check()) // 如果DHT11应答 { while(!DHT11_READ_IO); // 过度DHT11答复信号的低电平 while(DHT11_READ_IO); // 过度DHT11答复信号的高电平 for(i=0; i<5; i++) { data[i] = DHT11_READ_BYTE(); // 读取 5byte } if(data[0] + data[1] + data[2] + data[3] == data[4]) { //显示温度OLED_ShowCN_STR(0,4,0,2);OLED_ShowStr(32,4,":",2); OLED_ShowNum(40,4,data[2],2,16);OLED_ShowCN_STR(59,4,4,1);//显示湿度OLED_ShowCN_STR(0,6,2,2);OLED_ShowStr(32,6,":",2);OLED_ShowNum(40,6,data[0],2,16);OLED_ShowStr(59,6,"HR",2); return 1; // 数据校验通过 } else { return 0; // 数据校验失败 } } else // 如果DHT11不应答 { return 2; }}

DHT11.C总代码:

#include "dht11.h"#include "oled.h" /** * @brief 温湿度传感器主函数 * @param void * @retval None */void DHT11(void){ DHT11_READ_DATA(); HAL_Delay(50); // 预设一定缓冲}/** * @brief 温湿度传感器启动信号发送 * @param void * @retval None */void DHT11_START(void){ DHT11_GPIO_MODE_SET(0); // 主机设置为输出模式 DHT11_PIN_RESET; // 主机拉低电平 HAL_Delay(20); // 主机等待 18 < ms > 30 DHT11_GPIO_MODE_SET(1); // 主机设置为输入模式,等待DHT11答应} // 因为设置了上拉输入,GPIO -> 1/** * @brief 读取一位数据 1bit * @param void * @retval 0/1 */unsigned char DHT11_READ_BIT(void){ while(!DHT11_READ_IO); // 过度数据的低电平 Tims_delay_us(40); // 过度数据的高电平 if(DHT11_READ_IO) // 此时如果还为高电平则数据为 1 { while(DHT11_READ_IO); // 过度数据的高电平 return 1; } else // 若此时为低则为 0 { return 0; }}/** * @brief 读取一个字节数据 1byte / 8bit * @param void * @retval temp */unsigned char DHT11_READ_BYTE(void){ uint8_t i,temp = 0; // 暂时存储数据 for(i=0; i<8 ;i++) { temp <<= 1; if(DHT11_READ_BIT()) // 1byte -> 8bit { temp |= 1; // 0000 0001 } } return temp;}/** * @brief 读取温湿度传感器数据 5byte / 40bit * @param void * @retval 0/1/2 */unsigned char DHT11_READ_DATA(void){ uint8_t i; uint8_t data[5] = {0}; DHT11_START(); // 主机发送启动信号 if(DHT11_Check()) // 如果DHT11应答 { while(!DHT11_READ_IO); // 过度DHT11答复信号的低电平 while(DHT11_READ_IO); // 过度DHT11答复信号的高电平 for(i=0; i<5; i++) { data[i] = DHT11_READ_BYTE(); // 读取 5byte } if(data[0] + data[1] + data[2] + data[3] == data[4]) { //显示温度OLED_ShowCN_STR(0,4,0,2);OLED_ShowStr(32,4,":",2); OLED_ShowNum(40,4,data[2],2,16);OLED_ShowCN_STR(59,4,4,1);//显示湿度OLED_ShowCN_STR(0,6,2,2);OLED_ShowStr(32,6,":",2);OLED_ShowNum(40,6,data[0],2,16);OLED_ShowStr(59,6,"HR",2); return 1; // 数据校验通过 } else { return 0; // 数据校验失败 } } else // 如果DHT11不应答 { return 2; }}/** * @brief 检测温湿度传感器是否存在(检测DHT11的应答信号) * @param void * @retval 0/1 */unsigned char DHT11_Check(void){ Tims_delay_us(40); if(DHT11_READ_IO == 0) // 检测到DHT11应答 { return 1; } else // 检测到DHT11不应答 { return 0; }}/** * @brief 设置引脚模式 * @param mode: 0->out, 1->in * @retval None */static void DHT11_GPIO_MODE_SET(uint8_t mode){ if(mode) { /* 输入 */ GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_9; // 9号引脚 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式 GPIO_InitStruct.Pull = GPIO_PULLUP; // 上拉输入 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } else { /* 输出 */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.Pin = GPIO_PIN_9; // 9号引脚 GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; // Push Pull 推挽输出模式 GPIO_InitStructure.Pull = GPIO_PULLUP; // 上拉输出 GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH; // 高速 HAL_GPIO_Init(GPIOB,&GPIO_InitStructure); }}/** * @brief 定时器延时us,Prescaler -> 32-1 * @param us: <= 65535 * @retval None */void Tims_delay_us(uint16_t nus){__HAL_TIM_SET_COUNTER(DLY_TIM_Handle, 0);__HAL_TIM_ENABLE(DLY_TIM_Handle);while (__HAL_TIM_GET_COUNTER(DLY_TIM_Handle) < nus){}__HAL_TIM_DISABLE(DLY_TIM_Handle);}

DTH11.H代码:

#ifndef __DHT11_H__#define __DHT11_H__/* Private includes ----------------------------------------------------------*/#include "main.h"#include "gpio.h"#include "stdio.h"#include "tim.h"#include "stm32f1xx.h"/* Private define ------------------------------------------------------------*/#define DHT11_PIN_SET HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET) // ??GPIO??#define DHT11_PIN_RESET HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET) // ??GPIO??#define DHT11_READ_IO HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9) // DHT11 GPIO??#define DLY_TIM_Handle (&htim2) // ?????/* Private variables ---------------------------------------------------------*//* Private typedef -----------------------------------------------------------*//* Private function prototypes -----------------------------------------------*/void DHT11(void);void DHT11_START(void);unsigned char DHT11_READ_BIT(void);unsigned char DHT11_READ_BYTE(void);unsigned char DHT11_READ_DATA(void);unsigned char DHT11_Check(void);static void DHT11_GPIO_MODE_SET(uint8_t mode);void Tims_delay_us(uint16_t nus);void delay_us(uint16_t nus);#endif5.2 RTC代码:void RTC_display()//RTC显示函数 /* Get the RTC current Time */ HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN); /* Get the RTC current Date */ HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);/* Display date Format : yy/mm/dd */OLED_ShowNum(0,0,2000+GetData.Year,4,16);//yearOLED_ShowStr(35,30,".",2);OLED_ShowNum(45,0,GetData.Month,2,16);//monthOLED_ShowStr(60,30,".",2);OLED_ShowNum(70,0,GetData.Date,2,16); //date /* Display time Format : hh:mm:ss */OLED_ShowNum(0,2,GetTime.Hours,2,16);//hourOLED_ShowStr(20,2,":",2);OLED_ShowNum(30,2,GetTime.Minutes,2,16);//minOLED_ShowStr(47,2,":",2);OLED_ShowNum(58,2,GetTime.Seconds,2,16);//seconds}5.3 OLED代码:

        篇幅有限如果大家不熟悉,这里推荐大家取看一下本人另一篇文章【强烈推荐】基于stm32的OLED各种显示实现(含动态图)_混分巨兽龙某某的博客-CSDN博客

5.4 main函数代码:  /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_I2C2_Init(); MX_RTC_Init(); MX_TIM2_Init(); /* USER CODE BEGIN 2 */ OLED_Init();OLED_CLS();HAL_Delay(1000); //★这里的延迟务必加上,这是为了等待DHT11信号稳定,一定要加!!! /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */RTC_display();//RTC显示函数DHT11();OLED_DrawGIF(75,2,127,8,36,370,BMP2); }六、项目效果

太空人RTC与温湿度DTH11显示

代码开源:

        链接:https://pan.baidu.com/s/192-91-wpF6vWSILJJerf2w 提取码:8uyc

        如果读者对本文有所疑问可以留言评论笔者看到会进行回复,如果本文对您有所帮助请您点个赞吧!!! 

本文链接地址:https://www.jiuchutong.com/zhishi/299594.html 转载请保留说明!

上一篇:《一文搞懂IoU发展历程》GIoU、DIoU、CIoU、EIoU、αIoU、SIoU

下一篇:关系代数(关系代数的五个基本操作)(关系代数关系运算)

  • 微博营销六大价值(微博营销的五个环节)

    微博营销六大价值(微博营销的五个环节)

  • 华为nova7 pro有防水功能吗(华为nova7pro有防蓝光吗)

    华为nova7 pro有防水功能吗(华为nova7pro有防蓝光吗)

  • 电脑QQ怎么看自己qq邮箱号码(电脑qq怎么看自己的q龄)

    电脑QQ怎么看自己qq邮箱号码(电脑qq怎么看自己的q龄)

  • 微信如何变回白色主题(怎么让微信变回白色)

    微信如何变回白色主题(怎么让微信变回白色)

  • 淘宝刷单降权多久恢复

    淘宝刷单降权多久恢复

  • 3dmax摄像机视角快捷键(3dmax摄像机视角怎么旋转)

    3dmax摄像机视角快捷键(3dmax摄像机视角怎么旋转)

  • 抖音怎么看私信(抖音怎么看私信对方是否看过)

    抖音怎么看私信(抖音怎么看私信对方是否看过)

  • 图片要怎么重命名(图片怎么重命名JPG)

    图片要怎么重命名(图片怎么重命名JPG)

  • 微店退款对店铺有影响吗(微店退款会发短信吗)

    微店退款对店铺有影响吗(微店退款会发短信吗)

  • qq转载别人照片别人会不会知道(qq转载别人照片能看到不)

    qq转载别人照片别人会不会知道(qq转载别人照片能看到不)

  • 手机声音小怎么变大oppo(手机声音小怎么清理)

    手机声音小怎么变大oppo(手机声音小怎么清理)

  • 收钱吧服务连接失败是什么意思(收钱吧连接wifi怎么解决)

    收钱吧服务连接失败是什么意思(收钱吧连接wifi怎么解决)

  • 对一台计算机来说什么的档次最重要(对一台计算机来说)

    对一台计算机来说什么的档次最重要(对一台计算机来说)

  • 为什么手机铃声设置成功了还是和以前一样(为什么手机铃声自己更换了)

    为什么手机铃声设置成功了还是和以前一样(为什么手机铃声自己更换了)

  • iphonex单卡还是双卡(iponex是单卡吗)

    iphonex单卡还是双卡(iponex是单卡吗)

  • 怎么卸载系统软件(如何卸载系统软件)

    怎么卸载系统软件(如何卸载系统软件)

  • 苹果手机有9和10吗(苹果9和10是什么型号)

    苹果手机有9和10吗(苹果9和10是什么型号)

  • 数据执行保护怎么关闭(数据执行保护怎么设置)

    数据执行保护怎么关闭(数据执行保护怎么设置)

  • 红米系统自带智能出行在哪(红米手机的智能助手在哪里)

    红米系统自带智能出行在哪(红米手机的智能助手在哪里)

  • 手机照相机故障是怎么回事(手机的照相机故障怎么办)

    手机照相机故障是怎么回事(手机的照相机故障怎么办)

  • iphone11搭载什么基带(苹果11用的是)

    iphone11搭载什么基带(苹果11用的是)

  • 苹果x和苹果11参数对比(苹果x和苹果11对比)

    苹果x和苹果11参数对比(苹果x和苹果11对比)

  • 三星s9有nfc功能吗(三星s9+nfc)

    三星s9有nfc功能吗(三星s9+nfc)

  • 手机怎么打彩色字体(手机怎么打彩色灯光)

    手机怎么打彩色字体(手机怎么打彩色灯光)

  • 抖音评论点赞有什么用(抖音评论点赞有收益吗)

    抖音评论点赞有什么用(抖音评论点赞有收益吗)

  • 苹果耳机怎么区分一代二代(苹果耳机怎么区分产地)

    苹果耳机怎么区分一代二代(苹果耳机怎么区分产地)

  • iphonexs使用攻略(iphonexs使用教程)

    iphonexs使用攻略(iphonexs使用教程)

  • 【CV大模型SAM(Segment-Anything)】真是太强大了,分割一切的SAM大模型使用方法:可通过不同的提示得到想要的分割目标(cvg模型)

    【CV大模型SAM(Segment-Anything)】真是太强大了,分割一切的SAM大模型使用方法:可通过不同的提示得到想要的分割目标(cvg模型)

  • 小规模缴纳企业所得税会计分录
  • 工程类工资表为哪些内容
  • 旅游业发票税率是多少
  • 中小企业免税证明
  • 名义股东转让股份侵权
  • 预收账款本期发生额怎么算
  • 一般纳税人注销库存需要补交税吗
  • 善意取得虚开专票的条件包括
  • 建设工程中税费如何承担
  • 给政府开发票如何处理?
  • 营改增后工程税收怎么计算
  • 定额发票使用年限规定
  • 土地增值税清算是什么意思
  • gdp等于消费加储蓄加税收
  • 专用发票过期了还能冲红发票吗
  • 定额发票2019年规定
  • 开发企业售楼处工作内容
  • 分支机构能否核定企业所得税
  • 抄报是不是在申报之后才能成功?
  • 营业外支出应填什么科目
  • 增值税减免税明细表
  • 企业注销个税怎样更正申报呢
  • 设置戴尔笔记本锁屏时间
  • 流氓软件怎么卸载?
  • vue中的...
  • 应如何做会计分录表
  • 平均应收账款是什么
  • PHP:xml_get_current_byte_index()的用法_XML解析器函数
  • 为什么Windows 7搜不到网
  • 主营业务收入发票
  • uefi和legacy的区别对显卡兼容
  • php 数组定义
  • 高新技术产业研究院有限公司
  • 为什么无线网密码对了就是连不上网
  • 最小的电脑是多少寸的
  • Honeybee flying over crocuses in the Tatra Mountains, Poland (© Mirek Kijewski/Getty Images)
  • 施工企业会计核算特点有哪些
  • php正则表达式匹配,返回原因
  • php url函数
  • 发票取得取得售卡方公司开具的增值税专用发票
  • js 字符串 中 字符位置
  • vuepress plugin
  • 缴税的会计处理
  • 企业购进商品支付货款时,实际发生现金折扣,应计入
  • 金税盘怎么写入发票
  • 新公司建账初始数据
  • 可以抵扣增值税进项税额的有哪些
  • SQL 联合查询与XML解析实例详解
  • mysql数据控制语句
  • 员工加班餐费算什么费用
  • 开具发票后,如发生销售退回,通常有的两种处理方式是?
  • 房屋预售收入
  • 企业股权转让收入会计处理
  • 餐饮行业加盟模式
  • 股权变更的股东个税缴纳
  • 投资者投入固定资产成本
  • 购买商品商家赠送怎么做分录
  • 发给客户的红包是什么费用
  • 主营业务收入增加计入借方还是贷方
  • 新税法实施后以前的条例规章作废吗
  • 本地发生住宿费怎么办
  • 进项税大于销项税需要交增值税吗
  • 汽车保险费能不能不交
  • mysql innode
  • ie11 ua
  • 催化剂过低怎么解决
  • server.exe是什么
  • xp显示缩略图
  • linux投屏快捷键
  • win8无法识别存档文件
  • wire软件下载
  • 如何在linux系统中卸载一个已装载的文件系统
  • cocos2dx官方教程
  • android如何导入文件
  • Time、Set、Smartdrv命令的使用方法
  • javascript:void(0)的作用示例介绍
  • js实现滑动开关功能
  • jquery input
  • python中的zip()函数详解
  • jquery 插件写法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设