技术支持::天空网络-临汾做网站网站解析需要什么

news/2025/9/28 10:47:10/文章来源:
技术支持::天空网络-临汾做网站,网站解析需要什么,设计师一般放作品的网站,怎样做wordpress模板“智能检测#xff0c;精准把控。温湿度检测系统#xff0c;为您的生活带来全方位的健康保障。”#非标协议项目【上】 前言预备知识1温湿度检测系统需求2.代码整合2.1找到编程实现LCD1602显示一行工程#xff0c;打开代码文件#xff0c;将所需的LCD1602驱动代码拷贝到温湿… “智能检测精准把控。温湿度检测系统为您的生活带来全方位的健康保障。”#非标协议项目【上】 前言预备知识1温湿度检测系统需求2.代码整合2.1找到编程实现LCD1602显示一行工程打开代码文件将所需的LCD1602驱动代码拷贝到温湿度检测系统_1602显示串口发送工程内。2.2找到串口编程03_PC发送指令控制LED工程打开代码文件将所需的LCD1602驱动代码拷贝到温湿度检测系统_1602显示串口发送工程内。2.3找到温湿度通过串口传到PC显示工程打开代码文件将所需的LCD1602驱动代码拷贝到温湿度检测系统_1602显示串口发送工程内。 3.构造DHT11温湿度数据处理函数3.1定义存放温度的字符数组和存放湿度的字符数组3.2在DHT11温湿度数据处理函数内将温湿度数据存入相应字符数组。 4.主函数调用API顺序4.1延时1秒稳定系统4.2初始化串口4.3初始化LCD16024.4延时2秒稳定DHT11模块4.5在while(1)死循环内调用延时一秒函数实现每隔1秒刷新温湿度数据4.6在while(1)死循环内调用读取DHT11温湿度函数4.7在while(1)死循环内调用DHT11温湿度数据处理函数4.8在while(1)死循环内多次调用发送字符串函数实现向PC发送温湿度数据4.9在while(1)死循环内多次调用LCD1602显示一行字符函数实现在LCD1602上显示温湿度数据 5.完整工程代码6项目运行结果结束语 前言 本篇博文介绍的是用51单片机的非标准写协议项目温湿度检测系统【上】包含温湿度检测系统需求代码整合构造DHT11温湿度数据处理函数主函数调用API顺序完整工程代码项目运行结果。看到这篇博文的朋友可以先赞再看吗 预备知识 一、基本电路标识识别和接线例如VCC,GND。   二、电脑基本操作复制粘贴   三、C变量   四、基本输入输出   五、流程控制   六、函数   七、指针   八字符串 如果以上知识不清楚请自行学习后再来浏览。如果我有没例出的请在评论区写一下。谢谢啦 1温湿度检测系统需求 能够实时通过51单片机串口发送温湿度信息能够实时通过51单片机驱动LCD1602显示温湿度信息 2.代码整合 2.1找到编程实现LCD1602显示一行工程打开代码文件将所需的LCD1602驱动代码拷贝到温湿度检测系统_1602显示串口发送工程内。 LCD1602 IO口定义代码 //数据线定义 //D0到D7 -- P0.1到P0.7 #define dataBuffer P0//控制线定义 /* RS--P1.0 RW--P1.1 EN--P1.4 */ sbit RS P1^0; sbit RW P1^1; sbit EN P1^4;LCD1602初始化必要延时代码 void Delay15ms() //11.0592MHz {unsigned char i, j;i 27;j 226;do{while (--j);} while (--i); }void Delay5ms() //11.0592MHz {unsigned char i, j;i 9;j 244;do{while (--j);} while (--i); }检测LCD1602忙代码 void checkBusy() {char tmp 0x80;dataBuffer 0x80;while(tmp 0x80) //只要dataBuffer中的第8位为1就为忙因为BF为忙标志位高电平表示忙此时模块不能接收命令或者数据如果为低电平表示不忙。{RS 0; //根据手册中指令表可知RS0RW1RW 1; //RW1为读的操作所以需要配置读的时序图EN 0; //根据手册中的写时序图EN开始为低电平_nop_(); //执行空函数等待EN拉高EN 1; //根据手册中的读时序图EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();tmp dataBuffer; //读取dataBuffer中的忙信号EN 0; //根据手册中的写时序图EN被拉低_nop_(); //根据手册中的写时序图让EN保持一段时间的低电平} }向LCD1602写地址也就是指令代码和写数据代码 void writeCmd(char cmd) { checkBusy(); //检测忙信号RS 0; //RS等于零是写指令操作RW 0; //RW在手册中写的时序图是可以全程低电平EN 0; //根据手册中的写时序图EN开始为低电平_nop_(); //执行空函数等待EN拉高dataBuffer cmd; //根据手册中的写时序图数据在EN还在低电平时就建立数据EN 1; //根据手册中的写时序图EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();EN 0; //根据手册中的写时序图EN被拉低_nop_(); //根据手册中的写时序图让EN保持一段时间的低电平 }void weiteData(char cData) {checkBusy(); //检测忙信号RS 1; //RS等于1是写数据操作RW 0; //RW在手册中写的时序图是可以全程低电平EN 0; //根据手册中的写时序图EN开始为低电平_nop_(); //执行空函数等待EN拉高dataBuffer cData; //根据手册中的写时序图数据在EN还在低电平时就建立数据EN 1; //根据手册中的写时序图EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();EN 0; //根据手册中的写时序图EN被拉低_nop_(); //根据手册中的写时序图让EN保持一段时间的低电平 }初始化LCD1602代码 void initLCD1602() { //1 延时 15msDelay15ms(); //2 写指令 38H(不检测忙信号)writeCmd(0x38); //3 延时 5msDelay5ms(); //4 以后每次写指令读/写数据操作均需要检测忙信号 //5 写指令 38H显示模式设置writeCmd(0x38); //6 写指令 08H显示关闭writeCmd(0x08); //7 写指令 01H显示清屏writeCmd(0x01); //8 写指令 06H显示光标移动设置writeCmd(0x06); //9 写指令 0CH显示开及光标设置writeCmd(0x0C); }让LCD1602显示一行字符的代码 void LCD1602ShowARow(char line,char column,char *str) {switch(line) //选择哪行显示{case 1: //第一行显示writeCmd(0x80 column); //选择哪个位置显示因为位置地址的最高位必须为1所以0x80列数while(*str) //判断字符串指针变量不为空执行循环不用判断字符串结束标志{weiteData(*str); //发送字符串单个字符str; //字符串指针变量偏移}break;case 2: //第二行显示writeCmd(0x80 0x40 column); //选择哪个位置显示因为位置地址的最高位必须为1所以0x80列数又因为第二行的列从0x40开始while(*str) //所以是从0x80 0x40 列数特别注意{ weiteData(*str);str;}break;} }最后将以上代码整合到温湿度检测系统_1602显示串口发送工程内。 2.2找到串口编程03_PC发送指令控制LED工程打开代码文件将所需的LCD1602驱动代码拷贝到温湿度检测系统_1602显示串口发送工程内。 串口初识化代码 void UartInit(void) //自己配 {//配置串口工作方式为方式1从只收不发改为能收能发SCON 0x50;//配置辅助寄存器减少电磁辐射稳定晶振频率 AUXR 0x01;//设置定时器工作方式为定时器1的8位自动重装TMOD 0x0F;TMOD | 0x20;//设置串口波特率为9600,0误差TH1 0xFD;TL1 0xFD;//打开定时器1TR1 1; }发送字节和发送字符串代码 void sendByte(char data_mas) {SBUF data_mas;while(!TI);TI 0; //一定要软件置零不然会出现乱序 }void sendString(char *str) {while(*str ! \0){sendByte(*str);str;} }2.3找到温湿度通过串口传到PC显示工程打开代码文件将所需的LCD1602驱动代码拷贝到温湿度检测系统_1602显示串口发送工程内。 存放温湿度数据代码 char THdata[5]; //存放温湿度数据变量打开DHT11高速模式和读取DHT11温湿度数据必要延时代码 void Delay30ms() //11.0592MHz {unsigned char i, j; i 54;j 199;do{while (--j);} while (--i); }void Delay40us() //11.0592MHz {unsigned char i;_nop_();i 15;while (--i); }打开DHT11高速模式代码 void startDHT() {Data 1;Data 0;//至少延时18ms那么延时30msDelay30ms();Data 1;//检测d点while(Data);//检测e点while(!Data);//检测f点while(Data); }读取DHT11温湿度数据代码 void readDHTData() {char i; //轮次char j; //次数char flag;char tmp;//打开DHT11高速模式startDHT();for(i0; i5; i){for(j0; j8; j){//检测G点while(!Data);//根据传送1和0的时间不同0是26us1是70us。等待60us后如果Data 1,就传1Data 0;就传0//Delay60us(); 延时60微妙太长了可能在读0时读到下一个发送序列了延时40微妙Delay40us();if(Data 1){flag 1;while(Data); //传1的时间比较久所以要等传1结束}else{flag 0;}tmp tmp 1;tmp | flag;}THdata[i] tmp;} }3.构造DHT11温湿度数据处理函数 3.1定义存放温度的字符数组和存放湿度的字符数组 char Temperature[9]; //定义温度字符数组 char Humidness[9]; //定义湿度字符数组3.2在DHT11温湿度数据处理函数内将温湿度数据存入相应字符数组。 void THDataHandler() {//湿度数据处理Humidness[0] H;Humidness[1] :;Humidness[2] THdata[0]/10 0x30;Humidness[3] THdata[0]%10 0x30;Humidness[4] .;Humidness[5] THdata[1]/10 0x30;Humidness[6] THdata[1]%10 0x30;Humidness[7] %;Humidness[8] \0;//温度处理Temperature[0] T;Temperature[1] :;Temperature[2] THdata[2]/10 0x30;Temperature[3] THdata[2]%10 0x30;Temperature[4] .;Temperature[5] THdata[3]/10 0x30;Temperature[6] THdata[3]%10 0x30;Temperature[7] C;Temperature[8] \0; }4.主函数调用API顺序 4.1延时1秒稳定系统 Delay1000ms();4.2初始化串口 UartInit();4.3初始化LCD1602 initLCD1602();4.4延时2秒稳定DHT11模块 Delay1000ms(); //等待DHT模块稳定 Delay1000ms();4.5在while(1)死循环内调用延时一秒函数实现每隔1秒刷新温湿度数据 Delay1000ms();4.6在while(1)死循环内调用读取DHT11温湿度函数 readDHTData();4.7在while(1)死循环内调用DHT11温湿度数据处理函数 THDataHandler();4.8在while(1)死循环内多次调用发送字符串函数实现向PC发送温湿度数据 //通过串口发送温湿度数据 sendString(Humidness); sendString(\r\n); sendString(Temperature); sendString(\r\n); sendString(\r\n);4.9在while(1)死循环内多次调用LCD1602显示一行字符函数实现在LCD1602上显示温湿度数据 LCD1602ShowARow(1,4,Humidness); LCD1602ShowARow(2,4,Temperature);5.完整工程代码 #include reg52.h #include intrins.h//数据线定义 //D0到D7 -- P0.1到P0.7 #define dataBuffer P0sbit LED1 P3^7; //用尾定义声明LED1 sbit Data P3^3; //把DHT11接在单片机的P1.0口 sfr AUXR 0x8e; //声明AUXR寄存器地址//控制线定义 /* RS--P1.0 RW--P1.1 EN--P1.4 */ sbit RS P1^0; sbit RW P1^1; sbit EN P1^4;char THdata[5]; //存放温湿度数据变量 char Temperature[9]; //定义温度字符数组 char Humidness[9]; //定义湿度字符数组void Delay15ms() //11.0592MHz {unsigned char i, j;i 27;j 226;do{while (--j);} while (--i); }void Delay5ms() //11.0592MHz {unsigned char i, j;i 9;j 244;do{while (--j);} while (--i); }void Delay30ms() //11.0592MHz {unsigned char i, j; i 54;j 199;do{while (--j);} while (--i); }void Delay40us() //11.0592MHz {unsigned char i;_nop_();i 15;while (--i); }void Delay1000ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 8;j 1;k 243;do{do{while (--k);} while (--j);} while (--i); }void checkBusy() {char tmp 0x80;dataBuffer 0x80;while(tmp 0x80) //只要dataBuffer中的第8位为1就为忙因为BF为忙标志位高电平表示忙此时模块不能接收命令或者数据如果为低电平表示不忙。{RS 0; //根据手册中指令表可知RS0RW1RW 1; //RW1为读的操作所以需要配置读的时序图EN 0; //根据手册中的写时序图EN开始为低电平_nop_(); //执行空函数等待EN拉高EN 1; //根据手册中的读时序图EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();tmp dataBuffer; //读取dataBuffer中的忙信号EN 0; //根据手册中的写时序图EN被拉低_nop_(); //根据手册中的写时序图让EN保持一段时间的低电平} }void writeCmd(char cmd) { checkBusy(); //检测忙信号RS 0; //RS等于零是写指令操作RW 0; //RW在手册中写的时序图是可以全程低电平EN 0; //根据手册中的写时序图EN开始为低电平_nop_(); //执行空函数等待EN拉高dataBuffer cmd; //根据手册中的写时序图数据在EN还在低电平时就建立数据EN 1; //根据手册中的写时序图EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();EN 0; //根据手册中的写时序图EN被拉低_nop_(); //根据手册中的写时序图让EN保持一段时间的低电平 }void weiteData(char cData) {checkBusy(); //检测忙信号RS 1; //RS等于1是写数据操作RW 0; //RW在手册中写的时序图是可以全程低电平EN 0; //根据手册中的写时序图EN开始为低电平_nop_(); //执行空函数等待EN拉高dataBuffer cData; //根据手册中的写时序图数据在EN还在低电平时就建立数据EN 1; //根据手册中的写时序图EN被拉高_nop_(); //执行空函数等待tpw和tF高电平过程_nop_();EN 0; //根据手册中的写时序图EN被拉低_nop_(); //根据手册中的写时序图让EN保持一段时间的低电平 }void initLCD1602() { //1 延时 15msDelay15ms(); //2 写指令 38H(不检测忙信号)writeCmd(0x38); //3 延时 5msDelay5ms(); //4 以后每次写指令读/写数据操作均需要检测忙信号 //5 写指令 38H显示模式设置writeCmd(0x38); //6 写指令 08H显示关闭writeCmd(0x08); //7 写指令 01H显示清屏writeCmd(0x01); //8 写指令 06H显示光标移动设置writeCmd(0x06); //9 写指令 0CH显示开及光标设置writeCmd(0x0C); }void UartInit(void) //自己配 {//配置串口工作方式为方式1从只收不发改为能收能发SCON 0x50;//配置辅助寄存器减少电磁辐射稳定晶振频率 AUXR 0x01;//设置定时器工作方式为定时器1的8位自动重装TMOD 0x0F;TMOD | 0x20;//设置串口波特率为9600,0误差TH1 0xFD;TL1 0xFD;//打开定时器1TR1 1; }void sendByte(char data_mas) {SBUF data_mas;while(!TI);TI 0; //一定要软件置零不然会出现乱序 }void sendString(char *str) {while(*str ! \0){sendByte(*str);str;} }void startDHT() {Data 1;Data 0;//至少延时18ms那么延时30msDelay30ms();Data 1;//检测d点while(Data);//检测e点while(!Data);//检测f点while(Data); }void LCD1602ShowARow(char line,char column,char *str) {switch(line) //选择哪行显示{case 1: //第一行显示writeCmd(0x80 column); //选择哪个位置显示因为位置地址的最高位必须为1所以0x80列数while(*str) //判断字符串指针变量不为空执行循环不用判断字符串结束标志{weiteData(*str); //发送字符串单个字符str; //字符串指针变量偏移}break;case 2: //第二行显示writeCmd(0x80 0x40 column); //选择哪个位置显示因为位置地址的最高位必须为1所以0x80列数又因为第二行的列从0x40开始while(*str) //所以是从0x80 0x40 列数特别注意{ weiteData(*str);str;}break;} }void readDHTData() {char i; //轮次char j; //次数char flag;char tmp;//打开DHT11高速模式startDHT();for(i0; i5; i){for(j0; j8; j){//检测G点while(!Data);//根据传送1和0的时间不同0是26us1是70us。等待60us后如果Data 1,就传1Data 0;就传0//Delay60us(); 延时60微妙太长了可能在读0时读到下一个发送序列了延时40微妙Delay40us();if(Data 1){flag 1;while(Data); //传1的时间比较久所以要等传1结束}else{flag 0;}tmp tmp 1;tmp | flag;}THdata[i] tmp;} }void THDataHandler() {//湿度数据处理Humidness[0] H;Humidness[1] :;Humidness[2] THdata[0]/10 0x30;Humidness[3] THdata[0]%10 0x30;Humidness[4] .;Humidness[5] THdata[1]/10 0x30;Humidness[6] THdata[1]%10 0x30;Humidness[7] %;Humidness[8] \0;//温度处理Temperature[0] T;Temperature[1] :;Temperature[2] THdata[2]/10 0x30;Temperature[3] THdata[2]%10 0x30;Temperature[4] .;Temperature[5] THdata[3]/10 0x30;Temperature[6] THdata[3]%10 0x30;Temperature[7] C;Temperature[8] \0; }void main() {LED1 1; //一上电就让灯灭Delay1000ms();UartInit(); //初始化串口initLCD1602(); //初始化LCD1602Delay1000ms(); //等待DHT模块稳定Delay1000ms();while(1) //防止程序退出主函数导致LED1微弱闪烁{Delay1000ms(); //间隔1秒读一次readDHTData(); //读取DHT11温湿度数据THDataHandler(); //将DHT11传回的数据装入温湿度字符数组//通过串口发送温湿度数据sendString(Humidness);sendString(\r\n);sendString(Temperature);sendString(\r\n);sendString(\r\n);LCD1602ShowARow(1,4,Humidness); LCD1602ShowARow(2,4,Temperature);}}6项目运行结果 结束语 很高兴您能看到这里点个赞再走呗。谢谢您啦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整教程:【有源码】基于Hadoop+Spark的AI就业影响数据分析与可视化系统-AI驱动下的就业市场变迁数据分析与可视化研究-基于大数据的AI就业趋势分析可视化平台

完整教程:【有源码】基于Hadoop+Spark的AI就业影响数据分析与可视化系统-AI驱动下的就业市场变迁数据分析与可视化研究-基于大数据的AI就业趋势分析可视化平台pre { white-space: pre !important; word-wrap: normal …

Tomcat中启用h3的方法是什么

在Tomcat中启用HTTP/3(h3)需要使用一个支持QUIC和HTTP/3的连接器。目前,Tomcat还不支持原生的HTTP/3,但是可以使用QuicT,一个基于Java实现的QUIC连接器。 以下是在Tomcat中启用HTTP/3的步骤: 1. 下载QuicT连接器…

k8s-Namespace

Namespace 是k8s中做用户隔离的,适用于多租户的场景。 Namespace 是 Kubernetes 用于实现资源逻辑隔离、多租户、安全授权和环境区分的重要机制,是大规模集群必备的组织手段。Namespace 是什么? Namespace 是 Kuber…

国产化Excel开发组件Spire.XLS教程:C# 写入 Excel ,轻松将数据导出到工作表

本文将系统讲解如何使用 C# 写入 Excel 文件 ,包括不同数据类型的插入方法、批量数据写入技巧、文件保存与导出,助力开发者提升数据处理与自动化能力。Excel 作为最常用的数据管理与分析工具之一,被广泛应用于各类数…

分布式专题——23 Kafka日志索引详解 - 指南

分布式专题——23 Kafka日志索引详解 - 指南2025-09-28 10:38 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bl…

Agent的九种设计模式 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

牛客刷题-Day6

动态规划1:线性dp、背包问题,区间 https://ac.nowcoder.com/acm/contest/24213?from=acdiscuss牛客刷题-Day5 今日刷题:\(1026-1030\) 1026 合并回文子串 题目描述 输入两个字符串 \(A\) 和 \(B\),合并成一个串 \…

长治网站制作小程序企业网站 响应式 案例

维秘柔情内裤性感/舒适/健康/透气 复制代码 维秘柔情不仅仅是商品质材料和考究的设计,更是一个坚守生活美学的理念,总有一款维秘柔情告诉你的身体密码。从此之前所用,皆为将就。从此之前所见,皆为平常。 在内裤不再是遮掩的这个时…

临潼城市建设局网站珠海建设网站的公司哪家好

洞悉技术的本质,享受科技的乐趣 第一篇,我的感受就是 耗叔是一个热爱技术,可以通过代码找到快乐的技术人。 作为it从业者,我们如何可以通过代码找到快乐呢?这是一个问题? 至少目前,我还没有这种…

python占用指定比例CPU

# author: xiaoyang # date: 2025/09/28import os import sys import time from multiprocessing import Processdef ac_cpu(timeout=None):t0 = time.time()while timeout and time.time() - t0 < timeout:1024 **…

Modbus RTU TCP 拓扑

Modbus RTU TCP 拓扑关键词:Modbus-RTU-Master&Modbus-RTU-Slave, station Modbus-TCP-Server&Modbus-TCP-Client Socket-TCP-Server&TCP-Client, host

数字化转型浪潮下:10款主流项目管理工具横向测评与选型指南

数字化转型浪潮下:10款主流项目管理工具横向测评与选型指南 在数字化转型加速推进的当下,项目管理工具已成为企业提升协作效率的关键基础设施。根据Gartner最新调研数据显示,2023年全球项目管理软件市场规模已达59.…

借助Aspose.Email,使用 Python 将 EML 转换为 MHTML

如果您正在寻找编程式​​电子邮件文件处理方法,那么本指南非常适合您。Aspose.Email是一个强大的电子邮件文件转换 SDK。它提供电子邮件管理、编辑和转换功能。在本篇教程中,我们将学习如何借助Aspose.Emai使用 Pyt…

简述电子商务网站开发的基本流程总部在深圳的互联网公司

来源&#xff1a;物联网智库整理发布摘要&#xff1a;当互联网的上半场结束之后&#xff0c;所有的互联网下半场都是重生意。随着AIoT越来越热门&#xff0c;这一概念已然成为巨头、资本以及新兴企业竞相角逐的热点。2019年注定是AIoT具有重要发展的一年&#xff0c;仅仅在刚过…

python+springboot+django/flask的医院食堂订餐系统 菜单发布 在线订餐 餐品管理与订单统计系统 - 教程

python+springboot+django/flask的医院食堂订餐系统 菜单发布 在线订餐 餐品管理与订单统计系统 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bl…

计算机网络学习笔记 - 浪矢

最近在看b站计算机网络微课堂的课,对我一个数学系的学生而言,感觉讲的非常生动形象,所以忍不住做了点笔记。 首先是计算机网络体系结构的划分:包括OSI体系结构和TCP/IP体系结构,OSI结构是将网络接口层细分为了物理…

数据结构以及LeetCode常用方法 - 浪矢

序: 马上要秋招了,作为一个数学系的学生想找一份研发类的工作确实需要做一些准备,现在开始重新梳理一下CS的知识。首先,从高中学NOIP常用的数据结构开始吧,从易到难慢慢来~ 目录存储结构数组链表常用方法线性数据…

App Store 上架完整流程解析,iOS 应用发布步骤、ipa 文件上传工具、TestFlight 测试与苹果审核经验

本文全面解析 App Store 上架流程,涵盖账号注册、证书管理、应用打包、ipa 文件上传、TestFlight 测试到苹果审核与发布的完整步骤,结合实战案例,总结高效实用的 iOS 应用发布经验。在移动互联网行业中,App Store …

使用 Zig 编写英文数字验证码识别工具

一、项目概述 英文数字验证码识别是一项实用性强的图像处理任务,常见于反自动化注册与安全验证系统中。本项目使用 Zig 语言调用外部 OCR 引擎(Tesseract),并进行基础文件读写与错误处理,完成验证码识别功能。 二…

建设部勘察设计网站建筑八大员证有哪些

在软件开发领域&#xff0c;敏捷开发和V模型开发是两种主要的开发方法。它们之间的差异主要体现在开发过程的结构和组织方式上。在以下讨论中&#xff0c;我们将深入探讨这两种方法的特点和差异。 敏捷开发 敏捷开发是一种迭代和增量的软件开发方法&#xff0c;它强调灵活性和…