本帖最后由 yuanpooo 于 2014-5-12 16:41 编辑
最近买了块TinyM0,放了一个多月没用,这两天用了下,对GPIO管脚进行了一些宏定义,使其可以像51一样进行读写,当然,还是有些区别的。先上代码:
- #ifndef __LPC11XX_GPIO_H__
- #define __LPC11XX_GPIO_H__
- #include "lpc11xx.h"
- #define TO_MEMORY_ADDR(AddrValue) *((volatile unsigned long *)(AddrValue))
- //GPIO管脚快捷操作的宏定义
- //演示,已GPIO2_7为例
- //输出0:P2(7) = 0; 输出1:P2(7) = 1<<7; 或者 P2(7) = 0xffff;
- //读入:x = P2(7); 当输入为0时,读入为0;当输入为1时,读入为1<<7
- //BitNumber 必须小于12
- #define P0(BitNumber) (TO_MEMORY_ADDR(LPC_GPIO0_BASE + (0x00000004<<BitNumber)))
- #define P1(BitNumber) (TO_MEMORY_ADDR(LPC_GPIO1_BASE + (0x00000004<<BitNumber)))
- #define P2(BitNumber) (TO_MEMORY_ADDR(LPC_GPIO2_BASE + (0x00000004<<BitNumber)))
- #define P3(BitNumber) (TO_MEMORY_ADDR(LPC_GPIO3_BASE + (0x00000004<<BitNumber)))
- #endif
复制代码
附件是一个工程,基于TinyM0的一个操作LED闪烁的例子,就是利用上面的宏定义进行操作的,部分代码如下:
- #define LED P2(7)
- int main(void)
- {
- uint8_t i = 10;
- //配置系统时钟
- SystemInit();
- LED_Init();
-
- while (1)
- {
- while (i--)
- {
- LED = 0; //点亮
- myDelay(100);
- LED = 0xffff; //熄灭
- myDelay(100);
- }
- i = 5;
-
- while (i--)
- {
- LED = 0; //点亮
- myDelay(500);
- LED = 1<<7; //熄灭
- myDelay(500);
- }
- i = 10;
- }
- }
复制代码