本帖最后由 ddllxxrr 于 2015-10-31 22:03 编辑
由于我的开发板有四个LED,所以在昨天的基础上我想跑一下流水灯,思路不难,只要点亮就行了。高电平是灭,低电平是亮。
除了昨天的PA0 还有PC20,PC22,PC23,我刚开始忘记了管脚从零开始跑了几圈也没有成功。
后来改过成功了。从这个程序,我搞懂了,只要使能端口就是给这个管脚时钟了,而不用象某种单片机必须得使能时钟哈。
编译通过了,下载时注意,当调入BIN文件后,点发送
出现如下界面:点否。然后点执行
下载后,LED灯象流水一样一个接一个的亮灭了。
程序如下:
#include "sam.h"
/*[延时子函数声明]*/
void Delay(int num)
{ for (volatile int i = 0; i < 1000 * 1024 * num; ++i );
}
/*[主程序]*/
int main(void)
{ SystemInit(); /*初始化*/
PIOA->PIO_PER = (uint32_t)0x01; /* 让PIO控制器直接控制PA0引脚 PIO 使能 */
PIOA->PIO_OER = (uint32_t)0x01; /* PIO 输出使能 */
PIOA->PIO_OWER = (uint32_t)0x01; /* PIO 输出写使能 */
PIOC->PIO_PER = (uint32_t)0x00d00000; /* 让PIO控制器直接控制PC20,PC22,PC23引脚 PIO 使能 */
PIOC->PIO_OER = (uint32_t)0x00d00000; /* PIO 输出使能 */
PIOC->PIO_OWER = (uint32_t)0x00d00000; /* PIO 输出写使能 */
PIOA->PIO_SODR = (uint32_t)0x01; /* 设置PA0引脚为高电平,灯灭 */
PIOC->PIO_SODR = (uint32_t)0x00100000; /* 设置PC20引脚为高电平,灯灭 */
PIOC->PIO_SODR = (uint32_t)0x00400000; /* 设置PC22引脚为高电平,灯灭 */
PIOC->PIO_SODR = (uint32_t)0x00800000; /* 设置PC23引脚为高电平,灯灭 */
while (1)
{
Delay(2); /*延迟*/
PIOA->PIO_SODR = (uint32_t)0x01; /* 设置PA0引脚为高电平,灯灭 */
Delay(2); /*延迟*/
PIOA->PIO_CODR = (uint32_t)0x01; /* 设置PA0引脚为低电平,灯亮 */
Delay(2); /*延迟*/
PIOA->PIO_SODR = (uint32_t)0x01; /* 设置PA0引脚为高电平,灯灭 */
Delay(2); /*延迟*/
PIOC->PIO_SODR = (uint32_t)0x00100000; /* 设置PC20引脚为高电平,灯灭 */
Delay(2); /*延迟*/
PIOC->PIO_CODR = (uint32_t)0x00100000; /* 设置PC20引脚为低电平,灯亮 */
Delay(2); /*延迟*/
PIOC->PIO_SODR = (uint32_t)0x00100000; /* 设置PC20引脚为高电平,灯灭 */
Delay(2); /*延迟*/
PIOC->PIO_SODR = (uint32_t)0x00400000; /* 设置PC22引脚为高电平,灯灭 */
Delay(2); /*延迟*/
PIOC->PIO_CODR = (uint32_t)0x00400000; /* 设置PC22引脚为低电平,灯亮 */
Delay(2); /*延迟*/
PIOC->PIO_SODR = (uint32_t)0x00400000; /* 设置PC22引脚为高电平,灯灭 */
Delay(2); /*延迟*/
PIOC->PIO_SODR = (uint32_t)0x00800000; /* 设置PC23引脚为高电平,灯灭 */
Delay(2); /*延迟*/
PIOC->PIO_CODR = (uint32_t)0x00800000; /* 设置PC23引脚为低电平,灯亮 */
Delay(2); /*延迟*/
PIOC->PIO_SODR = (uint32_t)0x00800000; /* 设置PC23引脚为高电平,灯灭 */
}
}
|