中断方式实现跑马灯

简介: 中断方式实现跑马灯宏定义初始化延迟跑马灯中断主函数


宏定义



#include "ioCC2530.h"
#define LED1 P1_0
#define LED2 P1_5
#define LED3 P1_3
#define LED4 P1_4
#define uint unsigned int
#define uchar unsigned char


初始化



void Init(void)
{
    //P1SEL &= ~0x1B;   //设置P1_0、P1_5、P1_3和P1_4为普通I/O
    P1DIR |=0x39;      //设置P1_0、P1_5、P1_3和P1_4为为输出口
    LED1=LED2=LED3=LED4=0;           //全部熄灭LED
}


延迟



uint flag_Pause=0;
void delay(uint);
void delay(uint time)
{ uint i;
  uchar j;
  for(i = 0; i < time; i++)
  {  for(j = 0; j < 240; j++) 
      {   asm("NOP");    // asm是内嵌汇编,nop是空操作,执行一个指令周期
          asm("NOP");
          asm("NOP");
          while(flag_Pause);    // 根据flag_Pause的值确定是否在此循环
       }  
   }  
}


跑马灯



void LSD(void)
{
    LED2=1;                  //点亮LED2  
    LED1=LED3=LED4=0;      //熄灭LED2、LED3和LED4
    delay(1200);               // 延时
    LED1=1;                 //点亮LED1  
    LED2=LED3=LED4=0;    //熄灭LED1、LED3和LED4
    delay(1200);             // 延时
    LED4=1;               //点亮LED4  
    LED1=LED2=LED3=0;    //熄灭LED1、LED2和LED3
    delay(1200);             // 延时
    LED3=1;               //点亮LED4 
    LED1=LED2=LED4=0;   //熄灭LED1、LED2和LED4
    delay(1200);             // 延时
}


中断



#pragma vector = P1INT_VECTOR
__interrupt void P1_INT(void) 
{
  if (P1IFG & 0x04)       //如果P1_2口中断标志位置位
  {
    if(flag_Pause ==0)
    {
       flag_Pause =1;
    }
    else
    {
       flag_Pause =0;
    }
    P1IFG &= ~0x04;   //清除P1_2口中断标志位
  }
  P1IF=0;     //清除P1口中断标志位
 }


主函数



void main(void)
{
  Init();  //初始化
  /***********************新增外部中断初始化******************/
  IEN2 |=0x10;         //使能P1口中断
  P1IEN  |=0x04;      //使能P1_2口中断
  PICTL |=0x02;       // P1_3到P1_0口下降沿触发中断
  EA =1;             // 使能总中断
  /*************************************************************/
  while(1)   //程序主循环
  {
     LSD(); 
  }
}


相关文章
|
存储 缓存 IDE
VirtualBox实现共享剪贴板
VirtualBox实现共享剪贴板
885 0
|
10月前
|
存储 编译器 C语言
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
本文档介绍了C语言环境配置和编程任务,主要内容包括: - **C语言环境配置**:详细讲解了在Windows系统上配置C语言开发环境的步骤。 - **第1关:程序改错**:包含任务描述、相关知识(如头文件引用、基本语法规则)、编程要求、测试说明及通关代码。 - **第2关:scanf函数**:涉及`scanf`和`printf`函数的格式与使用方法,提供编程要求、测试说明及通关代码。 文档结构清晰,涵盖从环境搭建到具体编程任务的完整流程,适合初学者学习和实践。
294 4
|
2月前
|
自然语言处理 算法 数据安全/隐私保护
item_review - Lazada 商品评论列表接口深度分析及 Python 实现
Lazada商品评论接口(item_review)可获取东南亚多国用户评分、评论内容、购买属性等数据,助力卖家分析消费者偏好、优化产品与营销策略。
|
存储 数据可视化 数据挖掘
图书馆图书可视化分析+大屏
在数字化时代背景下,图书馆已经成为知识获取和共享的重要场所。然而,随着馆藏书籍数量的增加,如何高效管理和利用这些资源成为了图书馆管理者和用户面临的挑战。数据分析和可视化技术的引入为解决这一问题提供了新的途径。本文致力于通过数据分析技术和可视化手段,对图书馆书籍数据进行综合挖掘,希望通过图书分类、书籍价格及读者偏好等多维度信息,进而优化图书馆管理策略、指导书籍采购决策并提升读者服务质量。本文在数字化和信息化快速发展的背景下,图书馆如何利用数据分析与可视化方法来挖掘和优化书籍借阅数据。主要内容包括。
1191 2
|
存储 网络协议 安全
IP地址、MAC地址、互联网、WLAN、运营商、子网掩码、网络地址、网段、网关、集线器、光纤、基站
IP地址、MAC地址、互联网、WLAN、运营商、子网掩码、网络地址、网段、网关、集线器、光纤、基站
576 0
|
监控 调度 数据安全/隐私保护
ERP系统中的财务预算与资金管理解析
【7月更文挑战第25天】 ERP系统中的财务预算与资金管理解析
856 2
|
缓存 运维 Docker
容器化运维:Docker Desktop 占用磁盘空间过大?教你轻松解决!
Windows Docker Desktop 使用过程中,因镜像、容器数据及构建缓存的累积,可能导致磁盘空间占用过高。通过删除无用镜像与容器、压缩磁盘以及清理构建缓存等方法,可有效释放空间。具体步骤包括关闭WSL、使用`diskpart`工具压缩虚拟磁盘、执行`docker buildx prune -f`清理缓存等。这些操作能显著减少磁盘占用,提升系统性能。
3456 5
|
消息中间件 存储 微服务
RPC 和消息队列的区别
RPC 和消息队列的区别
567 0
|
存储 机器学习/深度学习 人工智能
深入浅出 AI 智能体(AI Agent)|技术干货
随着人工智能技术的发展,智能体(AI Agents)逐渐成为人与大模型交互的主要方式。智能体能执行任务、解决问题,并提供个性化服务。其关键组成部分包括规划、记忆和工具使用,使交互更加高效、自然。智能体的应用涵盖专业领域问答、资讯整理、角色扮演等场景,极大地提升了用户体验与工作效率。借助智能体开发平台,用户可以轻松打造定制化AI应用,推动AI技术在各领域的广泛应用与深度融合。
30140 1