三个按键分别控制三个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< }
上一篇:驱动-按键-中断模式
下一篇:Keil(MDK-ARM)系列教程(一)_新建软件工程详细过程
推荐阅读
史海拾趣
为了满足市场的不断增长的需求,昭华公司在2016年成立了昭华智硕东莞工厂。这座工厂拥有先进的生产设备和完善的生产流程,能够大幅提高公司的生产效率和产品质量。同时,昭华公司还不断优化供应链管理,加强与供应商的合作,确保原材料的稳定供应。这些举措不仅提高了公司的产能,还降低了生产成本,增强了公司的市场竞争力。
随着全球环保意识的提高,Adam Tech也积极响应绿色制造的号召。公司在生产过程中采用环保材料和工艺,减少对环境的影响。同时,公司还加大了对绿色产品的研发力度,推出了一系列符合环保标准的产品。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。
这五个故事只是Adam Tech在电子行业发展过程中的一部分缩影。正是凭借着对技术的不断追求、对品质的严格把控以及对市场的敏锐洞察,Adam Tech得以在激烈的竞争中脱颖而出,成为电子连接器行业的佼佼者。
ENPIRION公司的成立源于其创始人对于电源管理技术的深刻理解和独到见解。在2001年,该创始人凭借在贝尔实验室的器件及工艺发明,决定在美国创办ENPIRION公司,致力于开发创新的电源管理解决方案。这一决定标志着ENPIRION公司的诞生,也为其后续的快速发展奠定了坚实的基础。
面对激烈的市场竞争,振华始终将技术创新作为企业发展的核心动力。公司投入大量资金进行技术研发,积极引进国内外先进技术,并与高校、科研机构建立紧密的合作关系。通过持续的技术创新,振华在电子产品领域取得了多项重要突破,推出了一系列具有自主知识产权的高新产品,引领了市场潮流。
町洋注重企业文化建设,倡导以人为本的管理理念。公司为员工提供了良好的工作环境和福利待遇,并积极开展各种培训和学习活动,帮助员工提升自身素质和专业技能。这种关注员工成长和发展的企业文化使得町洋的凝聚力不断增强,为公司的持续发展提供了有力保障。
町洋公司创立于1983年,由一群志同道合的电子工程师创立。创业初期,町洋专注于接线端子及相关产品的研发与生产,凭借其独特的设计理念和精湛的生产工艺,逐渐在台湾市场上崭露头角。公司创始人深知产品质量的重要性,因此始终坚持严格的品质控制,赢得了客户的信赖。
老手讲心得,新手讲迷惑 每个人都经历过初学阶段,有些很顺利,有些则很曲折,有些甚至还在徘徊!更有一些感叹!那就都在这说出来吧,说说自己的经历,自己难忘的经历!当作是一种回味,也给后来人一些经验和教训! 新手也要抓紧时间,有 ...… 查看全部问答∨ |
.mif和.hex文件都是Quartus支持的数据文件格式,常被用作内存初始化文件。可是,M odelSim却不支持.mif文件,只支持.hex文件格式,这意味着如果你的设计采用了.mif文件 ,你的设计将无法在ModelSim中进行仿真。所以,我们需要用Quartus打开. ...… 查看全部问答∨ |
我的倾角传感器输出电压很奇怪,按照道理说平放是输出电压是2.5V,但是现在是一会儿是3.9V左右,一会儿又降到1.4V。有的时候也能在2.5V左右晃动,我估计是坏掉了。但我换了一块以后那个的输出电压直接就变成了0V。现在手头就2个传感器,没有办法了 ...… 查看全部问答∨ |
规划未来2年的路线:开发20款ARM/MIPS开发板,请大家帮忙芯片选型和推荐! 目前已经成功开发了 S3C44B0X、S3C2410、S3C2440、AT91SAM9260、AT91SAM9261、AT91SAM9263、JZ4755。 接着打算做 PXA270(目前市场上还有不少270芯片,可以低价购买) PXA310(这个暂时还犹豫不决,还没找到合适的SDK) S3C2416(资料丰富,批量价 ...… 查看全部问答∨ |
我用的是IAR软件,用C编写程序,在做三星单片机的时候(S3C9454)时,发现一个问题,S3C9454里面的SMART OPTION(3CH,3DH,3EH,3FH)不知道该如何初始化,有朋友会的请帮帮忙吧,谢谢!… 查看全部问答∨ |
|
本帖最后由 ddllxxrr 于 2016-1-7 17:00 编辑 RT. 笔记本的坏了,新的太贵。买个旧的来用着先。联系QQ523335234 注明硬盘 … 查看全部问答∨ |