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

单片机的基本组成

单片机,即单芯片微型计算机(Single-Chip Microcomputer),是一种将中央处理器(CPU)、内存、输入输出接口等功能集成在一块集成电路芯片上的微型计算机。它具有体积小、成本低、可靠性高、功耗低等优点,在现代电子产品中得到广泛应用,从日常生活用品到工业自动化设备都能见到它的身影。

单片机的基本组成

单片机主要由以下几个部分组成:

- CPU:执行指令集,是单片机的大脑。

- 存储器:包括程序存储器和数据存储器,用来存放程序代码和运行时的数据。

- 定时/计数器:用于时间间隔测量或事件计数。

- 中断系统:允许单片机对外部或内部事件做出快速响应。

- I/O端口:与外部世界交互的接口,用于输入输出操作。

- 通信接口:如UART、SPI、I2C等,用于与其他设备进行数据交换。

单片机的应用实例

电子手表

电子手表是一个经典的单片机应用实例。通过编程控制单片机,可以实现时间显示、闹钟设置、秒表功能等。下面以一个简单的8051单片机为例,展示如何编写一个基础的时间显示程序。

```c

#include

// 定义常量

#define SECOND 1000 // 假设每秒钟中断1000次

// 定义全局变量

unsigned char second = 0;

unsigned char minute = 0;

unsigned char hour = 0;

// 初始化定时器0为模式1,用于产生1ms定时

void Timer0_Init() {

TMOD |= 0x01; // 设置定时器0为模式1

TH0 = (65536 - 50000) / 256; // 装载初值

TL0 = (65536 - 50000) % 256;

ET0 = 1; // 开启定时器0中断

EA = 1; // 开启总中断

TR0 = 1; // 启动定时器0

}

// 定时器0中断服务程序,每1ms进入一次

void Timer0_ISR(void) interrupt 1 {

static unsigned int count = 0;

count++;

if (count >= SECOND) { // 每秒触发一次

count = 0;

second++;

if (second >= 60) {

second = 0;

minute++;

if (minute >= 60) {

minute = 0;

hour++;

if (hour >= 24) {

hour = 0;

}

}

}

}

TH0 = (65536 - 50000) / 256; // 重新装载初值

TL0 = (65536 - 50000) % 256;

}

// 主函数

void main() {

Timer0_Init(); // 初始化定时器

while (1) {

// 在这里添加显示时间的代码

// P1 = (hour

// P2 = (minute

}

}

```

玩具车

玩具车也是单片机的一个典型应用场景。通过单片机控制电机驱动模块,可以实现前进、后退、转弯等基本动作。以下是一个基于Arduino平台的简单示例,展示了如何使用L298N电机驱动板控制两个直流电机来完成玩具车的基本移动。

```cpp

// 定义电机引脚

const int leftMotorPin1 = 2;

const int leftMotorPin2 = 3;

const int rightMotorPin1 = 4;

const int rightMotorPin2 = 5;

void setup() {

pinMode(leftMotorPin1, OUTPUT);

pinMode(leftMotorPin2, OUTPUT);

pinMode(rightMotorPin1, OUTPUT);

pinMode(rightMotorPin2, OUTPUT);

}

void loop() {

// 前进

forward();

delay(2000); // 延迟2秒

// 停止

stopMotors();

delay(1000); // 延迟1秒

// 左转

turnLeft();

delay(1000); // 延迟1秒

// 右转

turnRight();

delay(1000); // 延迟1秒

// 后退

backward();

delay(2000); // 延迟2秒

// 再次停止

stopMotors();

}

// 控制电机前进

void forward() {

digitalWrite(leftMotorPin1, HIGH);

digitalWrite(leftMotorPin2, LOW);

digitalWrite(rightMotorPin1, HIGH);

digitalWrite(rightMotorPin2, LOW);

}

// 控制电机停止

void stopMotors() {

digitalWrite(leftMotorPin1, LOW);

digitalWrite(leftMotorPin2, LOW);

digitalWrite(rightMotorPin1, LOW);

digitalWrite(rightMotorPin2, LOW);

}

// 控制电机左转

void turnLeft() {

digitalWrite(leftMotorPin1, LOW);

digitalWrite(leftMotorPin2, HIGH);

digitalWrite(rightMotorPin1, HIGH);

digitalWrite(rightMotorPin2, LOW);

}

// 控制电机右转

void turnRight() {

digitalWrite(leftMotorPin1, HIGH);

digitalWrite(leftMotorPin2, LOW);

digitalWrite(rightMotorPin1, LOW);

digitalWrite(rightMotorPin2, HIGH);

}

// 控制电机后退

void backward() {

digitalWrite(leftMotorPin1, LOW);

digitalWrite(leftMotorPin2, HIGH);

digitalWrite(rightMotorPin1, LOW);

digitalWrite(rightMotorPin2, HIGH);

}

```

工业控制系统

在工业领域,单片机被广泛应用于各种控制系统中,如温度控制、流量监控、机器人运动控制等。下面给出一个温控系统的简化示例,该系统使用了DHT11湿度温度传感器和LCD1602显示屏,通过Arduino来监测环境温度,并根据设定的阈值开启或关闭加热装置。

```cpp

#include

#include

#define DHTPIN 2 // DHT11连接到数字引脚2

#define DHTTYPE DHT11 // 使用DHT11型号

#define HEATER_PIN 3 // 加热器控制引脚

DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

float temperatureThreshold = 25.0; // 设定温度阈值

void setup() {

Serial.begin(9600);

dht.begin();

lcd.begin(16, 2);

pinMode(HEATER_PIN, OUTPUT);

digitalWrite(HEATER_PIN, LOW);

}

void loop() {

float humidity = dht.readHumidity();

float temperature = dht.readTemperature();

if (isnan(humidity) || isnan(temperature)) {

Serial.println("Failed to read from DHT sensor!");

return;

}

lcd.setCursor(0, 0);

lcd.print("Temp: ");

lcd.print(temperature);

lcd.print(" C");

lcd.setCursor(0, 1);

lcd.print("Humidity: ");

lcd.print(humidity);

lcd.print("% ");

if (temperature < temperatureThreshold) {

digitalWrite(HEATER_PIN, HIGH); // 打开加热器

} else {

digitalWrite(HEATER_PIN, LOW); // 关闭加热器

}

delay(2000); // 每两秒读取一次数据

}

```

相关文章:

单片机的基本组成

单片机&#xff0c;即单芯片微型计算机&#xff08;Single-Chip Microcomputer&#xff09;&#xff0c;是一种将中央处理器(CPU)、内存、输入输出接口等功能集成在一块集成电路芯片上的微型计算机。它具有体积小、成本低、可靠性高、功耗低等优点&#xff0c;在现代电子产品中…...

GO性能优化的一些记录:trace工具的使用

使用场景&#xff1a; 1 想要查看接口延时性偏高 2 深入了解协程具体如何运营的详细信息&#xff08;运行时长&#xff0c;或者什么原因导致了协程运行受阻&#xff09; 可以使用 trace 功能&#xff0c;程序便会对下面的一系列事件进行详细记录&#xff0c;并且会依据所搜集到…...

dede-cms关于shell漏洞

一.文件式管理器 1.新建文件 新建一个php文件&#xff0c;内容写个php脚本语言 访问&#xff0c;可以运行 2.文件上传 上传一个php文件&#xff0c;内容同样写一个php代码 访问&#xff0c;运行成功 二.模块-广告管理 来到模块-广告管理——>增加一个新广告 在这里试一下…...

NAT 技术如何解决 IP 地址短缺问题?

NAT 技术如何解决 IP 地址短缺问题&#xff1f; 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 随着互联网的普及和发展&#xff0c;IP 地址的需求量迅速增加。尤其是 IPv4 地址&…...

使用 IDE生成 Java Doc

使用步骤 Android Studio界面->Tools->Generate JavaDoc zh-CN -encoding UTF-8 -charset UTF-8 -classpath “C:\Users\fangjian\AppData\Local\Android\Sdk\platforms\android-34\android.jar” 报错问题 错误: 目标 17 不允许选项 --boot-class-path 如果你正在使用…...

通过无障碍服务(AccessibilityService)实现Android设备全局水印显示

一、无障碍功能简介 首先我们先来了解下无障碍功能的官方介绍&#xff1a; 无障碍服务仅应用于帮助残障用户使用 Android 设备和应用。它们在后台运行&#xff0c;并在触发 AccessibilityEvents 时接收系统的回调。此类事件表示用户界面中的某些状态转换&#xff0c;例如焦点已…...

flask后端开发(2):URL与视图

目录 URL定义request获取请求参数 gitcode地址&#xff1a; https://gitcode.com/qq_43920838/flask_project.git URL定义 from flask import FlaskappFlask(__name__)app.route(/) def hello_world():return Hello World!app.route(/profile) def profile():return 我是个人…...

力扣-数据结构-7【算法学习day.78】

前言 ###我做这类文章一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;建议灵神的题单和代码随想录&#xff09;和记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关…...

【潜意识Java】Java中深入解析抽象类与接口的差异的完整笔记总结【保姆级详细教程】

目录 一、抽象类和接口的基本概念 &#xff08;一&#xff09;抽象类是什么 &#xff08;二&#xff09;接口是什么 二、抽象类和接口的设计目的差异 &#xff08;一&#xff09;抽象类的设计初衷 &#xff08;二&#xff09;接口的设计意图 三、抽象类和接口的语法特性…...

【Flink运行时架构】系统构架

SMP架构 数据处理系统的架构最简单的实现方式就是单节点&#xff0c;但是随着数据量的增大&#xff0c;为了使单节点的机器性能更加强大&#xff0c;需要增加CPU数量和加大内存来提高吞吐量。这就是所谓的SMP(Symmetrical Multi Processing,对称多处理)架构。 但是这种架构带来…...

uni-ui样式修改

因为之前官网uni-ui有些组件的样式不好看&#xff0c;所以要做一些调整&#xff0c;做个记录。用分段器举例~ 官网原生样式 调整后的 首先找到我们的static文件夹&#xff0c;里面一般存着项目的全局样式文件&#xff0c;没有的话自己创一个 uniui.scss /deep/ .segmented-con…...

【linux板卡】lubancat通过vnc远程访问桌面

鲁班猫开发板通过远程VNC连接桌面&#xff1a; 硬件&#xff1a;lubancat2&#xff0c;网线 软件&#xff1a;ssh软件&#xff0c;vnc viewer 参考链接&#xff1a;https://training.eeworld.com.cn/video/38821 1、ssh连接lubancat2 &#xff0c;输入ifconfig查看ip 2、输入 …...

SQLiteDataBase数据库

XML界面设计 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_paren…...

STM32 高级 物联网通讯之蓝牙通讯

目录 蓝牙基础知识 蓝牙概述 蓝牙产生背景 蓝牙发展历程 蓝牙技术类型 经典蓝牙(BR/EDR和AMP) 低功耗蓝牙(BLE) 市场上常见蓝牙架构 SOC蓝牙单芯片方案 SOC蓝牙+MCU方案 蓝牙host+controller分开方案 蓝牙协议栈 蓝牙芯片架构 BLE低功耗蓝牙协议栈框架 物理…...

react中实现拖拽排序

效果图&#xff1a;如下 效果说明&#xff1a; 1. 点击“选择”按钮&#xff0c;打开弹窗 2. 左侧数据是调接口回显来的 3. 点击左侧某条数据&#xff0c;这条被点击的数据就会被添加到右侧 4. 右侧的数据可以上下拖动换位置 5. 右侧有数据时&#xff0c;点击"确定"…...

【华为OD-E卷-AI处理器组合100分(python、java、c++、js、c)】

【华为OD-E卷-AI处理器组合100分&#xff08;python、java、c、js、c&#xff09;】 题目 某公司研发了一款高性能AI处理器。每台物理设备具备8颗AI处理器&#xff0c;编号分别为0、1、2、3、4、5、6、7。 编号0-3的处理器处于同一个链路中&#xff0c;编号4-7的处理器处于另…...

语音识别基础算法——动态时间规整算法

前言 动态时间规整算法&#xff0c;Dynamic Time Wraping&#xff0c;缩写为DTW&#xff0c;是语音识别领域的一个基础算法。 算法的提出 DTW 的提出是为了解决或尽量解决在语音识别当中的孤立词识别不正确的问题。该问题简单描述为&#xff1a;在识别阶段&#xff0c;将输入…...

模型工作流:自动化的模型内部三角面剔除

1. 关于自动减面 1.1 自动减面的重要性及现状 三维模型是游戏、三维家居设计、数字孪生、VR/AR等几乎所有三维软件的核心资产&#xff0c;模型的质量和性能从根本上决定了三维软件的画面效果和渲染性能。其中&#xff0c;模型减面工作是同时关乎质量和性能这两个要素的重要工…...

解读一个新建的 Spring Boot 项目

解读一个新建的 Spring Boot 项目。 1. 创建 Spring Boot 2.5.6 项目 步骤 1: 使用 Spring Initializr 创建项目 可以使用 Spring Initializr&#xff08;https://start.spring.io/&#xff09;来快速生成一个 Spring Boot 项目。 在 Spring Initializr 中选择以下配置&…...

Vue多页面路由与模版解析

上篇文章中我们成功打包并输出了多页文件&#xff0c;而构建一个多页应用能够让我们进一步了解项目配置的可拓展性&#xff0c;可以对学习 Vue 和 webpack 起到强化训练的效果&#xff0c;本文将在此基础上主要针对多页路由及模板的配置进行系列的介绍。 本案例代码地址&#…...

MATLAB/Simulink三相四桥臂逆变器仿真模型:电压外环电流内环控制策略下的负载平衡与...

matlab/simulink三相四桥臂逆变器仿真模型 采用的是电压外环电流内环控制策略&#xff0c;交流测可以接不平衡负载&#xff0c;在负载不平衡的情况下依然可以保持输出电压对称。 直流侧输入电压范围450V~2000V均可。 交流测输出电压为380/220V&#xff0c;不平衡负载和平衡负载…...

Z-Image-GGUF快速上手:新手常见错误(如误点默认工作流)及修复方案

Z-Image-GGUF快速上手&#xff1a;新手常见错误&#xff08;如误点默认工作流&#xff09;及修复方案 1. 为什么你的第一张AI图总是生成失败&#xff1f; 如果你刚接触Z-Image-GGUF&#xff0c;很可能遇到过这样的情况&#xff1a;兴冲冲地打开界面&#xff0c;看到一堆复杂的…...

告别手动造数据!用JMeter JSR223预处理程序+Groovy脚本,5分钟搞定接口签名和AES加密

告别手动造数据&#xff01;用JMeter JSR223预处理程序Groovy脚本&#xff0c;5分钟搞定接口签名和AES加密 性能测试工程师最头疼的莫过于每次执行测试前&#xff0c;都要手动计算接口签名、拼接参数、加密敏感数据。这种重复性工作不仅耗时耗力&#xff0c;还容易出错。想象一…...

从工业控制到智能家居:手把手教你根据项目需求选对RTOS(ThreadX vs. FreeRTOS实战指南)

从工业控制到智能家居&#xff1a;手把手教你根据项目需求选对RTOS&#xff08;ThreadX vs. FreeRTOS实战指南&#xff09; 在嵌入式系统开发中&#xff0c;选择合适的实时操作系统&#xff08;RTOS&#xff09;往往决定了项目的成败。面对工业控制的高精度需求或智能家居的成本…...

Hogan.js Lambda功能详解:高级模板替换技术终极指南

Hogan.js Lambda功能详解&#xff1a;高级模板替换技术终极指南 【免费下载链接】hogan.js A compiler for the Mustache templating language 项目地址: https://gitcode.com/gh_mirrors/ho/hogan.js Hogan.js是一个高效的Mustache模板引擎编译器&#xff0c;它提供了强…...

从销售报表分析到供应链数据优化,SpreadJS 透视表插件全场景应用指南

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

突破网盘限速壁垒:ctfileGet实现技术民主化的创新实践

突破网盘限速壁垒&#xff1a;ctfileGet实现技术民主化的创新实践 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 在数字资源高速流通的今天&#xff0c;网盘服务已成为信息传递的重要基础设施。然而&a…...

极速配置APA第7版:学术效率工具效率指南

极速配置APA第7版&#xff1a;学术效率工具效率指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 在学术写作中&#xff0c;参考文献格式的规范是论文…...

Phi-3-mini-4k-instruct-gguf GPU算力优化:q4 GGUF模型在消费级显卡上的表现

Phi-3-mini-4k-instruct-gguf GPU算力优化&#xff1a;q4 GGUF模型在消费级显卡上的表现 1. 模型概述 Phi-3-mini-4k-instruct-gguf 是微软Phi-3系列中的轻量级文本生成模型GGUF版本&#xff0c;专为问答、文本改写、摘要整理和简短创作等场景优化。这个经过量化的q4 GGUF模型…...

科研助手实战:OpenClaw调用Qwen3-32B实现论文摘要与归类

科研助手实战&#xff1a;OpenClaw调用Qwen3-32B实现论文摘要与归类 1. 为什么需要自动化文献管理 作为一名经常需要阅读大量文献的研究者&#xff0c;我长期被两个问题困扰&#xff1a;一是下载的PDF论文堆积如山却难以快速定位关键内容&#xff1b;二是手动整理文献耗时耗力…...