上位机图像处理和嵌入式模块部署(mcu项目1:假设用51单片机实现)

news2024/10/6 9:19:52

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        到目前位置,我们借助于qt和apm32 mcu芯片,实现了大多数功能。大家如果回过头来看,其实这些功能并不复杂。从固件的角度来看,主要就是实现了ad读取,并且根据配置条件,确认是否进行蜂鸣器的告警。而从上位机的角度来说,核心的功能就是查看当前ad的采样数值,另外一个功能就是对于阈值的设定和读取。

        上位机自不必说,一般都是pc或者是嵌入式linux完成的。如果从降成本的角度来说,用8051来实现apm32的相关功能也是完全可以的。

1、8051单片机

        8051单片机的内存不大,一般只有几百个字节,大的也只有几k空间。flash的话,一般也就几k到几十k空间。如果折算成代码行数的话,通常就是几百行到几千行代码。此外,频率一般也就是几十M,很少超过100M,所以实现的功能都比较单一。

2、开发方法

        8051的开发工具是keil-c51,和我们arm mcu开发的工具keil差不多。唯一不同的,keil-c51不需要安装单独的pack。最简单的工程可能就两个文件,一个汇编文件,一个main.c文件。

3、烧录方法

        一般8051芯片上面有一个串口是专门烧录的,比如stc的8051单片机STC89C52RC。我们借助于stc-isp这个烧录工具+com串口,就可以实现hex文件的烧录了。

4、调试方法

        不过比较遗憾的是,8051之前是没有办法进行单步调试的,如果需要调试的话,可能只能通过串口打印了。另外如果没有实物的话,可以通过Proteus这个软件来仿真也是不错的方法。

        另外一个我个人用的比较多的方法,就是借助于windows的vs工具,把一些和硬件底层无关的代码提前开发好,这样也能节省一部分时间。当然调试的方法,不仅依赖于软件,有的时候还需要万用表、示波器,所以这有赖于自己综合能力的提升。

5、8051一般有哪些外设

        基本的外设,8051其实都是包括在内的,只是8051 cpu的频率低了一点,所以给人一种低端的感觉。但是事实上只要和场景匹配,不管是用8051、还是arm mcu 或者dsp,其实无所谓的,能解决问题就好。通过,8051单片机里面,gpio、uart、timer、spi、iic、ad、pwm、watchdog这些基本的外设都是存在的。不同的8051单片机,差别一般体现在gpio个数、ram大小、flash大小和外设的个数上面。

        另外就算不存在的硬件接口,也可以通过gpio仿真出来,无非就是速率低一点而已。

6、8051上出现比较少的外设

        和mcu相比较,8051单片机一般没有can、usb、sdio、eth这些复杂一点的外设。因此,如果你的场景用到上面说的这些外设,最好还是选用arm mcu。更不要说图像处理这种对cpu要求较高的场景了。

7、8051独特的eeprom

        有一些8051芯片内部含有eeprom,可以保存一些配置数据,这在arm mcu里面是不多见的,比较新奇。

8、软件开发方法的差别

        虽然很多时候,8051单片机和arm mcu一样,都是1~2个人完成的,但是arm mcu明显能做的事情更多。比如,它可以添加rtos、可以添加lwip协议栈、可以填fatfs文件系统,甚至可以添加usb协议栈,这些都是8051没有办法做的,所以总的来说还是看场景、看需求。

9、独立、小巧的设备更适合8051

        简单来说,如果一个设备不需要和外界通讯,或者说即使通讯,也不需要很高的速率,那么8051无疑是最佳的开发平台。gpio负责输入输出、uart负责上位机通信、spi和iic负责和其他芯片通信、ad负责感知外界世界、pwm负责控制电机,即使自己做不了的事情,也是可以通过spi接口、iic接口、uart接口借助于第三方芯片来完成,本身还是非常非常棒的产品。

        记得读书的时候学习控制原理,里面提到了pid,当时不明白为甚要用8051单片机实现,现在想起来只能用两个字来形容,8051确实是“真香”。如果用不着linux soc,又不涉及can、usb、sdio和eth,那么8051还真的是非常理想的一个选择。

        大家可以试想一下这样的场景,玩具、测量工具、小家电、后装的车载电子、交通工具电子,是不是都可以用8051实现。

9、怎么入手

        买一个板子,再加一个usb转232串口,从点灯开始。其实也就是两杯瑞幸咖啡的事情。

#include <reg51.h>  // 包含51单片机的头文件

void delay(unsigned int ms) {
    unsigned int i, j;
    for (i = 0; i < ms; i++)
        for (j = 0; j < 123; j++);  // 简单的延时循环
}

void main() {
    while (1) {
        P1 = 0xFE;  // 0000 0001 点亮P1.0
        delay(500); // 延时500毫秒
        P1 = 0xFF;  // 1111 1111 熄灭P1.0
        delay(500); // 延时500毫秒
    }
}

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

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

相关文章

Java(七)——多态

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

Arcgis Api 三维聚合支持最新版API

Arcgis Api 三维聚合支持最新版API 最近有同学问我Arcgis api 三维聚合&#xff0c;官方还不支持三维聚合API&#xff0c;二维可以。所以依旧是通过GraphicLayers 类来实现&#xff0c;可支持最新Arcgis Api版本 效果图&#xff1a;

【APK】SDKManager运行后闪退

本地JDK已安装&#xff0c;且配置了环境变量&#xff0c;未安装 android studiio 问题描述&#xff1a;右键以管理员身份运行 SDKManager&#xff0c;终端窗口闪退 问题原因&#xff1a;未找到正确的Java路径 解决办法&#xff1a; 1.修改tools目录下的 android.bat 文件&am…

0301STM32GPIO外设输出

STM32GPIO外设输出 STM32内部的GPIO外设GPIO简介基本结构GPIO位结构输入部分&#xff1a;输出部分&#xff1a; GPIO八种工作模式浮空/上拉/下拉输入模拟输入开漏/推挽输出复用开漏/推挽输出 手册寄存器描述GPIO功能描述外设的GPIO配置GPIO寄存器描述端口输入数据寄存器端口输出…

Kafka第四篇——生产数据总体概括,源码解析分区策略,数据收集器,Sender发送线程,key值

目录 流程图以及总体概述 拦截器 分区器以及分区计算策略 为啥进行分区计算&#xff1f; producer生产者怎么知道有哪些分区&#xff1f; 分区计算 如何自定义实现分区器&#xff1f; 想说的在图里啦&#xff01;宝宝&#xff01;&#x1f4a1; ​编辑 如果key值忘记传递了呢&a…

Vue移动端地图App:van-uploader导致的卡顿问题

问题描述 基于Vue3+Vant IU 4开发的移动端地图App,在进行地图点位上报、上报记录查看过程中,出现App卡顿、甚至闪退的问题,进行问题定位之后,发现是van-uploader组件导致的问题。 van-uploader文件上传组件 van-uploader组件用于将本地的图片或文件上传至服务器,并在上传…

园区、社区、乡村的智能管理

智慧园区、社区、乡村管理系统是现代信息技术在城市化进程中的重要应用,它们通过集成多种技术手段,实现对园区、社区、乡村的全面、高效、智能化管理。以下是对这三种管理系统的详细阐述: 一、智慧园区管理系统 1. 定义与目的 智慧园区管理系统是运用物联网、云计算、大数…

Canal架构以及使用规范

Canal架构以及使用规范 一、Canal的作用 相关文档&#xff1a;GitHub - alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件 MySQL主备复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events&#xff0c;可…

【做一道算一道】和为 K 的子数组

给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2 示例 2&#xff1a; 输入&#xff1a;nums [1,2,3],…

分布式整合

一、分布式架构介绍 什么是分布式系统 分布式系统指一个硬件或软件组件分布在不同的网络计算机上&#xff0c;彼此之间仅仅通过消息传递进行通信和协调的系统。 通俗的理解&#xff0c;分布式系统就是一个业务拆分成多个子业务&#xff0c;分布在不同的服务器节点&#xff0…

【数据结构与算法】快速排序霍尔版

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​

找不到x3daudio1_7.dll怎么修复?一招搞定x3daudio1_7.dll丢失问题

当你的电脑突然弹出提示&#xff0c;“找不到x3daudio1_7.dll”&#xff0c;这时候你就需要警惕了。这往往意味着你的电脑中的程序出现了问题&#xff0c;你可能会发现自己无法打开程序&#xff0c;或者即便打开了程序也无法正常使用。因此&#xff0c;接下来我们要一起学习一下…

【简单介绍下Memcached】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

LabVIEW从测试曲线中提取特征值

在LabVIEW中开发用于从测试曲线中提取特征值的功能时&#xff0c;可以考虑以下几点&#xff1a; 数据采集与处理&#xff1a; 确保你能够有效地采集和处理测试曲线数据。这可能涉及使用DAQ模块或其他数据采集设备来获取曲线数据&#xff0c;并在LabVIEW中进行处理和分析。 特…

Wormhole Filters: Caching Your Hash on Persistent Memory——泛读笔记

EuroSys 2024 Paper 论文阅读笔记整理 问题 近似成员关系查询&#xff08;AMQ&#xff09;数据结构可以高效地近似确定元素是否在集合中&#xff0c;例如Bloom滤波器[10]、cuckoo滤波器[23]、quotient滤波器[8]及其变体。但AMQ数据结构的内存消耗随着数据规模的增长而快速增长…

Kubernetes集群性能测试之kubemark集群搭建

Kubernetes集群性能测试之kubemark集群搭建 Kubemark是K8s官方提供的一个对K8s集群进行性能测试的工具。它可以模拟出一个K8s cluster&#xff08;Kubemark cluster&#xff09;&#xff0c;不受资源限制&#xff0c;从而能够测试的集群规模比真实集群大的多。这个cluster中ma…

针对tcp不出网打——HTTP隧道代理(以CFS演示)

目录 上传工具到攻击机 使用说明 生成后门文件 由于电脑短路无法拖动文件&#xff0c;我就wget发送到目标主机tunnel.php文件​ 成功上传​ 可以访问上传的文件 启动代理监听 成功带出 后台私信获取弹药库工具reGeorg 上传工具到攻击机 使用说明 生成后门文件 pyt…

Android OpenGL ES 离屏幕渲染2——获取渲染结果并显示到ImageView控件中,使用最简模型展示

简介&#xff1a; 紧接上文&#xff0c;本文将用一个不包含顶点shader和片元shader的最小模型讲述如何把通过EGL创建的OpenGL ES环境渲染后的结果进行提取&#xff0c;单纯输出一片铺满视口的红色的像素。 EGL环境创建逻辑&#xff1a; 先看完整代码&#xff1a; package com.c…

异常组成、作用、处理方式(3种)、异常方法、自定义异常

目录 异常的组成&#xff1a;运行异常与编译异常 两者区别&#xff1a;编译异常用来提醒程序员&#xff0c;运行异常大部分是由于参数传递错误导致 异常作用&#xff1a; 作用1&#xff1a;就是平时的报错&#xff0c;方便我们找到报错的来源 作用2&#xff1a;在方法内部…

华为机试HJ51输出单向链表中倒数第k个结点

华为机试HJ51输出单向链表中倒数第k个结点 题目&#xff1a; 想法&#xff1a; 因为要用链表&#xff0c;且要找到倒数第k个结点&#xff0c;针对输入序列倒叙进行构建链表并找到对应的元素输出。注意因为有多个输入&#xff0c;要能接受多次调用 class Node(object):def __…