在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

news2025/2/11 12:41:15

引言

在单片机开发中,外部中断是一个非常重要的功能,它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能:一种是在中断服务函数中直接进行延时,另一种是在中断服务函数中设置标志变量,在主循环中进行延时。

硬件连接

首先,我们需要将J5处的跳帽接到2~3引脚,这样S5按键将连接到P32/INT0,S4按键将连接到P33/INT1。这样,当按下S5按键时,P32引脚将产生一个下降沿信号,触发外部中断0。

代码实现

1. 直接在中断服务函数中延时

在这种方式中,我们将在中断服务函数中直接进行延时操作。以下是完整的代码实现:

#include <REGX52.H>

sbit L1 = P0^1;  // 定义L1指示灯
sbit L8 = P0^7;  // 定义L8指示灯

void SeletcHC573()
{
    P2 = (P2 & 0x1f) | 0x80;  // 选择HC573锁存器
}

void Delay(unsigned int t)
{
    while(t--);  // 简单的延时函数
}

void working()
{
    SeletcHC573();
    L1 = 0;  // 点亮L1
    Delay(60000);  // 延时
    L1 = 1;  // 熄灭L1
    Delay(60000);  // 延时
}

void Init_INT0()
{
    IT0 = 1;  // 设置INT0为下降沿触发
    EX0 = 1;  // 使能外部中断0
    EA = 1;   // 使能总中断
}

void ServiceINT0() interrupt 0 
{
    L8 = 0;  // 点亮L8
    Delay(60000);  // 延时
    Delay(60000);
    Delay(60000);
    Delay(60000);
    Delay(60000);
    Delay(60000);
    L8 = 1;  // 熄灭L8
}

void main()
{
    Init_INT0();  // 初始化外部中断0
    while(1)
    {
        working();  // 主循环中不断调用working函数
    }
}

2. 在中断服务函数中设置标志变量,在主循环中延时

在这种方式中,我们将在中断服务函数中设置一个标志变量,然后在主循环中根据这个标志变量来控制L8的亮灭。以下是完整的代码实现:

#include <REGX52.H>

sbit L1 = P0^1;  // 定义L1指示灯
sbit L8 = P0^7;  // 定义L8指示灯

void SeletcHC573()
{
    P2 = (P2 & 0x1f) | 0x80;  // 选择HC573锁存器
}

void Delay(unsigned int t)
{
    while(t--);  // 简单的延时函数
}

void working()
{
    SeletcHC573();
    L1 = 0;  // 点亮L1
    Delay(60000);  // 延时
    L1 = 1;  // 熄灭L1
    Delay(60000);  // 延时
}

void Init_INT0()
{
    IT0 = 1;  // 设置INT0为下降沿触发
    EX0 = 1;  // 使能外部中断0
    EA = 1;   // 使能总中断
}

unsigned char stat_int = 0;  // 定义中断标志变量

void ServiceINT0() interrupt 0 
{
    stat_int = 1;  // 设置中断标志变量
}

void LEDINT()
{
    if(stat_int == 1)
    {
        L8 = 0;  // 点亮L8
        Delay(60000);  // 延时
        Delay(60000);
        Delay(60000);
        Delay(60000);
        Delay(60000);
        Delay(60000);
        L8 = 1;  // 熄灭L8
    }
    stat_int = 0;  // 清除中断标志变量
}

void main()
{
    Init_INT0();  // 初始化外部中断0
    while(1)
    {
        working();  // 主循环中不断调用working函数
        LEDINT();   // 检查中断标志变量并控制L8
    }
}

代码解析

1. 直接在中断服务函数中延时

  • SeletcHC573():选择HC573锁存器,确保P0口的输出能够控制LED。

  • Delay():一个简单的延时函数,通过循环递减来实现延时。

  • working():控制L1指示灯不断闪烁。

  • Init_INT0():初始化外部中断0,设置为下降沿触发,并使能中断。

  • ServiceINT0():中断服务函数,当按下S5按键时,进入该函数,点亮L8并进行延时后熄灭。

2. 在中断服务函数中设置标志变量,在主循环中延时

  • stat_int:定义一个全局变量作为中断标志。

  • ServiceINT0():中断服务函数,当按下S5按键时,设置stat_int为1。

  • LEDINT():在主循环中检查stat_int,如果为1,则点亮L8并进行延时后熄灭,最后清除stat_int

总结

本文详细介绍了如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们通过两种不同的方式实现了这一功能:一种是在中断服务函数中直接进行延时,另一种是在中断服务函数中设置标志变量,在主循环中进行延时。这两种方式各有优缺点,第一种方式简单直接,但可能会影响主循环的执行;第二种方式更加灵活,能够更好地处理复杂的任务。

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

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

相关文章

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

Visual Studio Code中文出现黄色框子的解决办法

Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”&#xff0c;往下滑动&#xff0c;找到“Un…

“可通过HTTP获取远端WWW服务信息”漏洞修复

环境说明&#xff1a;①操作系统&#xff1a;windows server&#xff1b;②nginx&#xff1a;1.27.1。 1.漏洞说明 “可通过HTTP获取远端WWW服务信息”。 修复前&#xff0c;在“响应标头”能看到Server信息&#xff0c;如下图所示&#xff1a; 修复后&#xff0c;“响应标头…

CAD 屏幕进度条

参考鸿视频实现&#xff0c;代码如下&#xff1a; 主类 using System.IO.Ports; using System.Threading; using System.Windows.Controls; using static IFoxDemo.进度条class; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;//[assembly: C…

小红书爬虫: 获取所需数据

小红书&#xff0c;又名 “小红书 ”或简称 “红”&#xff0c;已迅速成为中国社交和电子商务领域的重要参与者&#xff0c;成为一个不可或缺的平台。对于企业、营销人员和数据分析师来说&#xff0c;从小红书收集数据可以获得宝贵的洞察力&#xff0c;从而推动业务增长。虽然这…

使用sunshine和moonlight串流时的音频输出问题

设备&#xff1a;电脑和平板串流&#xff0c;把平板当副屏使用 1.如果启用安装steam音频驱动程序&#xff0c;则平板有声&#xff0c;电脑无声&#xff0c;在moonlight端可以设置平板和电脑同时发声&#xff0c;但是有点卡 2.只想电脑发声&#xff0c;平板无声 禁用安装steam…

活动预告 |【Part 2】Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动&#xff0c;了解如何更好地在 Microsoft 365 Defen…

网络工程师 (26)TCP/IP体系结构

一、层次 四层&#xff1a; 网络接口层&#xff1a;TCP/IP协议的最底层&#xff0c;负责网络层与硬件设备间的联系。该层协议非常多&#xff0c;包括逻辑链路和媒体访问控制&#xff0c;负责与物理传输的连接媒介打交道&#xff0c;主要功能是接收数据报&#xff0c;并把接收到…

GIS笔记之Shapefile与KML相互转换

在GIS应用中&#xff0c;各种不同类型数据的转换与使用是一个重要的环节。在这其中&#xff0c;Shapefile和KML是两种常见的数据形式&#xff0c;两者间的相互转换也是日常工作和学习绕不开的话题。在这里&#xff0c;我们将常用的几种数据转换方法整理如下。 1.Shapefile和KM…

【UVM】寄存器模型

寄存器模型的优势 sequence复用性高&#xff0c;方便对 DUT 中寄存器进行读写&#xff1b;提供了后门访问方式&#xff0c;可以不耗时的获取寄存器的值&#xff1b;可以很方便的对寄存器的 coverage 验证点的收集 寄存器模型基本概念 寄存器模型概念作用uvm_reg_field寄存器模…

WordPress博客在fnOS环境下的极简搭建与公网地址配置指南

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 你是否曾经为搭建自己的网站而头疼不已&#xff1f;是不是觉得…

计算机毕业设计SpringBoot校园二手交易小程序 校园二手交易平台(websocket消息推送+云存储+双端+数据统计)(源码+文档+运行视频+讲解视频)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

2025年前端面试题~ 【前端面试】更新

前言 金三银四的招聘季即将来临&#xff0c;对于怀揣前端梦想的求职者而言&#xff0c;这是机遇与挑战并存的黄金时段。前端面试可不只是简单的问答&#xff0c;它是一场对综合能力的深度检验。面试官会从多个维度考量&#xff0c;比如扎实的 HTML、CSS 和 JavaScript 基础&…

从基础到人脸识别与目标检测

前言 从本文开始&#xff0c;我们将开始学习ROS机器视觉处理&#xff0c;刚开始先学习一部分外围的知识&#xff0c;为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本&#xff0c;系统采用Ubuntu20.04&#xff0c;ROS采用noetic。 颜…

Photoshop自定义键盘快捷键

编辑 - 键盘快捷键 CtrlShiftAltK 把画笔工具改成Q , 橡皮擦改成W , 涂抹工具改成E , 增加和减小画笔大小A和S 偏好设置 - 透明度和色域 设置一样颜色 套索工具 可以自定义套选一片区域 Shiftf5 填充 CtrlU 可以改颜色/色相/饱和度 CtrlE 合并图层 CtrlShiftS 另存…

LSTM的介绍

网上一些描述LSTM文章看的云里雾里&#xff0c;只是介绍LSTM 的结构&#xff0c;并没有说明原理。我这里用通俗易懂的话来描述一下。 我们先来复习一些RNN的核心公式&#xff1a; h t t a n h ( W h h t − 1 W x x t b h ) h_t tanh(W_h h_{t-1} W_x x_t b_h) ht​tan…

C++ ——从C到C++

1、C的学习方法 &#xff08;1&#xff09;C知识点概念内容比较多&#xff0c;需要反复复习 &#xff08;2&#xff09;偏理论&#xff0c;有的内容不理解&#xff0c;可以先背下来&#xff0c;后续可能会理解更深 &#xff08;3&#xff09;学好编程要多练习&#xff0c;简…

AI技术填坑记2:标注系统

在问答中,通用大模型往往拥有不可控性,而在正常的业务系统里面,往往有自己的各种专门的术语和内容,标注系统可以对大量数据进行标记,确认大模型解答的结果符合设想。 一、总体思路 一个标注,一般分为模块、应用、提问词汇、标注值,其中,模块可以认为是一种应用分类;应…

【机器学习】超参数的选择,以kNN算法为例

分类准确度 一、摘要二、超参数的概念三、调参的方法四、实验搜索超参数五、扩展搜索范围六、考虑距离权重的kNN算法七、距离的计算方法及代码实现八、明可夫斯基距离的应用九、网格搜索超参数 一、摘要 本博文讲解了机器学习中的超参数问题&#xff0c;以K近邻算法为例&#…

哪吒闹海!SCI算法+分解组合+四模型原创对比首发!SGMD-FATA-Transformer-LSTM多变量时序预测

哪吒闹海&#xff01;SCI算法分解组合四模型原创对比首发&#xff01;SGMD-FATA-Transformer-LSTM多变量时序预测 目录 哪吒闹海&#xff01;SCI算法分解组合四模型原创对比首发&#xff01;SGMD-FATA-Transformer-LSTM多变量时序预测效果一览基本介绍程序设计参考资料 效果一览…