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

news2025/1/16 20:55:48

前言:

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

电路图:

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

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.coloradmin.cn/o/2277700.html

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

相关文章

手撕Transformer -- Day6 -- DecoderBlock

手撕Transformer – Day6 – DecoderBlock 目录 手撕Transformer -- Day6 -- DecoderBlockTransformer 网络结构图DecoderBlock 代码Part1 库函数Part2 实现一个解码器Block&#xff0c;作为一个类Part3 测试 参考 Transformer 网络结构图 Transformer 网络结构 DecoderBlock 代…

【功能测试总结】

功能测试 1. 功能测试用例1.1 设计用例容易出现的问题 2. 如何写用例2.1 什么是好的用例2.2 测试用例设计常见方法 3. 用例分级 1. 功能测试用例 1.1 设计用例容易出现的问题 基础功能点用例覆盖不全/描述不清 描述不清 什么是正常内容&#xff0c;仅看用例能否知道该输入什么…

Mac玩Steam游戏秘籍!

Mac玩Steam游戏秘籍&#xff01; 大家好&#xff01;最近有不少朋友在用MacBook玩Steam游戏时遇到不支持mac的问题。别担心&#xff0c;我来教你如何用第三方工具Crossover来畅玩这些不支持的游戏&#xff0c;简单又实用&#xff01; 第一步&#xff1a;下载Crossover 首先&…

基于Springboot + vue实现的旅游网站

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

题解 CodeForces 430B Balls Game 栈 C/C++

题目传送门&#xff1a; Problem - B - Codeforceshttps://mirror.codeforces.com/contest/430/problem/B翻译&#xff1a; Iahub正在为国际信息学奥林匹克竞赛&#xff08;IOI&#xff09;做准备。有什么比玩一个类似祖玛的游戏更好的训练方法呢&#xff1f; 一排中有n个球…

Vue3播放视频报ReferenceError: SharedArrayBuffer is not defined

解决办法 前端本地测试vue.config.js server: {headers: {"Cross-Origin-Opener-Policy": "same-origin","Cross-Origin-Embedder-Policy": "require-corp",}, }, 后端vue.js生产环境 跨域隔离 是一种现代Web安全策略&#xff0c;…

Android BottomNavigationView不加icon使text垂直居中,完美解决。

这个问题网上千篇一律的设置iconsize为0&#xff0c;labale固定什么的&#xff0c;都没有效果。我的这个基本上所有人用都会有效果。 问题解决之前的效果&#xff1a;垂直方向&#xff0c;文本不居中&#xff0c;看着很难受 问题解决之后&#xff1a;舒服多了 其实很简单&…

微调神经机器翻译模型全流程

MBART: Multilingual Denoising Pre-training for Neural Machine Translation 模型下载 mBART 是一个基于序列到序列的去噪自编码器&#xff0c;使用 BART 目标在多种语言的大规模单语语料库上进行预训练。mBART 是首批通过去噪完整文本在多种语言上预训练序列到序列模型的方…

基于32QAM的载波同步和定时同步性能仿真,包括Costas环的gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…

设计模式-工厂模式/抽象工厂模式

工厂模式 定义 定义一个创建对象的接口&#xff0c;让子类决定实列化哪一个类&#xff0c;工厂模式使一个类的实例化延迟到其子类&#xff1b; 工厂方法模式是简单工厂模式的延伸。在工厂方法模式中&#xff0c;核心工厂类不在负责产品的创建&#xff0c;而是将具体的创建工作…

【机器学习】零售行业的智慧升级:机器学习驱动的精准营销与库存管理

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 在当今数字化浪潮汹涌澎湃的时代&#xff0c;零售行业正站在转型升级的十字路口。市场竞争的白热化使得企业必须另辟蹊径&#xff0…

day_2_排序算法和树

文章目录 排序算法和树排序算法算法稳定性排序算法☆ 冒泡排序冒泡思路冒泡步骤代码实现效率优化 ☆ 选择排序排序思路排序步骤代码实现 ... 树01-树的基本概念02-树的相关术语03-二叉树的种类04-二叉树的存储05-树的应用场景_数据库索引06-二叉树的概念和性质07-广度优先遍历0…

蓝桥杯刷题第二天——背包问题

题目描述 有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是Vi价值是Wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&#xff0c;N&#xff0c;V&am…

Linux x86_64 程序动态链接之GOT 和 PLT

文章目录 前言一、动态链接二、位置无关代码三、GOT 和 PLT3.1 GOT3.2 PLT3.3 延时绑定3.4 示例 四、demo演示五、延迟绑定技术和代码修补参考资料 前言 这篇文章描述了&#xff1a;Linux x86_64 程序静态链接之重定位&#xff0c;接来本文描述Linux x86_64 程序动态链接之GOT…

学习记录-责任链模式验证参数

学习记录-责任链模式验证参数 1.什么是责任链模式 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许将请求沿着一个处理链传递&#xff0c;直到链中的某个对象处理它。这样&#xff0c;发送者无需知道哪个对象将处理…

练习:MySQL单表查询与多表查询

一.单表查询 创建worke数据库&#xff0c;在数据库底下创建worker表 mysql> create database worke; Query OK, 1 row affected (0.00 sec)mysql> show databases; -------------------- | Database | -------------------- | information_schema | | mysql …

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (四、最近上映电影滚动展示及加载更多的实现)

在HarmonyOS NEXT开发环境中&#xff0c;可以使用多种组件和库来构建丰富且交互友好的应用。本文将展示如何使用HarmonyOS NEXT框架和nutpi/axios库&#xff0c;从零开始实现一个简单的影视APP的首页&#xff0c;主要关注最近上映电影的滚动展示及加载更多功能的实现。 开源项目…

卷积神经05-GAN对抗神经网络

卷积神经05-GAN对抗神经网络 使用Python3.9CUDA11.8Pytorch实现一个CNN优化版的对抗神经网络 简单的GAN图片生成 CNN优化后的图片生成 优化模型代码对比 0-核心逻辑脉络 1&#xff09;Anacanda使用CUDAPytorch2&#xff09;使用本地MNIST进行手写图片训练3&#xff09;…

客户案例:某家居制造企业跨境电商,解决业务端(亚马逊平台)、易仓ERP与财务端(金蝶ERP)系统间的业务财务数据对账互通

一、系统定义 1、系统定位&#xff1a; 数据中台系统是一种战略选择和组织形式&#xff0c;通过有型的产品支撑和实施方法论&#xff0c;解决企业面临的数据孤岛、数据维护混乱、数据价值利用低的问题&#xff0c;依据企业特有的业务和架构&#xff0c;构建一套从数据汇聚、开…

服务器一次性部署One API + ChatGPT-Next-Web

服务器一次性部署One API ChatGPT-Next-Web One API ChatGPT-Next-Web 介绍One APIChatGPT-Next-Web docker-compose 部署One API ChatGPT-Next-WebOpen API docker-compose 配置ChatGPT-Next-Web docker-compose 配置docker-compose 启动容器 后续配置 同步发布在个人笔记服…