加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

按键实现arm开发板led灯

发布时间:2020-12-15 06:58:30 所属栏目:百科 来源:网络整理
导读:1、新建一个工程,命名为“button_led”,再在工程下新建一个文件start.s。 ? /* start.s */ ? ? area init,code,readonly??????????????????????????????? //该伪指令定义了一个代码段,段名为Init,属性只读 ??b begin????????????????????????????????????

1、新建一个工程,命名为“button_led”,再在工程下新建一个文件start.s。

?

/* start.s */

?

? area init,code,readonly??????????????????????????????? //该伪指令定义了一个代码段,段名为Init,属性只读
??b begin?????????????????????????????????????????????????????????? //跳转到begin处执行
?
begin???????????????????????????????????????????????????
?
??? ldr sp,=1024*4?????????????????????????????????? //设置堆栈,注意:不能大于4k,因为现在可用的内只有4K存?只有4K,nand flash中的代码在复位后会移到内部ram中,此ram只有4K
??? export main???????????????????????????????????????? //声明主函数Main?????????????????????????????????????????????????????????????
??? b main???????????????????????????????????????????????? //调用C程序中的main函数
??? end

2、再新建一个头文件对端口进行初始化和宏定义。

?

/*? button.h? */

?

#ifndef _LED_
#define _LED_

#define rGPBCON (*((volatile unsigned *)0x56000010))?????????? //定义一个寄存器变量(详细请访问链接地址:http://www.voidcn.com/article/p-nwhhuwdl-tb.html
#define rGPBDAT (*((volatile unsigned *)0x56000014))??????????? //Port B数据寄存器 #... 要想实现对G口的配置,只要在地址0x56000060中给32位的每一位赋值就可以了#define rGPGCON? ((*(volatile unsigned *)0x56000060))?????????
#define rGPGDAT? ((*(volatile unsigned *)0x56000064))


? #define LED1_ON rGPBDAT&=(~(0x1<<5))
? #define LED2_ON rGPBDAT&=(~(0x1<<6))
? #define LED3_ON rGPBDAT&=(~(0x1<<7))
? #define LED4_ON rGPBDAT&=(~(0x1<<8))

? #define LED1_OFF rGPBDAT|=(0x1<<5)
? #define LED2_OFF rGPBDAT|=(0x1<<6)
? #define LED3_OFF rGPBDAT|=(0x1<<7)
? #define LED4_OFF rGPBDAT|=(0x1<<8)
?#endif

?

3、在工程中再新建一个源文件,button.c 。

/* button.c */

?

#include "dey.h"

int delay(unsigned int n)
{
?while(n--);
?return 0;
}

int main()
{
?rGPBCON |= 0x15400;
?while(1)
?{
??if((rGPGDAT &0x1)==0x0)
???LED1_ON;
???delay(1000);
??if((rGPGDAT &0x8)==0x0)
???LED2_ON;
???delay(1000);
??if((rGPGDAT &0x20)==0x0)
???LED3_ON;
???delay(1000);
??if((rGPGDAT &0x40)==0x0)
???LED4_ON;
???delay(1000);
??if((rGPGDAT&0x1)==0x1)
?????? ??LED1_OFF;
??? ?if((rGPGDAT&0x8)==0x8)
???????? LED2_OFF;
??? ?if((rGPGDAT&0x20)==0x20)
?????? ??LED3_OFF;
??? ?if((rGPGDAT&0x40)==0x40)
????? ? ?LED4_OFF;
????? ? ?delay(1000);
??if((rGPGDAT&0x80)==0x0)
????? ?{
????? ?? int i=5;
????? ?? while(i!=0)
????? ?? {
????? ?? LED1_ON;
????????? delay(1000000);
????????? LED2_ON;
????????? delay(1000000);
????????? LED3_ON;
????????? delay(1000000);
????????? LED4_ON;
????????? delay(1000000);
????????? LED1_OFF;
????????? delay(1000000);
????????? LED2_OFF;
????????? delay(1000000);
????????? LED3_OFF;
????????? delay(1000000);
????????? LED4_OFF;
????????? delay(1000000);
????????? i--;
????????? }
????? ?}????? ??
????? ?if((rGPGDAT &0x800)==0x0)
????? ?{
????? ??LED1_ON;
????? ??LED2_ON;
????? ??LED3_ON;
????? ??LED4_ON;
????? ?}
?}
?return 0; ?
}

?

总结:以上代码能编译通过,但如果对每个键在button.h中进行宏定义,则编译能通过,但得不到正确的结果。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读