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

STC51案例操作

案例 1:LED 闪烁

功能描述:通过操作 P1 口寄存器,让连接在 P1.0 引脚的 LED 以一定间隔闪烁。

#include <reg51.h>// 延时函数
void delay(unsigned int time) {unsigned int i, j;for (i = 0; i < time; i++)for (j = 0; j < 123; j++);
}void main() {while (1) {P1 = P1 & 0xFE;  // P1.0 置 0,点亮 LEDdelay(500);      // 延时P1 = P1 | 0x01;  // P1.0 置 1,熄灭 LEDdelay(500);      // 延时}
}

代码解释

  • delay 函数用于产生一定的延时,通过嵌套的 for 循环实现。
  • 在 main 函数中,使用 P1 = P1 & 0xFE 将 P1.0 引脚置为低电平,点亮 LED;使用 P1 = P1 | 0x01 将 P1.0 引脚置为高电平,熄灭 LED。每次操作后调用 delay 函数进行延时,从而实现 LED 闪烁。

案例 2:按键检测控制 LED

功能描述:检测连接在 P3.2 引脚的按键状态,根据按键状态控制连接在 P1.0 引脚的 LED 亮灭。

#include <reg51.h>void main() {while (1) {if (P3 & 0x04 == 0) {  // 检测 P3.2 是否为低电平(按键按下)P1 = P1 & 0xFE;    // P1.0 置 0,点亮 LED} else {P1 = P1 | 0x01;    // P1.0 置 1,熄灭 LED}}
}

代码解释

  • 在 main 函数的无限循环中,通过 P3 & 0x04 == 0 检测 P3.2 引脚是否为低电平。如果是低电平,表示按键被按下,将 P1.0 引脚置为低电平,点亮 LED;否则,将 P1.0 引脚置为高电平,熄灭 LED。

案例 3:定时器实现 LED 闪烁

功能描述:使用定时器 0 实现 LED 每隔 1 秒闪烁一次。

#include <reg51.h>unsigned char count = 0;  // 定时器溢出次数计数器void main() {TMOD = 0x01;  // 设置定时器 0 为方式 1(16 位定时器)TH0 = (65536 - 50000) / 256;  // 定时器初值,定时 50msTL0 = (65536 - 50000) % 256;ET0 = 1;  // 允许定时器 0 中断EA = 1;   // 允许总中断TR0 = 1;  // 启动定时器 0while (1);
}// 定时器 0 中断服务函数
void timer0_isr() interrupt 1 {TH0 = (65536 - 50000) / 256;  // 重新加载定时器初值TL0 = (65536 - 50000) % 256;count++;if (count == 20) {  // 50ms * 20 = 1sP1 = ~P1;       // 取反 P1 口状态,实现 LED 闪烁count = 0;      // 计数器清零}
}

代码解释

  • TMOD = 0x01 将定时器 0 设置为方式 1(16 位定时器)。
  • TH0 和 TL0 计算并设置定时器 0 的初值,使其定时 50ms。
  • ET0 = 1 和 EA = 1 分别允许定时器 0 中断和总中断。
  • TR0 = 1 启动定时器 0。
  • 定时器 0 中断服务函数 timer0_isr 中,每次定时器溢出时重新加载初值,并对计数器 count 加 1。当 count 达到 20 时(即经过 1 秒),取反 P1 口的状态,实现 LED 闪烁,并将计数器清零。

案例 4:串口通信发送数据

功能描述:使用串口以 9600bps 的波特率发送字符 'A'。

#include <reg51.h>// 初始化串口
void uart_init() {SCON = 0x50;  // 设置串口为方式 1,允许接收TMOD |= 0x20; // 设置定时器 1 为方式 2(8 位自动重装)TH1 = 0xFD;   // 波特率 9600bps 对应的初值TL1 = 0xFD;TR1 = 1;      // 启动定时器 1ES = 1;       // 允许串口中断EA = 1;       // 允许总中断
}// 发送一个字符
void uart_send_char(unsigned char ch) {SBUF = ch;    // 将字符放入发送缓冲区while (TI == 0); // 等待发送完成TI = 0;       // 清除发送完成标志
}void main() {uart_init();  // 初始化串口while (1) {uart_send_char('A');  // 发送字符 'A'}
}

代码解释

  • uart_init 函数用于初始化串口,设置串口工作方式、定时器 1 的工作方式和初值,启动定时器 1,并允许串口中断和总中断。
  • uart_send_char 函数将字符放入发送缓冲区 SBUF,然后等待发送完成标志 TI 置 1,最后清除该标志。
  • 在 main 函数中,调用 uart_init 初始化串口,然后进入无限循环,不断发送字符 'A'。

相关文章:

STC51案例操作

案例 1&#xff1a;LED 闪烁 功能描述&#xff1a;通过操作 P1 口寄存器&#xff0c;让连接在 P1.0 引脚的 LED 以一定间隔闪烁。 #include <reg51.h>// 延时函数 void delay(unsigned int time) {unsigned int i, j;for (i 0; i < time; i)for (j 0; j < 123; …...

多光谱技术在华为手机上的应用发展历史

2018 年&#xff0c;华为 P20 系列首次搭载 5 通道色温传感器&#xff0c;可帮助手机在不同光照条件下保持画面色彩一致性。 2020 年&#xff0c;华为 P40 系列搭载 8 通道多光谱色温传感器&#xff08;实际为 11 通道&#xff0c;当时只用 8 个通道检测可见光&#xff09;&am…...

C语言:函数栈帧的创建和销毁

目录 1.什么是函数栈帧2.理解函数栈帧能解决什么问题3.函数栈帧的创建和销毁的过程解析3.1 什么是栈3.2 认识相关寄存器和汇编指令3.3 解析函数栈帧的创建和销毁过程3.3.1 准备环境3.3.2 函数的调用堆栈3.3.3 转到反汇编3.3.4 函数栈帧的创建和销毁 1.什么是函数栈帧 在写C语言…...

NLP_[2]_文本预处理-文本数据分析

文章目录 4 文本数据分析1 文件数据分析介绍2 数据集说明3 获取标签数量分布4 获取句子长度分布5 获取正负样本长度散点分布6 获取不同词汇总数统计7 获取训练集高频形容词词云8 小结 4 文本数据分析 学习目标 了解文本数据分析的作用.掌握常用的几种文本数据分析方法. 1 文…...

【工具篇】深度揭秘 Midjourney:开启 AI 图像创作新时代

家人们,今天咱必须好好唠唠 Midjourney 这个在 AI 图像生成领域超火的工具!现在 AI 技术发展得那叫一个快,各种工具层出不穷,Midjourney 绝对是其中的明星产品。不管你是专业的设计师、插画师,还是像咱这种对艺术创作有点小兴趣的小白,Midjourney 都能给你带来超多惊喜,…...

从O(k*n)到O(1):如何用哈希表终结多层if判断的性能困局

【前言】   本文将以哈希表重构实战为核心&#xff0c;完整展示如何将传统条件匹配逻辑(上千层if-else判断)转化为O(1)的哈希表高效实现。通过指纹验证场景的代码级解剖&#xff0c;您将深入理解&#xff1a;   1.哈希函数设计如何规避冲突陷阱   2.链式寻址法的工程实现…...

视频采集卡接口

采集卡的正面有MIC IN、LINE IN以及AUDIO OUT三个接口&#xff0c; MIC IN为麦克风输入&#xff0c;我们如果要给采集到的视频实时配音或者是在直播的时候进行讲解&#xff0c;就可以在这里插入一个麦克风&#xff0c; LINE IN为音频线路输入&#xff0c;可以外接播放背景音乐…...

蓝桥杯真题 - 像素放置 - 题解

题目链接&#xff1a;https://www.lanqiao.cn/problems/3508/learning/ 个人评价&#xff1a;难度 3 星&#xff08;满星&#xff1a;5&#xff09; 前置知识&#xff1a;深度优先搜索 整体思路 深搜&#xff0c;在搜索过程中进行剪枝&#xff0c;剪枝有以下限制条件&#xf…...

vue基础(三)

常用指令 1. v-bind 固定绑定与动态绑定&#xff1a; 语法&#xff1a; 标准语法&#xff1a;v-bind:属性"动态数据" 简写语法&#xff1a;:属性"动态数拓" <!DOCTYPE html> <html lang"en"><head><me…...

使用Python开发PPTX压缩工具

引言 在日常办公中&#xff0c;PPT文件往往因为图片过大而导致文件体积过大&#xff0c;不便于传输和存储。为了应对这一问题&#xff0c;我们可以使用Python的wxPython图形界面库结合python-pptx和Pillow&#xff0c;开发一个简单的PPTX压缩工具。本文将详细介绍如何实现这一…...

ubuntu24.04安装布置ros

最近换电脑布置机器人环境&#xff0c;下了24.04&#xff0c;但是网上的都不太合适&#xff0c;于是自己试着布置好了&#xff0c;留作有需要的人一起看看。 文章目录 目录 前言 一、确认 ROS 发行版名称 二、检查你的 Ubuntu 版本 三、安装正确的 ROS 发行版 四、对于Ubuntu24…...

SQL 秒变 ER 图 sql转er图

&#x1f680;SQL 秒变 ER 图&#xff0c;校园小助手神了&#xff01; 学数据库的宝子们集合&#x1f64b;‍♀️ 是不是每次碰到 SQL 转 ER 图就头皮发麻&#xff1f;看着密密麻麻的代码&#xff0c;脑子直接死机&#xff0c;好不容易理清一点头绪&#xff0c;又被复杂的表关…...

【AI知识点】如何判断数据集是否噪声过大?

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 判断数据集是否 噪声过大 是数据分析和机器学习建模过程中至关重要的一步。噪声数据会导致模型难以学习数据的真实模式&#xff0c;从而影响预测效果。以下是一些常见的方法来判断数据…...

网络安全治理架构图 网络安全管理架构

网站安全攻防战 XSS攻击 防御手段&#xff1a; - 消毒。 因为恶意脚本中有一些特殊字符&#xff0c;可以通过转义的方式来进行防范 - HttpOnly 对cookie添加httpOnly属性则脚本不能修改cookie。就能防止恶意脚本篡改cookie 注入攻击 SQL注入攻击需要攻击者对数据库结构有所…...

如何写出优秀的单元测试?

写出优秀的单元测试需要考虑以下几个方面&#xff1a; 1. 测试用例设计 测试用例应该覆盖被测试代码的不同场景和边界情况&#xff0c;以尽可能发现潜在的问题。在设计测试用例时需要关注以下几点&#xff1a; 输入输出数据&#xff1a;要测试的函数或方法可能有多个输入参数…...

数据留痕的方法

在项目中&#xff0c;数据变更时&#xff0c;经常需要记录上次的数据&#xff0c;以便查看对比&#xff0c;专业术语叫做数据留痕。数据变更留痕&#xff08;即记录数据的变更历史&#xff09;是一个常见的需求&#xff0c;例如在审计、追踪数据变化或满足合规性要求的场景中。…...

机器学习数学基础:19.线性相关与线性无关

一、线性相关与线性无关的定义 &#xff08;一&#xff09;线性相关 想象我们有一组向量&#xff0c;就好比是一群有着不同“力量”和“方向”的小伙伴。给定的向量组 α ⃗ 1 , α ⃗ 2 , ⋯ , α ⃗ m \vec{\alpha}_1, \vec{\alpha}_2, \cdots, \vec{\alpha}_m α 1​,α 2…...

ArgoCD实战指南:GitOps驱动下的Kubernetes自动化部署与Helm/Kustomize集成

摘要 ArgoCD 是一种 GitOps 持续交付工具,专为 Kubernetes 设计。它能够自动同步 Git 仓库中的声明性配置,并将其应用到 Kubernetes 集群中。本文将介绍 ArgoCD 的架构、安装步骤,以及如何结合 Helm 和 Kustomize 进行 Kubernetes 自动化部署。 引言 为什么选择 ArgoCD?…...

JVM虚拟机以及跨平台原理

相信大家已经了解到Java具有跨平台的特性&#xff0c;即“一次编译&#xff0c;到处运行”&#xff0c;例如在Windows下编写的程序&#xff0c;无需任何修改就可以在Linux下运行&#xff0c;这是C和C很难做到的。 那么&#xff0c;跨平台是怎样实现的呢&#xff1f;这就要谈及…...

【AIGC提示词系统】基于 DeepSeek R1 + ClaudeAI 易经占卜系统

上篇因为是VIP&#xff0c;这篇来一个免费的 提示词在最下方&#xff0c;喜欢的点个关注吧 引言 在人工智能与传统文化交融的今天&#xff0c;如何让AI系统能够传递传统易经文化的智慧&#xff0c;同时保持易经本身的神秘感和权威性&#xff0c;是一个极具挑战性的课题。本文将…...

告别笨重模拟器:Windows系统上直接安装APK的终极方案

告别笨重模拟器&#xff1a;Windows系统上直接安装APK的终极方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经为了在电脑上运行一个简单的手机应用而不得…...

告别乱码!手把手教你用Processing为Arduino TFT_eSPI屏幕制作专属中文字库(附完整源码)

告别乱码&#xff01;手把手教你用Processing为Arduino TFT_eSPI屏幕制作专属中文字库&#xff08;附完整源码&#xff09; 在嵌入式开发中&#xff0c;TFT屏幕的中文显示一直是创客们头疼的问题。传统的解决方案要么占用大量存储空间&#xff0c;要么显示效果不尽如人意。本文…...

Godot 4.x ECS插件GECS:数据驱动架构提升游戏性能与可维护性

1. 项目概述&#xff1a;GECS&#xff0c;为Godot 4.x注入ECS架构之力如果你正在用Godot开发游戏&#xff0c;尤其是那种实体数量多、交互逻辑复杂的项目&#xff0c;比如RTS、模拟经营或者一个满屏敌人的弹幕游戏&#xff0c;你很可能已经感受到了传统面向对象&#xff08;OOP…...

02数据模型与单词仓库-鸿蒙PC端Electron开发

欢迎加入开源鸿蒙PC社区 https://harmonypc.csdn.net/ 源码仓库 https://atomgit.com/qq_33247427/englishProject.git 效果截图 第2篇&#xff1a;数据模型与单词仓库 系列教程导航 篇号 标题 状态 01 环境搭建与项目创建 ✅ 已完成 02 数据模型与单词仓库 本篇 …...

重构计算机历史叙事:挖掘被遗忘的贡献者与构建包容性科技未来

1. 项目概述&#xff1a;为什么我们需要重写计算机历史如果你问一个对计算机历史稍有了解的人&#xff0c;让他列举几位先驱&#xff0c;大概率会听到冯诺依曼、艾伦图灵、比尔盖茨、史蒂夫乔布斯这些名字。这个名单很长&#xff0c;但有一个共同点&#xff1a;他们几乎都是白人…...

量子网络远程纠缠生成技术及其应用

1. 量子网络中的远程纠缠生成技术解析量子纠缠作为量子计算与量子通信的核心资源&#xff0c;其非局域特性为分布式系统提供了经典方法无法实现的协调能力。在金融高频交易、智能电网调度等对延迟极度敏感的领域&#xff0c;量子纠缠带来的协调优势尤为显著。基于腔量子电动力学…...

蓝奏云直链解析:从繁琐到一键的下载革命

蓝奏云直链解析&#xff1a;从繁琐到一键的下载革命 【免费下载链接】LanzouAPI 蓝奏云直链&#xff0c;蓝奏api&#xff0c;蓝奏解析&#xff0c;蓝奏云解析API&#xff0c;蓝奏云带密码解析 项目地址: https://gitcode.com/gh_mirrors/la/LanzouAPI 你是否厌倦了蓝奏云…...

千问 LeetCode 2281.巫师的总力量和 Python3实现

LeetCode 2281. 巫师的总力量和&#xff08;Sum of Total Strength of Wizards&#xff09; 是一道难度较高的题目&#xff0c;核心在于 贡献法 单调栈 前缀和的前缀和&#xff08;prefix sum of prefix sums&#xff09;。下面给出 清晰、高效、符合 Python3 习惯 的实现&am…...

从特斯拉事故看自动驾驶数据存储与系统安全设计

1. 事故背景与NTSB调查报告的核心价值2016年发生的那起特斯拉Model S与白色半挂卡车相撞的致命事故&#xff0c;相信很多关注汽车技术发展的朋友都还记得。当时这起事故引发了业界对自动驾驶辅助系统安全性的第一轮大规模公开讨论。一年多后&#xff0c;美国国家运输安全委员会…...

从微信小程序转战uniapp,我总结的路由跳转对照表与迁移心得

从微信小程序到Uniapp&#xff1a;路由跳转深度迁移指南与实战避坑 第一次在Uniapp项目里看到uni.navigateTo这个API时&#xff0c;我下意识地以为它和微信小程序的wx.navigateTo完全一样——直到某个深夜&#xff0c;测试同学突然报告说iOS设备上连续跳转7个页面后应用直接闪退…...