复制代码- /*
- 文件名:main.s
- 时间:2011.3.23 作者:kissyyg
- 功能:按键K1到K4被按下时相应的led1到led4被点亮,K5被按下时全亮,K6按下时蜂鸣器响。
- */
- #define GPBCON *((volatile unsigned long*)0x56000010)
- #define GPBDAT *((volatile unsigned long*)0x56000014)
- #define GPGCON *((volatile unsigned long*)0x56000060)
- #define GPGDAT *((volatile unsigned long*)0x56000064)
- //对应led1,2,3,4的io口,做输出
- #define GPB5_OUT (1<<(5*2))
- #define GPB6_OUT (1<<(6*2))
- #define GPB7_OUT (1<<(7*2))
- #define GPB8_OUT (1<<(8*2))
- //蜂鸣器io口,作输出
- #define GPB0_OUT (1<<(0*2))
- //对应按键1,2,3,4,5,6的的io口,做输入
- #define GPG0_IN ~(3<<(0*2))
- #define GPG3_IN ~(3<<(3*2))
- #define GPG5_IN ~(3<<(5*2))
- #define GPG6_IN ~(3<<(6*2))
- #define GPG7_IN ~(3<<(7*2))
- #define GPG11_IN ~(3<<(11*2))
- //led事件的定义,点灯给低电平,灭灯相反,键被按下为低电平
- #define led1_on ~(1<<5)
- #define led2_on ~(1<<6)
- #define led3_on ~(1<<7)
- #define led4_on ~(1<<8)
- #define led_all_on ~((1<<5)|(1<<6)|(1<<7)|(1<<8))
- #define led1_down (1<<5)
- #define led2_down (1<<6)
- #define led3_down (1<<7)
- #define led4_down (1<<8)
- #define led_all_down ((1<<5)|(1<<6)|(1<<7)|(1<<8))
- //按键事件定义,键被按下读得为低电平否则为高电平
- #define k1_down (1<<0)
- #define k2_down (1<<3)
- #define k3_down (1<<5)
- #define k4_down (1<<6)
- #define k5_down (1<<7)
- #define k6_down (1<<11)
- //蜂鸣器,给高则发声否则不发
- #define beep (1<<0)
- #define beep_stop ~(1<<0)
- int main()
- {
-
-
- unsigned long dwData;;
-
- //配置端口的输入输出
-
- GPBCON = GPB0_OUT | GPB5_OUT | GPB6_OUT | GPB7_OUT | GPB8_OUT;
- GPGCON = GPG0_IN & GPG3_IN & GPG5_IN & GPG6_IN & GPG7_IN;
-
- //循环查询是否有键被按下
-
- while(1)
- {
- dwData = GPGDAT;
-
- if(dwData & k1_down) //k1没被按下
- GPBDAT |= led1_down; //led1灭
- else
- GPBDAT &= led1_on; //否则亮
-
-
- if(dwData & k2_down) //k2没被按下
- GPBDAT |= led2_down; //led2灭
- else
- GPBDAT &= led2_on; //否则亮
-
-
- if(dwData & k3_down) //k3没被按下
- GPBDAT |= led3_down; //led3灭
- else
- GPBDAT &= led3_on; //否则亮
-
-
- if(dwData & k4_down) //k4没被按下
- GPBDAT |= led4_down; //led4灭
- else
- GPBDAT &= led4_on; //否则亮
-
-
- if(dwData & k5_down) //k5没被按下
- ; //什么也不做
- else
- GPBDAT &= led_all_on; //否则全亮
-
-
- if(dwData & k6_down) //键6没被按
- GPBDAT &= beep_stop;
- else
- GPBDAT |= beep; //否则响
-
- }
-
- return 0;
- }
- ;文件名:main.s
- ;时间:2011.3.23 作者:kissyyg
- ;功能:设置堆栈,关掉看门狗,跳转到main()函数执行
- IMPORT main
- CODE32
- AREA test,CODE,READONLY
- ENTRY
-
- START LDR r0, =0x53000000 ;disable dog
- MOV r1, #0x0
- STR r1, [r0]
- LDR sp, =1024*4 ;init stack
- BL main ;call main fron main.c
- LOOP
- B LOOP
-
- END
|
希望大家一起讨论指正,我的程序自己都在板子上验证过,下期中断,请您静静等候!