[Atmel] 用SAM-BA或JLINK跑ATSAM4E16的程序(2)流水灯

[复制链接]
 楼主| ddllxxrr 发表于 2015-10-27 19:19 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2015-10-31 22:03 编辑

由于我的开发板有四个LED,所以在昨天的基础上我想跑一下流水灯,思路不难,只要点亮就行了。高电平是灭,低电平是亮。

除了昨天的PA0 还有PC20,PC22,PC23,我刚开始忘记了管脚从零开始跑了几圈也没有成功。

后来改过成功了。从这个程序,我搞懂了,只要使能端口就是给这个管脚时钟了,而不用象某种单片机必须得使能时钟哈。

编译通过了,下载时注意,当调入BIN文件后,点发送



出现如下界面:点否。然后点执行


下载后,LED灯象流水一样一个接一个的亮灭了。

程序如下:


  1. #include "sam.h"

  2. /*[延时子函数声明]*/
  3. void Delay(int num)
  4. {        for (volatile int i = 0; i < 1000 * 1024 * num; ++i );
  5. }
  6. /*[主程序]*/
  7. int main(void)
  8. {   SystemInit();                    /*初始化*/
  9.         PIOA->PIO_PER = (uint32_t)0x01;  /* 让PIO控制器直接控制PA0引脚 PIO 使能 */
  10.         PIOA->PIO_OER = (uint32_t)0x01;  /* PIO 输出使能 */
  11.         PIOA->PIO_OWER = (uint32_t)0x01; /* PIO 输出写使能 */
  12.         
  13.         PIOC->PIO_PER = (uint32_t)0x00d00000;  /* 让PIO控制器直接控制PC20,PC22,PC23引脚 PIO 使能 */
  14.         PIOC->PIO_OER = (uint32_t)0x00d00000;  /* PIO 输出使能 */
  15.         PIOC->PIO_OWER = (uint32_t)0x00d00000; /* PIO 输出写使能 */
  16.         PIOA->PIO_SODR = (uint32_t)0x01; /* 设置PA0引脚为高电平,灯灭 */
  17.         PIOC->PIO_SODR = (uint32_t)0x00100000; /* 设置PC20引脚为高电平,灯灭 */
  18.         PIOC->PIO_SODR = (uint32_t)0x00400000; /* 设置PC22引脚为高电平,灯灭 */
  19.         PIOC->PIO_SODR = (uint32_t)0x00800000; /* 设置PC23引脚为高电平,灯灭 */
  20.         
  21.         
  22.         
  23.         while (1)
  24.         {   
  25.                 Delay(2);                        /*延迟*/
  26.                 PIOA->PIO_SODR = (uint32_t)0x01; /* 设置PA0引脚为高电平,灯灭 */
  27.                 Delay(2);                        /*延迟*/
  28.                 PIOA->PIO_CODR = (uint32_t)0x01; /* 设置PA0引脚为低电平,灯亮 */
  29.                 Delay(2);                        /*延迟*/
  30.                 PIOA->PIO_SODR = (uint32_t)0x01; /* 设置PA0引脚为高电平,灯灭 */
  31.                
  32.                 Delay(2);                        /*延迟*/
  33.                 PIOC->PIO_SODR = (uint32_t)0x00100000; /* 设置PC20引脚为高电平,灯灭 */
  34.                 Delay(2);                        /*延迟*/
  35.                 PIOC->PIO_CODR = (uint32_t)0x00100000; /* 设置PC20引脚为低电平,灯亮 */
  36.                 Delay(2);                        /*延迟*/
  37.                 PIOC->PIO_SODR = (uint32_t)0x00100000; /* 设置PC20引脚为高电平,灯灭 */
  38.                
  39.                 Delay(2);                        /*延迟*/
  40.                 PIOC->PIO_SODR = (uint32_t)0x00400000; /* 设置PC22引脚为高电平,灯灭 */
  41.                 Delay(2);                        /*延迟*/
  42.                 PIOC->PIO_CODR = (uint32_t)0x00400000; /* 设置PC22引脚为低电平,灯亮 */
  43.                 Delay(2);                        /*延迟*/
  44.                 PIOC->PIO_SODR = (uint32_t)0x00400000; /* 设置PC22引脚为高电平,灯灭 */
  45.                
  46.                 Delay(2);                        /*延迟*/
  47.                 PIOC->PIO_SODR = (uint32_t)0x00800000; /* 设置PC23引脚为高电平,灯灭 */
  48.                 Delay(2);                        /*延迟*/
  49.                 PIOC->PIO_CODR = (uint32_t)0x00800000; /* 设置PC23引脚为低电平,灯亮 */
  50.                 Delay(2);                        /*延迟*/
  51.                 PIOC->PIO_SODR = (uint32_t)0x00800000; /* 设置PC23引脚为高电平,灯灭 */
  52.                
  53.                
  54.         }
  55. }





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部