中断-按键控制LED灯

发布者:WiseSage123最新更新时间:2019-09-16 来源: eefocus关键字:中断  按键控制  LED灯 手机看文章 扫描二维码
随时随地手机看文章

三个按键分别控制三个LED灯

完整项目请去我的资源下载页xjp的资源

初始化函数:

/*

 * init.c: 进行一些初始化

 */ 

 

#include "s3c24xx.h"

 

/*

 * LED1,LED2,LED4对应GPF4、GPF5、GPF6

 */

#define GPF4_out (1<<(4*2)) //定义为01 输出

#define GPF5_out (1<<(5*2))

#define GPF6_out (1<<(6*2))

 

#define GPF4_msk (3<<(4*2)) //定义为11

#define GPF5_msk (3<<(5*2))

#define GPF6_msk (3<<(6*2))

 

/*

 * S2,S3,S4对应GPF0、GPF2、GPG3

  EINT0    EINT2 EINT11

 */

#define GPF0_eint     (0x2<<(0*2)) //10

#define GPF2_eint     (0x2<<(2*2))

#define GPG3_eint     (0x2<<(3*2)) //3*2:    2 代表一个节点站两位

 

#define GPF0_msk    (3<<(0*2)) //11

#define GPF2_msk    (3<<(2*2))

#define GPG3_msk    (3<<(3*2))

 

/*

 * 关闭WATCHDOG,否则CPU会不断重启

 *操作WTCON寄存器

 */

void disable_watch_dog(void)

{

   WTCON = 0;  // 关闭WATCHDOG很简单,往这个寄存器写0即可

}

 

void init_led(void)

{

    // LED1,LED2,LED4对应的3根引脚设为输出

   GPFCON &= ~(GPF0_msk|GPF2_msk|GPG3_msk);//先清零

   GPFCON |=(GPF4_out|GPF5_out|GPF6_out);//后置位

}

 

/*

 * 初始化GPIO引脚为外部中断

 * GPIO引脚用作外部中断时,默认为低电平触发、IRQ方式(不用设置INTMOD)

 */ 

void init_irq( )

{

    // S2,S3对应的2根引脚设为中断引脚 EINT0,ENT2

  GPFCON &= ~(GPF0_msk|GPF2_msk);//

  GPFCON |=    (GPF0_eint|GPF2_eint);

 

    // S4对应的引脚设为中断引脚EINT11

       GPGCON &= ~GPG3_msk;

GPGCON |= GPG3_eint;

    

    // 对于EINT11,需要在EINTMASK寄存器中使能它

    EINTMASK &= ~(1<<11);//【11】位清零

EINTMASK |=    (0<<11);//【11】位写零

//EINTMASK[11]中写零,等价于

//EINTMASK &= ~(1<<11);

        

    /*

     * 设定优先级:

     * ARB_SEL0 = 00b, ARB_MODE0 = 0: REQ1 > REQ3,即EINT0 > EINT2

     * 仲裁器1、6无需设置

     * 最终:

     * EINT0 > EINT2 > EINT11即K2 > K3 > K4

     * 在PRIORITY中设置

     */

 

 

     //PRIORITY 复位值为0x7f          0111 1111      

     // ARB_SEL0 = 00b,[8:7]=00      ARB_MODE0 = 0  [0]=0

    PRIORITY &= ~((3<<7)|(1<<0));

 

    

 

    // EINT0、EINT2、EINT8_23使能,在INTMSK中设置

     INTMSK   &= (~(1<<0)) & (~(1<<2)) & (~(1<<5));

}

 

 

 

中断函数

#include "s3c24xx.h"

 

void EINT_Handle()

{

    unsigned long oft = INTOFFSET;//读取中断偏移量

    unsigned long val;

    

    switch( oft )

    {

        // S2被按下,LED1点亮,再次按下,LED1熄灭

          case 0: //EINT0

        {   

            GPFDAT |= (0x7<<4);   // 所有LED熄灭

            GPFDAT &= ~(1<<4);      // LED1点亮

            break;

        }

        // S3被按下,LED2点亮,再次按下,LED2熄灭

         case 2://EINT2

        {   

            GPFDAT |= (0x7<<4);   // 所有LED熄灭

            GPFDAT &= ~(1<<5);      // LED2点亮

            break;

        }

        // K4被按下,LED3点亮,再次按下,LED3熄灭

          case 5://EINT11

        {   

            GPFDAT |= (0x7<<4);   // 所有LED熄灭

            GPFDAT &= ~(1<<6);      // LED4点亮                

            break;

        }

 

        default:

            break;

    }

 

    //清中断

    if( oft == 5 ) 

        EINTPEND = (1<<11);   // EINT8_23合用IRQ5

    SRCPND = 1<    INTPND = 1<    

}


关键字:中断  按键控制  LED灯 引用地址:中断-按键控制LED灯

上一篇:驱动-按键-中断模式
下一篇:Keil(MDK-ARM)系列教程(一)_新建软件工程详细过程

推荐阅读最新更新时间:2024-11-13 06:22

51单片机外部中断的C51编程
学习到中断这卡壳了,先是理解不了两种触发,现在是自己写查询方式的也不对。可能是心不静,也没好好来想想到底是为啥不行?从网上粘点学习的过来吧!我越来越懒了。 以下来自网址: http://bbs.cepark.com/forum.php?mod=viewthread&tid=35813&page=1 谢谢原创! 相关知识: 1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0; 2、中断源的编号: 串行口中断为4、定时中断1为3、外部中断1为2、定时中断0为1、外部中断0为0; 3、中断源的优先级:按以上顺序排列,串行口中断最低、外部中断0最高; 4、使用外部中断0和1,必
[单片机]
STM32 I2C从机发送数据_中断方式
在调试stm32 I2C中断方式发送数据时,发现上篇介绍的内容有很多不足之处,对I2C时序也有了新的认识。 上篇文章介绍在数据发送完成后,发送NACK和STOP,然后向从机DR寄存器写了一个没用的数据,目的是为了清楚传输完成事件。其实文档中说的很明白,再倒数第二个数之后发送NACK和STOP,当时没有理解,现在看来确实是这样。 利用中断方法时,对发送NACK及STOP要求比较严格,调试时在多个位置都测试了下,发现只有在读取寄存器最后一个数据之前发送NACK和STOP,但要在主机接收事件之后,逻辑代码如下: //这段代码顺序不能改变,否则无法终止总线 { /*检测主机接收数据完成事件*/
[单片机]
TQ2440 学习笔记—— 21、中断体系结构
中断体系结构: S3C2440一共有60个中断源,其中有15个子中断源,它们与SUBSRCPND寄存器中的每一位相对应,其他45个中断源与SRCPND中的每一位相对应。要注意的是EINT4~7对应的是同一位SRCPND ,而EINT8~23对应的也是SRCPND 一位。 一、ARM 体系CPU 的 7 种工作模式 1、用户模式 2、快速中断模式 3、中断模式 4、管理模式 5、数据访问终止模式 6、系统模式 7、未定义指令中止模式 二、异常 三、中断处理过程 a 如果是不带子中断的内部中断:发生后SRCPND相应位置1,如果没有被INTMSK屏蔽,那么等待进一步处理。 b 如果是带
[单片机]
TQ2440 学习笔记—— 21、<font color='red'>中断</font>体系结构
宝马车型将配录制按键 直接控制GoPro相机
    根据国外媒体报道,GoPro和宝马在最近达成了一项新的合作关系,后者部分的新车型将很快能够直接从仪表盘上对GoPro相机进行控制。只需按下仪表盘上的录制按键,相连的GoPro相机便会开始记录所看到的一切。     从今年7月份起,2012年款或之后的宝马或Mini车型都将可以控制具备Wi-Fi功能的GoPro相机。相机的配套应用必须安装在和汽车相连的iPhone上,在连接之后,司机就可以从BMW ConnectedDrive或Mini Connected菜单当中选择GoPro应用、查看相机的视角并控制录制。当汽车处于静止状态时,相机所拍摄到的图像便会实时传输到仪表盘上。而汽车启动之后,视频流便会停止。    
[汽车电子]
单片机定时器与串口中断的问题
{ TMOD |= 0x20; //0011 0000 SCON = 0x50; //0101,0000 TH1 = 0xFA; TL1 = 0xFA; TMOD = 0x01; //应该改成TMOD |= 0x01; TH0 = 0x70; TL0 = 0xc6; ET0=1; ES = 1; // EA = 1; // TR0 = 1; TR1 = 1; // } 如上是串口中断初始化和定时器T0初始化,,,咋一看没有啥问题,, 但注意了,在设置定时器的TMOD时,应使用TMOD |= 0x01,,,否则串口中断是不工作的,,,,这些小问题总是很恼火~~~~~
[单片机]
51单片机---点亮LED灯
LED工作条件 普通发光二极管的工作压降为1.6V – 2.1V 工作电流 1-20mA 此处I = U/R = 3mA 点亮LED 这里在只需控制P1口输出低电平即可点亮LED(即编程时给P1口赋值0) 单片机编程 /***点亮第三颗 第六颗灯***/ #include reg52.h sbit LED3 = P1^2; //位定义 第三颗灯 sbit LED6 = P1^5; //第六颗灯 void main(){ LED3 = 0 ; LED6 = 0; } 如果灯多的话上面那种方法太麻烦 可以改写为以下代码 #include reg52.h void main(){ P1 = 0x
[单片机]
51单片机---点亮<font color='red'>LED灯</font>
STM32 串口中断总结
简介:本文以USART1为例,叙述串口中断的编程过程。一般情况下我们使用原始的外设和GPIO端口引脚的映射关系,如果要改变其映射的话,请另外查看参考手册上关于GPIO重映射部分。对于GPIO的复用,其引脚的输入与输出模式都有要求. 1、先来讲述一下在应用串口中断时涉及到的一些库文件。 首先对于STM32外设库文件的应用编程,misc.c和stm32f10x_rcc.c是肯定要添加到。 接下来就是我们要用到的相关外设了。毫无疑问,串口文件stm32f10x_usart.c是必须的。串口通信是对通用GPIO端口引脚的功能复用,所以还需要stm32f10x_gpio.c文件。另外,因为有中断的产生,所以中断文件stm32f10
[单片机]
PIC的中断入口
在PIC的一些中、低端型号中,往往只有一个中断函数入口,而且没有中断优先级,这对于很多在学校学习89C51核出来的学生,往往给他们带来一定的学习障碍。 1、PIC中档MCU的中断入口固定为ROM首叶的0X0004地址,无论发生什么样的中断,应用程序都将被打断并跳转到这个地址去执行相关的中断处理函数。 2、在51系列中,中断源的区分是由硬件完成的,但在PIC上,这个需要工程师自己通过软件去判断。 3、因为只有一个中断入口,所以也没有51那样的两级中断优先级,具体何种中断源应该优先执行完全由工程师自己的软件确定,这是通过中断函数中的中断源查询代码的顺序决定的,可以把这个概念称呼为软件优先级。 4、PIC的中断结构决定了PIC一
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved