STC的51单片机LED点灯基于KEIL

前言:

该文源于回答一个朋友的问题,代码为该朋友上传,略作修改,在此说明问题以及解决问题的思路,以减少新手错误。

电路图:

该位朋友未上传电路图,说明如下:

stc8g1k08a-sop8控制led代码问题
p5.4接开关,开关接高电平。
p5.5接led。
功能上电延迟2秒检测运行,单按键控制led亮灭。按下点亮,再按下熄灭。
目前代码上电后没有任何反应

在这里插入图片描述
据此画出上述电路图,其中R1是必须存在的,R1确定了按钮没有按下时,该引脚是0,按钮按下时,引脚为1.

LED1应该存在限流电阻,一般为几千欧姆。

该位朋友上传程序如下:

问题程序

#include "STC8G.H" // 定义引脚
sbit BUTTON = P5^4;  
sbit LED = P5^5;  void DelayMs(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 120; j++); 
}void main() {bit ledState = 0; DelayMs(2000);LED = 0;while (1) {if (BUTTON == 1) {  DelayMs(20);if (BUTTON == 1) {ledState = !ledState;LED = ledState;while (BUTTON == 1);}}}
}

其实看到这个程序就知道问题在哪里了,除了传统的MCS51单片机,现在的STC新出的单片机,都需要进行引脚的设置。

引脚设置方法:
//P0M0 = 0x00; // 设置 P0.0~P0.7 为双向口模式
//P0M1 = 0x00;
//P1M0 = 0xff; // 设置 P1.0~P1.7 为推挽输出模式
//P1M1 = 0x00;
//P2M0 = 0x00; // 设置 P2.0~P2.7 为 高阻输入模式
//P2M1 = 0xff;
//P3M0 = 0xff; // 设置 P3.0~P3.7 为开漏模式
//P3M1 = 0xff;

P0P1P2上电状态
在这里插入图片描述
上电后M0寄存器为0,M1寄存器为1,因此上电后默认为高阻输入模式,这种高阻输入模式,肯定是无法点亮LED灯的。
端口均需要对M0和M1寄存器进行设置后才可以作为输出管脚使用。
其它3种状态,均可以点灯,区别如下:
双向口模式,需要连接电阻,连接LED,一般连接LED的阴极,LED的阳极接电源,中间串电阻,推荐这种接法,该模式输出电流受到限制,推荐电流控制在1毫安左右。高电平输出电流较小,只有110uA,见下表,因此不能直接点亮LED。
在这里插入图片描述
按上述连接,LED阴极接单片机IO,阳极经电阻接电源,设置为开漏模式,可以点灯,该状态能输出0电平点灯,也可以高电平点灯,但不推荐。
推挽输出,随便二极管怎么接都可以,是输出强电流的,该种模式需要对单片机的IO进行限流,如输出0时引脚碰到电源或输出1时引脚碰到地,可能会烧坏单片机的引脚。推挽模式引脚连接LED的阴极时,LED的阳极接电源。单片机引脚接LED的阳极时,LED的阴极接地。LED与电源或地之间需要串联电阻,推荐1-5.1K,尽量取大。

推荐电路图

在这里插入图片描述

按键应使用0有效,单片机内部启用上拉电阻,可以节省一个电阻,批量生产时有积极意义。
同理,这里的LED也没有串联电阻,工作原理也是启用单片机内部的上拉电阻,用内部的上拉电阻点亮LED。将该引脚输出0,则LED熄灭。
修改后的程序如下,仅是增加IO M0和M1寄存器的设置。
区别在于增加了P5端口的引脚配置,P5.5配置为推挽输出,P5.4配置为双向IO口
本人的KEIL在编译中提示ledState语法有问题,因此做了调整。初始状态1或0也是可以的。
已发布相关视频,因无法上传视频,发到了BS,可点我链接访问,2个继电器的指示灯,上面的是受控的LED灯,下面的是按钮的指示灯,都是高有效。
需要注意的是,按钮作为输入引脚使用时,因为楼主需要高有效,因此必须将该IO下拉,就是该引脚必须使用一个外接的电阻,接到GND。电阻的取值范围1-10K,通常取4.7K。
该程序经过编译,烧入单片机能够正常运行,视频见上述链接。

正常工作程序

#include <STC8G.H> // 定义引脚sbit BUTTON = P5^4;  
sbit LED = P5^5;  
bit ledState = 0x20^0;  ////P0M0 = 0x00; // 设置 P0.0~P0.7 为双向口模式
//P0M1 = 0x00;
//P1M0 = 0xff; // 设置 P1.0~P1.7 为推挽输出模式
//P1M1 = 0x00;
//P2M0 = 0x00; // 设置 P2.0~P2.7 为 高阻输入模式
//P2M1 = 0xff;
//P3M0 = 0xff; // 设置 P3.0~P3.7 为开漏模式
//P3M1 = 0xff;void DelayMs(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 120; j++); 
}void main() {
P3M0 = 0xff; // 设置 P3.0~P3.7 为开漏模式
P3M1 = 0xff;
P5M0 = 0x20; // 设置 P3.0~P3.7 为开漏模式
P5M1 = 0x00;ledState  = 1; //DelayMs(2000);LED = 0;while (1) {if (BUTTON == 1) {  DelayMs(20);if (BUTTON == 1) {ledState = !ledState;LED = ledState;while (BUTTON == 1);}}}
}

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

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

相关文章

C++ 文字识别OCR

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

基于springboot的自习室预订系统

作者&#xff1a;学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”&#xff0c;支持远程部署调试、运行安装。 项目包含&#xff1a; 完整源码数据库功能演示视频万字文档PPT 项目编码&#xff1…

TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG

注&#xff1a;本文为“TCP 连接状态标识”相关文章合辑。 TCP 的状态&#xff1a;SYN, FIN, ACK, PSH, RST, URG 简介及 ACK 确认机制 llzhang_fly 于 2020-09-19 05:25:26 发布 1、TCP 的状态 FLAGS 字段状态 在 TCP 层&#xff0c;有个 FLAGS 字段&#xff0c;这个字段有…

Spring AI 从入门到实践

​Spring AI 从入门到实践 1.什么是Spring AI 2.使用Spring Boot&Spring AI快速构建AI应用程序 3.ChatClient&Chat Model简化与AI模型的交互 4.Spring AI Prompt:与大模型进行有效沟通 5.结构化输出大模型响应 6.实战:AI聊天机器人 Ben技术站关注Java技术&#x…

1月13日学习

[HITCON 2017]SSRFme 直接给了源代码&#xff0c;题目名称还是ssrf&#xff0c;那么该题大概率就是SSRF的漏洞&#xff0c;进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头&#xff0c;如果存在&#xff0c;则将其拆分为数组&#xff0c;并将第一个 IP 地址…

【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍

从帝国理工的PPT学习。 什么是RDMA Remote Direct Memory Access&#xff0c;也就是Remote的DMA&#xff0c;是一种硬件机制&#xff0c;能直接访问远端结点的内存&#xff0c;而不需要处理器介入。 其中&#xff1a; Remote&#xff1a;跨node进行数据传输Direct&#xff…

Docker

1. 初始Docker 1.1. 什么是Docker&#xff1f; 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环…

Deep4SNet: deep learning for fake speech classification

Deep4SNet&#xff1a;用于虚假语音分类的深度学习 摘要&#xff1a; 虚假语音是指即使通过人工智能或信号处理技术产生的语音记录。生成虚假录音的方法有"深度语音"和"模仿"。在《深沉的声音》中&#xff0c;录音听起来有点合成&#xff0c;而在《模仿》中…

Navicat Premium 原生支持阿里云 PolarDB 数据库

近日&#xff0c;我司旗下的 Navicat Premium 软件通过了阿里云 PolarDB 数据库产品生态集成认证&#xff0c;这标志着 Navicat 通过原生技术全面实现了对秒级弹性、高性价比、稳定可靠的PolarDB 数据库三大引擎&#xff08;PolarDB MySQL版、PolarDB PostgreSQL版和 PolarDB f…

LabVIEW光流算法的应用

该VI展示了如何使用NI Vision Development Module中的光流算法来计算图像序列中像素的运动矢量。通过该方法&#xff0c;可以实现目标跟踪、运动检测等功能&#xff0c;适用于视频处理、机器人视觉和监控领域。程序采用模块化设计&#xff0c;包含图像输入、算法处理、结果展示…

JAVA:在IDEA引入本地jar包的方法(不读取maven目录jar包)

问题&#xff1a; 有时maven使用的jar包版本是最新版&#xff0c;但项目需要的是旧版本&#xff0c;每次重新install会自动将mavan的jar包覆盖到项目的lib目录中&#xff0c;导致项目报错。 解决&#xff1a; 在IDEA中手动配置该jar包对应的目录。 点击菜单File->Projec…

升级 SpringBoot3 全项目讲解 — 为什么 SpringBoot3 应该抛弃 Maven,搭配 Gradle 来使用?

学会这款 &#x1f525;全新设计的 Java 脚手架 &#xff0c;从此面试不再怕&#xff01; 随着 Spring Boot 3 的发布&#xff0c;许多开发者开始考虑如何将现有项目升级到最新版本。Spring Boot 3 带来了许多新特性&#xff0c;包括对 Java 17 的支持、更好的性能优化以及对 G…

大疆上云API基于源码部署

文章目录 大疆上云API基于源码部署注意事项1、学习官网2、环境准备注意事项3、注册成为DJI开发者4、下载前后端运行所需要的包/依赖前端依赖下载后端所需要的Maven依赖包 用到的软件可以在这里下载5、MySQL数据库安装安装MySQL启动MySQL服务在IDEA中配置MySQL的连接信息 6、Red…

Js:正则表达式及正则表达式方法

① 创建正则表达式对象&#xff1a; /** 语法&#xff1a;* var reg new RegExp(正则表达式, 匹配模式);* 匹配模式(字符串类型)&#xff1a;i --> 忽略大小写 g --> 全局匹配模式*/var reg new RegExp(a, i);var str abc; /** 正则表达式的方法&#…

【论文阅读】具身人工智能(Embodied AI)综述:连接数字与物理世界的桥梁

摘要 具身人工智能&#xff08;Embodied AI&#xff09;对于实现通用人工智能&#xff08;AGI&#xff09;至关重要&#xff0c;是连接数字世界与物理世界的各类应用的基础。近年来&#xff0c;多模态大模型&#xff08;MLMs&#xff09;和世界模型&#xff08;WMs&#xff09…

数据结构--二叉树

目录 有序二叉树&#xff1a; 平衡二叉树&#xff1a; 234树&#xff1a; 红黑树 红黑树特点&#xff1a; 为什么红黑树是最优二叉树&#xff1f; 哈夫曼树和哈夫曼编码 有序二叉树&#xff1a; 平衡二叉树&#xff1a; 在有序二叉树的基础上得来的&#xff0c;且左右子…

【算法】图解两个链表相交的一系列问题

问&#xff1a; 给定两个可能有环也可能无环的单链表&#xff0c;头节点head1和head2。请实现一个函数&#xff0c;如果两个链表相交&#xff0c;请返回相交的第一个节点&#xff1b;如果不相交&#xff0c;返回null。如果两个链表长度之和为N&#xff0c;时间复杂度请达到O(N…

Python文件操作中编码解码问题

一、错误介绍 在学习python文件操作过程中遇到了UnicodeDecodeError错误&#xff0c;报错信息如下图所示。 二、错误产生的原因 下面是个人理解&#xff0c;可能存在错误&#xff0c;请理性看待。 windows默认按照GBK来进行编码的&#xff0c;而处理的文件是用UTF-8进行编码…

麦田物语学习笔记:构建游戏的时间系统

基本流程 1.代码思路 (1)新建一个TimeManager.cs (2)创建枚举变量来表示四季,在TimeManager里需要的变量有: 游戏内的秒,分钟,小时,天,月,年;游戏内的季节;控制一个季节有多少个月;控制时间的暂停;计时器tikTime (3)在Settings里添加计时器的阈值,以及各个时间的进位 (4)初始化…

《leetcode-runner》如何手搓一个debug调试器——指令系统

前文&#xff1a; 《leetcode-runner》如何手搓一个debug调试器——引言 《leetcode-runner》如何手搓一个debug调试器——架构 文章目录 什么是指令系统指令的组成部分leetcode-runner支持哪些指令如何解析用户输入的命令行指令识别流程 仓库地址&#xff1a;leetcode-runner …