当前位置: 首页 > news >正文

【TB作品】msp430f5529单片机,dht22,烟雾传感器

功能

//硬件:msp430f5529、dht22、LCD1602、蜂鸣器、烟雾传感器、蓝牙模块。
//功能:读取温湿度、烟雾浓度显示到屏幕;
//按键调节三个报警数值;
//温度、湿度、烟雾浓度,任意一个大于报警数值就蜂鸣器报警;
//单片机将温度、湿度、烟雾浓度,通过蓝牙模块,发送到电脑端显示。
//电脑端也可以调节三个报警数值。

引脚


//PCF8574 LCD1602----MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//SDA----------------P2.4
//SCL----------------P2.5//HC05 蓝牙----------MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//RX-----------------P3.3  T
//TX-----------------P3.4  R//PM2烟雾传感器 0~3.3v电压转为ppm单位 20~20000ppm
//DHT22--------------MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//DAT----------------P2.3//烟雾---------------MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//A0-----------------P6.5//蜂鸣器-------------MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//DAT----------------P1.6//按键----------------MSP430F5529
//KEY1----------------P1.2
//KEY2----------------P1.3
//KEY3----------------P1.4
//KEY4----------------P1.5
//GND-----------------GND//板子自己有的按键
//KEY5----------------P1.1
//KEY6----------------P2.1

部分程序


unsigned char get_key(void) //声明一个函数,返回值类型为 unsigned char,函数名为 get_key,参数列表为空
{unsigned char key; //声明一个名为 key 的无符号字符变量if ((P1IN & BIT2) == 0) //如果 P1IN 寄存器的第二位是 0,说明按键1被按下{delay_ms(10); //延时 10 毫秒,以确保读取的值稳定if ((P1IN & BIT2) == 0) //再次检测按键1是否被按下{key = 1; //将 key 设置为 1,表示按下了按键1while ((P1IN & BIT2) == 0)//等待按键1松开;}}else if ((P1IN & BIT3) == 0) //如果按键1未被按下,检测按键2是否被按下{delay_ms(10); //同样进行延时if ((P1IN & BIT3) == 0) //检测按键2是否被按下{key = 2; //将 key 设置为 2,表示按下了按键2while ((P1IN & BIT3) == 0)//等待按键2松开;}}else if ((P1IN & BIT4) == 0){delay_ms(10);if ((P1IN & BIT4) == 0){key = 3;while ((P1IN & BIT4) == 0);}}else if ((P1IN & BIT5) == 0){delay_ms(10);if ((P1IN & BIT5) == 0){key = 4;while ((P1IN & BIT5) == 0);}}else if ((P1IN & BIT1) == 0){delay_ms(10);if ((P1IN & BIT1) == 0){key = 5;while ((P1IN & BIT1) == 0);}}else if ((P2IN & BIT1) == 0){delay_ms(10);if ((P2IN & BIT1) == 0){key = 6;while ((P2IN & BIT1) == 0);}}else{key = 0;}return key;
}u8 data[5];
u16 shidu, wendu, yanwu;
u16 shidu_baojing = 900, wendu_baojing = 400, yanwu_baojing = 10000;
u8 disp[20];
u8 count = 0;
u8 timecnt = 0;
u8 keyvalue = 0;void disp_line1(void) // 定义名为disp_line1的函数
{count = 0; // 初始化计数器disp[count++] = wendu % 1000 / 100 + '0'; // 将温度百位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = wendu % 100 / 10 + '0'; // 将温度十位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = 'C'; // 存入字符'C',表示摄氏度,计数器+1disp[count++] = ' '; // 存入空格字符,计数器+1disp[count++] = shidu % 1000 / 100 + '0'; // 将湿度百位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = shidu % 100 / 10 + '0'; // 将湿度十位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = '%'; // 存入字符'%',表示百分比符号,计数器+1disp[count++] = ' '; // 存入空格字符,计数器+1disp[count++] = yanwu % 100000 / 10000 + '0'; // 将烟雾万位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = yanwu % 10000 / 1000 + '0'; // 将烟雾千位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = yanwu % 1000 / 100 + '0'; // 将烟雾百位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = yanwu % 100 / 10 + '0'; // 将烟雾十位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = yanwu % 10 + '0'; // 将烟雾个位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = 'p'; // 存入字符'p',表示“ppm”(parts per million),计数器+1disp[count++] = 0; // 存入字符'\0',表示字符串结束,计数器+1LCD_write_str(0, 0, disp); // 在LCD屏幕第0行显示disp数组中的内容
}void send_computer(void)
{count = 0;disp[count++] = wendu % 1000 / 100 + '0';disp[count++] = wendu % 100 / 10 + '0';disp[count++] = 'C';disp[count++] = ' ';disp[count++] = shidu % 1000 / 100 + '0';disp[count++] = shidu % 100 / 10 + '0';disp[count++] = '%';disp[count++] = ' ';disp[count++] = yanwu % 100000 / 10000 + '0';disp[count++] = yanwu % 10000 / 1000 + '0';disp[count++] = yanwu % 1000 / 100 + '0';disp[count++] = yanwu % 100 / 10 + '0';disp[count++] = yanwu % 10 + '0';disp[count++] = 'p';disp[count++] = '\r';disp[count++] = '\n';disp[count++] = 0;Print_Str(disp);
}void disp_line2(void)
{count = 0; //计数器清零//显示湿度报警值的百位、十位disp[count++] = shidu_baojing % 1000 / 100 + '0';disp[count++] = shidu_baojing % 100 / 10 + '0';disp[count++] = 'C'; //显示'C'disp[count++] = ' '; //显示空格//显示温度报警值的百位、十位disp[count++] = wendu_baojing % 1000 / 100 + '0';disp[count++] = wendu_baojing % 100 / 10 + '0';disp[count++] = '%'; //显示'%'disp[count++] = ' '; //显示空格//显示烟雾报警值的万位、千位、百位、十位、个位disp[count++] = yanwu_baojing % 100000 / 10000 + '0';disp[count++] = yanwu_baojing % 10000 / 1000 + '0';disp[count++] = yanwu_baojing % 1000 / 100 + '0';disp[count++] = yanwu_baojing % 100 / 10 + '0';disp[count++] = yanwu_baojing % 10 + '0';disp[count++] = 'p'; //显示'p'disp[count++] = 0; //末尾字符为0//在LCD的第1行第0列显示字符串dispLCD_write_str(0, 1, disp);
}void deal_key(void)
{// 定义一个函数deal_key,没有返回值,没有参数if (keyvalue == 1){// 如果keyvalue的值为1shidu_baojing += 10;// 湿度报警值加10if (shidu_baojing > 900){// 如果湿度报警值大于900shidu_baojing = 900;// 把湿度报警值设为900}}else if (keyvalue == 2){// 否则,如果keyvalue的值为2shidu_baojing -= 10;// 湿度报警值减10if (shidu_baojing < 100){// 如果湿度报警值小于100shidu_baojing = 100;// 把湿度报警值设为100}}else if (keyvalue == 3){// 否则,如果keyvalue的值为3wendu_baojing += 10;// 温度报警值加10if (wendu_baojing > 900){// 如果温度报警值大于900wendu_baojing = 900;// 把温度报警值设为900}}else if (keyvalue == 4){// 否则,如果keyvalue的值为4wendu_baojing -= 10;// 温度报警值减10if (wendu_baojing < 100){// 如果温度报警值小于100wendu_baojing = 100;// 把温度报警值设为100}}else if (keyvalue == 5){// 否则,如果keyvalue的值为5yanwu_baojing += 100;// 烟雾报警值加100if (yanwu_baojing > 20000){// 如果烟雾报警值大于20000yanwu_baojing = 20000;// 把烟雾报警值设为20000}}else if (keyvalue == 6){// 否则,如果keyvalue的值为6yanwu_baojing -= 100;// 烟雾报警值减100if (yanwu_baojing < 200){// 如果烟雾报警值大于200yanwu_baojing = 200;// 把烟雾报警值设为200}}
}void contorl_beep(void) // 定义一个名为 contorl_beep 的函数
{if ((shidu > shidu_baojing) || (wendu > wendu_baojing) // 如果湿度、温度或烟雾任意一个超过了警戒值|| (yanwu > yanwu_baojing)){P1OUT &= ~BIT6; // 将 P1OUT 寄存器的第 6 位设置为 0,表示开启蜂鸣器}else // 如果湿度、温度和烟雾都没有超过警戒值{P1OUT |= BIT6; // 将 P1OUT 寄存器的第 6 位设置为 1,表示关闭开启蜂鸣器}
}/* 烟雾浓度换算 */
static unsigned int  yw_ppm_count(unsigned int x1)
{float a =0 ,b = 0,c = 0,d = 0;float ax =0 ,bx = 0,cx = 0,dx = 0;float y;float x;x=x1*3.3/4096;a = x * x * x * x * x;b = x * x * x * x;c = x * x * x;d = x * x ;ax = 0.0001923 * a;bx = 0.006017 * b;cx = 0.07267 * c;dx = 0.425 * d;y = ax - bx + cx - dx + (1.267 * x) + 1.209;y = y * 1000;return (unsigned int)y;
}void main(void)
{WDTCTL = WDTPW + WDTHOLD;                 // 停止看门狗定时器init_clock();                             // 初始化时钟init_uart();                              // 初始化UART串口init_adc();                               // 初始化ADC模块init_key();                               // 初始化按键init_beep();                              // 初始化蜂鸣器while (DHT22_Init() == 1)                 // 初始化DHT22温湿度传感器{delay_ms(100);                        // 延时100毫秒}delay_ms(1000);LCD_Init();                               // 初始化液晶屏disp_line2();                             // 在液晶屏上显示第二行_EINT();                                  // 开启总中断while (1)                                 // 无限循环{delay_ms(10);                         // 延时10毫秒timecnt++;                            // 时间计数器加1if (timecnt > 200)                    // 如果时间计数器超过200{timecnt = 0;                      // 重置时间计数器DHT22_Read_Data(data);            // 读取DHT22传感器数据shidu = data[0];                  // 湿度数据shidu = (shidu << 8) + data[1];   // 拼接数据wendu = data[2];                  // 温度数据wendu = (wendu << 8) + data[3];   // 拼接数据yanwu = get_adc();                // 获取烟雾浓度值//0到4096转为0到20000ppmyanwu = yw_ppm_count(yanwu);             // 将ADC值转换为烟雾浓度值contorl_beep();                    // 控制蜂鸣器disp_line1();                      // 在液晶屏上显示第一行disp_line2();                      // 在液晶屏上显示第二行send_computer();}keyvalue = get_key();                 // 获取按键值if (keyvalue)                         // 如果有按键按下{deal_key();                       // 处理按键disp_line2();                     // 在液晶屏上显示第二行}}
}unsigned char revchar = 0;                      // 定义一个无符号字符变量,初始值为0,用于保存接收到的字符
unsigned char revchar_openflag = 0;       // 定义一个无符号字符变量,初始值为0,用于标志接收到的字符是否为有效数据
unsigned char revchar_cnt = 0;               // 定义一个无符号字符变量,初始值为0,用于计数接收到的有效数据个数
unsigned char revchar_buffer[20];              // 定义一个无符号字符数组,长度为20,用于存储接收到的有效数据#pragma vector=USCI_A0_VECTOR                   // 定义中断函数,当 USCI_A0_VECTOR 中断发生时,执行以下函数
__interrupt void USCI_A0_ISR(void)
{switch (__even_in_range(UCA0IV, 4))// 获取 USCI_A0_VECTOR 中断的状态{case 0:                                     // Vector 0 - no interrupt,无中断状态break;case 2:                                     // Vector 2 - RXIFG,接收到数据的中断状态revchar = UCA0RXBUF;            // 读取 USCI_A0_VECTOR 的接收缓冲区数据到变量 revcharif (revchar_openflag)                   // 如果接收到的字符是有效数据{//S889912345                        // 检查接收到的数据是否符合特定的格式,如S889912345if ((revchar >= '0') && (revchar <= '9'))  // 如果接收到的数据是数字字符{revchar_buffer[revchar_cnt] = revchar - '0'; // 把接收到的数字字符转化为对应的数字存入 revchar_buffer 数组中revchar_cnt++;                              // 计数器加1if (revchar_cnt >= 9)                     // 如果接收到的数字字符数量达到特定的数量{shidu_baojing = revchar_buffer[0] * 100+ revchar_buffer[1] * 10;  // 计算湿度报警值wendu_baojing = revchar_buffer[2] * 100+ revchar_buffer[3] * 10;  // 计算温度报警值yanwu_baojing = revchar_buffer[4] * 10000+ revchar_buffer[5] * 1000 + revchar_buffer[6] * 100+ revchar_buffer[7] * 10 + revchar_buffer[8]; // 计算烟雾报警值revchar_openflag = 0;               // 清除接收标志revchar_cnt = 0;                    // 清除计数器}}else                                    // 如果接收到的字符不是数字字符{revchar_openflag = 0;               // 清除接收标志revchar_cnt = 0;                    // 清除计数器}}if (revchar == 'S'){revchar_openflag = 1;revchar_cnt = 0;}break;case 4:break;                             // Vector 4 - TXIFGdefault:break;}
}

全部程序

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

相关文章:

【TB作品】msp430f5529单片机,dht22,烟雾传感器

功能 //硬件&#xff1a;msp430f5529、dht22、LCD1602、蜂鸣器、烟雾传感器、蓝牙模块。 //功能&#xff1a;读取温湿度、烟雾浓度显示到屏幕&#xff1b; //按键调节三个报警数值&#xff1b; //温度、湿度、烟雾浓度&#xff0c;任意一个大于报警数值就蜂鸣器报警&#xff1…...

uni-app全局弹窗的实现方案

背景 为了解决uni-app 任意位置出现弹窗 解决方案 一、最初方案 受限于uni-app 调用组件需要每个页面都引入注册才可以使用&#xff0c;此方案繁琐&#xff0c;每个页面都要写侵入性比较强 二、改进方案 app端&#xff1a;新建一个页面进行跳转&#xff0c;可以实现伪弹窗…...

Love-Yi情侣网站3.0存在SQL注入漏洞

目录 1. 前言 2. 网站简介 3. 寻找特征点 3.1 第一次尝试 3.2 第二次尝试 4.资产搜索 5.漏洞复现 5.1 寻找漏洞点 5.2 进行进一步测试 5.2.1 手动测试 1.寻找字段 2.寻找回显位 3.查询当前用户 5.2.2 sqlmap去跑 6.总结 1. 前言 朋友说自己建了一个情侣网站,看到…...

自然语言处理(NLP)—— 神经网络语言处理

1. 总体原则 1.1 深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程 下图展示了自然语言处理&#xff08;NLP&#xff09;领域内使用的深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程的简化图。 在神经网络的NLP领域&#xff1a; 语料…...

SHA256计算原理

标签: SHA256计算原理;SHA256;SHA-2; SHA-256计算原理 SHA-256(Secure Hash Algorithm 256-bit)是SHA-2系列中的一种哈希算法,它由美国国家安全局(NSA)设计,并由美国国家标准与技术研究院(NIST)发布。SHA-256主要用于数据完整性验证和数字签名等领域。以下是SHA-…...

Mysql | select语句导入csv后再导入excel表格

需求 从mysql数据库中导出数据到excel 解决方案 sql导出csv文件 sql SELECT col1,col2 FROM tab_01 WHERE col3 xxx INTO OUTFILE /tmp/result.csv FIELDS TERMINATED BY , ENCLOSED BY " LINES TERMINATED BY \n;csv文件导出excel文件 1、【数据】-【导入数据】 …...

SpringBoot:手动创建应用

Spring提供了在线的Spring Initialzr在线创建Spring Boot项目&#xff0c;为了更好的理解Spring Boot项目&#xff0c;这里我们选择手动创建。 1.新建Web应用 1.1 生成工程 首先要做是创建一个Java项目&#xff0c;这里我们选择使用Maven来支持&#xff0c;使用archetype:ge…...

【LeetCode】39.组合总和

组合总和 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个…...

用JS来控制遥控车(一行代码即可连接, 超简单!)

简介 有些时候我们想要做车辆的某一个功能&#xff0c;但是又不想浪费时间做整辆小车时&#xff0c;一般会去买一辆差不多的遥控车来改&#xff0c;但是那也比较麻烦&#xff0c;市面上好像也没有便宜的直接提供编程接口的遥控车。所以就自己做一个吧~。 主要是要实现向外提供…...

MyBatis-Plus如何优雅的配置多租户及分页

MyBatis-Plus如何优雅的配置多租户及分页 一、配置多租户1、步骤一2、步骤二3、步骤三步骤四 二、配置分页1、步骤一2、步骤二3、步骤三 一、配置多租户 TenantLineInnerInterceptor 是 MyBatis-Plus 提供的一个插件&#xff0c;用于实现多租户的数据隔离。通过这个插件&#…...

国产操作系统上Vim的详解01--vim基础篇 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上Vim的详解01–vim基础篇 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在国产操作系统上使用Vim的详解文章。Vim是一款功能强大且高度可定制的文本编辑器&#xff0c;广泛应用于编程和日常文本编辑中。…...

如何正确理解事件溯源架构模式?

在微服务架构盛行的当下&#xff0c;DDD&#xff08;领域驱动设计&#xff09;也得到了崭新的发展。同时&#xff0c;随着DDD的不断发展&#xff0c;也诞生了一些新的设计思想和开发模式&#xff0c;今天要介绍的事件溯源是其中具有代表性的一种模式。 事件溯源模式是DDD领域中…...

【漏洞复现】电信网关配置管理系统 rewrite.php 文件上传漏洞

0x01 产品简介 中国电信集团有限公司(英文名称"China Telecom”、简称“"中国电信”)成立于2000年9月&#xff0c;是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员…...

线性调整率:LINE REGULATION详解

目录 一、概述 二、 举例 一、概述 LDO&#xff08;低压差线性稳压器&#xff09;的LINE REGULATION&#xff08;线路调整或线性调整&#xff09;参数是一个衡量稳压器输出稳定性的重要指标。它反映了LDO输出电压对输入电压变化的响应程度。 当输入电压在其规定的工作范围内变…...

Workfine默认首页功能详解

一、基本介绍 Workfine V6.3推出了默认的用户首页功能&#xff0c;这样用户在登入系统后就可以通过默认的首页栏进行一些业务操作。第一版的用户首页功能布局了审批&#xff0c;制单&#xff0c;业务导航&#xff0c;便捷入口&#xff0c;消息和预警六大块内容&#xff0c;后续…...

CSAPP Lab07——Malloc Lab完成思路

等不到天黑 烟火不会太完美 回忆烧成灰 还是等不到结尾 ——她说 完整代码见&#xff1a;CSAPP/malloclab-handout at main SnowLegend-star/CSAPP (github.com) Malloc Lab 按照惯例&#xff0c;我先是上来就把mm.c编译了一番&#xff0c;结果产生如下报错。搜索过后看样子应…...

简单、免费、无广告的高性能多线程文件下载工具

一、简介 1、它是一款免费、无广告的高性能多线程文件下载工具。它界面简洁&#xff0c;简单好用&#xff0c;压缩包大小仅有 0.7MB&#xff0c;目前仅支持 Windows 平台。 2、使用方法&#xff1a;点击程序左上角的【】按钮&#xff0c;将需要的链接输入进去后点击【下载】即…...

【退役之重学 SQL】什么是笛卡尔积

一、初识笛卡尔积 概念&#xff1a; 笛卡尔积是指在关系型数据库中&#xff0c;两个表进行 join 操作时&#xff0c;没有指定任何条件&#xff0c;导致生成的结果集&#xff0c;是两个表中所有行的组合。 简单来说&#xff1a; 笛卡尔积是两个表的乘积&#xff0c;结果集中的每…...

Vue3禁止 H5 界面放大与缩小功能

Vue3禁止 H5 界面放大与缩小功能 一、前言1.第一步2.第二部3.总结 一、前言 当涉及到禁止 H5 界面的放大与缩小功能时&#xff0c;Vue 3 提供了一种方便的方式来处理。我们可以使用 <script setup> 语法&#xff0c;将相关代码添加到 App.vue 组件中&#xff0c;以确保在…...

上位机图像处理和嵌入式模块部署(f407 mcu中tf卡读写和fatfs挂载)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很早之前&#xff0c;个人对tf卡并不是很重视&#xff0c;觉得它就是一个存储工具而已。后来在移植v3s芯片的时候&#xff0c;才发现很多的soc其实…...

汽车识别项目

窗口设计 这里的代码放在py文件最前面或者最后面都无所谓 # 创建主窗口 window tk.Tk() window.title("图像目标检测系统") window.geometry(1000x650) # 设置窗口大小# 创建背景画布并使用grid布局管理器 canvas_background tk.Canvas(window, width1000, height…...

【面试题-012】什么是Spring 它有哪些优势

文章目录 Spring有哪些优势有哪些优势Spring和Springboot区别在 Spring 框架中&#xff0c;什么是AOP核心概念应用场景 Spring有哪些通知类型 Spring 是一个开源的 Java 平台&#xff0c;由 Rod Johnson 创建&#xff0c;用于简化企业级 Java 应用程序的开发。它于 2003 年首次…...

ImageButton src图片会照成内存泄露吗 会使native内存增加吗?

在Android开发中&#xff0c;ImageButton 是用来显示按钮的视图组件&#xff0c;它通常用于显示图标或图片。对于ImageButton使用的src属性&#xff08;即按钮上的图片&#xff09;通常不会导致内存泄漏&#xff0c;但是有几种情况可能会导致内存问题&#xff1a; 1. **不正确…...

负载均衡与容错性:集群模式在分布式系统中的应用

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米,一个热爱分享技术的29岁程序员。今天我们来聊一聊分布式系统中的一个重要概念:集群(Cluster)模式。相信很多朋友在日常开发…...

【UE5.1 角色练习】09-物体抬升、抛出技能 - part1

前言 在上一篇&#xff08;【UE5.1 角色练习】08-传送技能&#xff09;的基础上继续实现控制物体抬升、抛出的功能。 效果 步骤 一、准备技能动画 1. 在项目设置中新建一个操作映射&#xff0c;这里命名为“Skill_GravityControl”&#xff0c;用按键4触发 2. 通过IK重定向…...

最大的游戏交流社区Steam服务器意外宕机 玩家服务受影响

易采游戏网6月3日消息&#xff1a;众多Steam游戏玩家报告称&#xff0c;他们无法访问Steam平台上的个人资料、好友列表和社区市场等服务。同时&#xff0c;社区的讨论功能也无法正常使用。经过第三方网站SteamDB的确认&#xff0c;&#xff0c;这一现象是由于Steam社区服务器突…...

如何手动批准内核扩展 Tuxera NTFS for mac内核扩展需要批准 内核扩展怎么打开

在了解如何手动批准内核扩展之前&#xff0c;我们应该先了解什么叫做内核扩展。内核扩展又被称为KEXT&#xff0c;通过它可以实现macOS系统与软件组件之间的交互&#xff0c;例如磁盘管理、任务管理和内存管理等等。 kext 是内核扩展&#xff08;Kernel Extension&#xff09;…...

ffmpeg常用命令

推流 ffmpeg -re -stream_loop -1 -i in.flv -c copy -f flv outurl 推流追加时间戳 ffmpeg -stream_loop -1 -re -i move.flv -vf "settbAVTB,setptstrunc(PTS/1K)*1Kst(1,trunc(RTCTIME/1K))-1K*trunc(ld(1)/1K),drawtextfontfilearial.ttf:text%{localtime}.%{eif\:…...

在MongoDB中,您可以通过以下步骤来创建账号密码,并限制其在特定数据库上的访问权限

在MongoDB中&#xff0c;您可以通过以下步骤来创建账号密码&#xff0c;并限制其在特定数据库上的访问权限&#xff1a; 连接到MongoDB数据库&#xff1a; 使用MongoDB的客户端&#xff08;如mongo shell或者MongoDB Compass&#xff09;连接到MongoDB服务器。 切换到admin数…...

前端JS必用工具【js-tool-big-box】学习,检测密码强度

js-tool-big-box 前端工具库&#xff0c;实用的公共方法越来越多了&#xff0c;这一小节&#xff0c;我们带来的是检测密码强度。 我们在日常开发中&#xff0c;为了便于测试&#xff0c;自己总是想一个简单的密码&#xff0c;赶紧输入。但到了正式环境&#xff0c;我们都应该…...