历史上的今天
今天是:2024年09月16日(星期一)
2019年09月16日 | 中断-按键控制LED灯
2019-09-16 来源:eefocus
三个按键分别控制三个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< }
史海拾趣
|
摘要 首先对比分析在执行大规模数据转移时,传统805l单片机和进行DPTR扩展后的805l单片机在数据转移执行效率上的差别。通过详细分析DPTR操作所涉及的因素,具体实现对DPTR的扩展,并进行实际仿真测试。 关键词 805l单片机DPTR 数据转移执行效率 ...… 查看全部问答> |
|
No printer Installed Altium Designer winter09 输出PDF出错 Altium Designer 有个软件自带的功能 就是能输出原理图为PDF格式文件 具体操作是 文件--智能PDF 可是我的为什么总是在输出的时候出错呢 如下图: 提示 No printer Installed 而且生成的PDF是空白,什么都没有 请问有知道怎么解决 ...… 查看全部问答> |
|
新产品快递High-Side Current Monitors Simplify Measurement at High Voltage Diodes’ High-Side Current Monitors Simplify Measurement at High Voltage Diodes Incorporated has introduced a family of 6 high reliability current monitors for 40V and 60V operation. The ZXCT108X devices dete ...… 查看全部问答> |
|
开发板是SEED-L138 内核也是用厂商自带的,通过tftp下载到板子,成功, 可是不能bootm ---------------------------------------------------- Hit any key to stop autoboot: 0Us ...… 查看全部问答> |
|
见的19种pcb线路板印刷问题 1.在印制中容易粘板,或者图像含糊不清。 2.模板上的线条图像,象蚯蚓弯曲不齐。 3.在印刷单层板时,印数低,感光胶部分脱落。 4.在印刷多层板时,印数低,网孔逐渐增多,掉胶,漏印,糊板,印不到位,最严 ...… 查看全部问答> |
|
周期短,可周末,如您想挣点外块,积累资源,充实生活,请联系我,要求有实际项目经历,两年以上项目经历,表达能力较好,有意者请联系QQ:2294693830,邮件shixiuhong@info-soft.cn。 北京中科信软科技有限公司(以下简称中科信软)作为中国领先的 ...… 查看全部问答> |




