【51单片机】快速入门
动手实践 > 理论空谈!从点亮LED开始,逐步扩展功能,2周可入门基础。
一、51单片机基础概念
-
什么是51单片机?
-
基于Intel 8051架构的8位微控制器,广泛用于嵌入式开发。
-
核心特性:4KB ROM、128B RAM、32个I/O口、定时器、串口等。
-
常见型号:STC89C52、AT89S52、STC12C5A60S2(增强型)。
-
-
硬件准备
-
开发板:推荐STC89C52RC最小系统板(价格低、资源全)。
-
下载器:USB-TTL(如CH340芯片)或专用STC下载器。
-
软件工具:Keil C51(编程)、STC-ISP(程序下载)、Proteus(仿真)。
-
二、C语言基础与单片机编程
-
C语言核心知识点
-
变量与数据类型:
bit
(位变量)、sbit
(特殊功能位)、unsigned char
(0~255)。 -
位操作:
P1 |= 0x01;
(置位)、P1 &= ~0x01;
(清零)。 -
函数与中断:中断服务函数格式
void Timer0_ISR() interrupt 1
。
-
-
开发流程
-
创建Keil工程:选择单片机型号(如STC89C52),配置晶振频率(11.0592MHz)。
-
编写代码:包含头文件
#include <reg52.h>
,控制I/O口。 -
编译生成HEX:确保无错误后生成
.hex
文件。 -
烧录程序:通过STC-ISP选择HEX文件,冷启动下载。
-
三、基础实验与代码示例
1. LED闪烁(GPIO控制)
#include <reg52.h>
sbit LED = P1^0; // 将LED连接到P1.0引脚void delay(unsigned int ms) {unsigned int i, j;for (i=0; i<ms; i++)for (j=0; j<114; j++);
}void main() {while(1) {LED = 0; // LED亮(低电平驱动)delay(500);LED = 1; // LED灭delay(500);}
}
2. 按键检测(输入控制)
sbit KEY = P3^2; // 按键接P3.2(外部中断0引脚)
sbit LED = P1^0;void main() {IT0 = 1; // 设置外部中断0为边沿触发EX0 = 1; // 开启外部中断0EA = 1; // 全局中断使能while(1);
}void Key_ISR() interrupt 0 {LED = ~LED; // 按键按下时切换LED状态
}
四、进阶功能学习
1. 定时器配置(模式1)
void Timer0_Init() {TMOD |= 0x01; // 定时器0,模式1(16位)TH0 = 0xFC; // 初值,定时1ms(12MHz晶振)TL0 = 0x18;ET0 = 1; // 开启定时器0中断TR0 = 1; // 启动定时器EA = 1;
}void Timer0_ISR() interrupt 1 {static unsigned int count = 0;TH0 = 0xFC; // 重装初值TL0 = 0x18;if (++count >= 1000) {count = 0;LED = ~LED; // 1秒翻转一次LED}
}
2. 按键检测(输入控制)
sbit KEY = P3^2; // 按键接P3.2(外部中断0引脚)
sbit LED = P1^0;void main() {IT0 = 1; // 设置外部中断0为边沿触发EX0 = 1; // 开启外部中断0EA = 1; // 全局中断使能while(1);
}void Key_ISR() interrupt 0 {LED = ~LED; // 按键按下时切换LED状态
}
四、进阶功能学习
1. 定时器配置(模式1)
void Timer0_Init() {TMOD |= 0x01; // 定时器0,模式1(16位)TH0 = 0xFC; // 初值,定时1ms(12MHz晶振)TL0 = 0x18;ET0 = 1; // 开启定时器0中断TR0 = 1; // 启动定时器EA = 1;
}void Timer0_ISR() interrupt 1 {static unsigned int count = 0;TH0 = 0xFC; // 重装初值TL0 = 0x18;if (++count >= 1000) {count = 0;LED = ~LED; // 1秒翻转一次LED}
}
2. 串口通信(UART)
void UART_Init() {SCON = 0x50; // 模式1,允许接收TMOD |= 0x20; // 定时器1模式2(8位自动重载)TH1 = 0xFD; // 波特率9600(11.0592MHz)TL1 = 0xFD;TR1 = 1;ES = 1; // 开启串口中断EA = 1;
}void UART_ISR() interrupt 4 {if (RI) {RI = 0;SBUF = SBUF + 1; // 回传接收到的字符+1}
}
五、调试与问题排查
-
调试技巧
-
万用表检测:测量电源电压(5V)、引脚电平。
-
串口调试:通过
printf
函数输出变量值(需重定向putchar
)。 -
断点调试:在Keil中设置断点,观察寄存器值。
-
-
常见问题
-
程序不运行:检查晶振是否起振、EA引脚是否接高电平。
-
外设不响应:确认外设供电、初始化代码是否遗漏。
-
中断不触发:检查中断使能位(EA、EXx)、触发方式设置。
-
六、学习资源推荐
-
书籍:《51单片机C语言程序设计经典实例》(适合实战)。
-
视频教程:B站“江科大自化协”51单片机系列(免费、系统)。
-
开源项目:GitHub搜索“51单片机项目”,如智能家居控制系统。
七、学习路线建
-
第一阶段:GPIO控制 → 定时器 → 中断 → 串口。
-
第二阶段:ADC/DAC → PWM → 外部存储器(如EEPROM)。
-
第三阶段:RTOS移植(如Small RTOS51)或复杂项目开发。
通过以上步骤,可在1-2周内掌握51单片机基础,1个月内完成综合性项目(如温湿度监测系统)。
相关文章:
【51单片机】快速入门
动手实践 > 理论空谈!从点亮LED开始,逐步扩展功能,2周可入门基础。 一、51单片机基础概念 什么是51单片机? 基于Intel 8051架构的8位微控制器,广泛用于嵌入式开发。 核心特性:4KB ROM、128B RAM、32个…...
YOLOv8+QT搭建目标检测项目
2024年7月YOLOv8QT初步搭建目标检测(避坑)_qt yolov8-CSDN博客YOLOv8QT初步搭建目标检测 2024年7月YOLOv8QT初步搭建目标检测(避坑)_qt yolov8-CSDN博客 yolov8的可视化界面(一、可视化界面设计)_yolo 可…...

刷题记录10
力扣72. 编辑距离 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 解题思路: 本题与583. 两个字符串的删除操作其实是一样…...

数学软件Matlab下载|支持Win+Mac网盘资源分享
如大家所了解的,Matlab与Maple、Mathematica并称为三大数学软件。Matlab应用广泛,常被用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域。 Matlab将数值分析、矩阵计算、科学…...

5G学习笔记之BWP
我们只会经历一种人生,我们选择的人生。 参考:《5G NR标准》、《5G无线系统指南:如微见著,赋能数字化时代》 目录 1. 概述2. BWP频域位置3. 初始与专用BWP4. 默认BWP5. 切换BWP 1. 概述 在LTE的设计中,默认所有终端均能处理最大2…...
Spark 介绍
Spark 架构 Spark 是一个基于内存计算的大数据处理框架,相比 Hadoop 的 MapReduce,它能够提供 更高效的迭代计算 和 流式计算能力。Spark 采用 主从架构(Master-Slave),主要包括 Driver、Cluster Manager、Worker、Ex…...
mac Homebrew安装、更新失败
我这边使用brew安装git-lfs 一直报这个错: curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL更新brew update也是报这个错误。最后使用使用大佬提供的脚本进行操作: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/mast…...

【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.2.3案例:电商订单日志每秒10万条写入优化
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch批量写入性能调优实战:2.2.3 案例:电商订单日志每秒10万条写入优化1. 原始架构与瓶颈分析1.1 初始集群配置1.2 性能瓶颈定位 2. 全链路…...
http的post请求不走http的整个缓存策略吗?
http的post请求不走http的整个缓存策略吗? DeepSeek R1 思考 33 秒 思考过程 嗯,用户问的是HTTP的POST请求是否不遵循整个缓存策略。我需要先回忆一下HTTP缓存的基本机制,然后考虑不同请求方法的缓存处理。 首先,HTTP缓存通常涉…...
c++ 预处理器和iostream 文件
在C中,预处理器和<iostream>头文件各自扮演关键角色,二者协同工作以实现程序的输入输出功能。以下是它们的详细关系和作用: 1. 预处理器的作用 处理预处理指令:预处理器在编译前执行,处理所有以#开头的指令&…...

【前端】前端设计中的响应式设计详解
文章目录 前言一、响应式设计的定义与作用二、响应式设计的原则三、响应式设计的实现四、响应式设计的最佳实践总结 前言 在当今数字化时代,网站和应用程序需要适应各种设备,从桌面电脑到平板电脑和手机。响应式设计应运而生,成为一种可以适…...

探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(二)
文章目录 2.3.3 极化编码巴氏参数与信道可靠性比特混合生成矩阵编码举例 2.3.4 极化译码最小单元译码串行抵消译码(SC译码)算法SCL译码算法 2.3.5 总结**Polar 码的优势****Polar 码的主要问题****Polar 码的应用前景** 2.3.6 **参考文档** 本博客为系列…...

打开 Windows Docker Desktop 出现 Docker Engine Stopped 问题
一、关联文章: 1、Docker Desktop 安装使用教程 2、家庭版 Windows 安装 Docker 没有 Hyper-V 问题 3、安装 Windows Docker Desktop - WSL问题 二、问题解析 打开 Docker Desktop 出现问题,如下: Docker Engine Stopped : Docker引擎停止三、解决方法 1、检查服务是否…...
6.人工智能与机器学习
一、人工智能基本原理 1. 人工智能(AI)定义与范畴 核心目标:模拟人类智能行为(如推理、学习、决策)分类: 弱人工智能(Narrow AI):专精单一任务(如AlphaGo、…...
RabbitMQ怎么实现延时支付?
一、使用“死信队列”消息过期时间 1、原理: 设置消息”存活时间“,如果没有被及时消费,就会被丢弃到一个”死信队列“,然后消费者监听这个死信队列处理消息 2、步骤: 2.1、创建两个队列: 2.1.1、普通队…...
vite-vue3使用web-worker应用指南和报错解决
主线程:初始化worker和监听子线程的消息 let worker: any; const salesConfigData ref<any[]>([]); // 显示非上架 const showNotList ref(false);// /src/views/ceshi/salesConfig/worker.js worker new Worker(new URL("/src/views/ceshi/salesConf…...

校园快递助手小程序毕业系统设计
系统功能介绍 管理员端 1)登录:输入账号密码进行登录 2)用户管理:查看编辑添加删除 学生信息 3)寄件包裹管理:查看所有的包裹信息,及物流信息 4)待取件信息:查看已到达的…...

python量化交易——金融数据管理最佳实践——使用qteasy管理本地数据源
文章目录 统一定义的金融历史数据表最重要的数据表数据表的定义交易日历表的定义:交易日历表: trade_calendar qteasy是一个功能全面且易用的量化交易策略框架, Github地址在这里。使用它,能轻松地获取历史数据,创建交易策略并完…...
BIO、NIO、AIO、Netty从简单理解到使用
Java编程中BIO、NIO、AIO是三种不同的I/O(输入/输出)模型,它们代表了不同的I/O处理方式。 Netty就是基于Java的NIO(New Input/Output)类库编写的一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可…...

计算机毕业设计SpringBoot+Vue.js工厂车间管理系统源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...