【OK210试用体验】第三弹 裸机系列之循环点亮 led 灯 - 在线问答 - 电子威廉希尔官方网站 论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】第三弹 裸机系列之循环点亮 led 灯

1、 查看原理图
OK210 开发板提供了 4 个 LED,其原理如下:



对应的 ARM 的GPIO管脚


由原理图可知,LED D1,D2,D3,D4 使用GPIO端口为 MP04_4,5,6,7。
针对该GPIO,进行配置使用C语言编程如下:
main.c
#define MP0_4CON  (*(volatile unsigned long *)0xE0200340)
#define MP0_4DAT (*(volatile unsigned long *)0xE0200344)
#define GPD0CON    (*(volatile unsigned long *)0xE02000A0)
#define MP0_4PUD        (*(volatile unsigned long *)0xE0200348)
void clock_init(void);
void putc(char c);
void uart_init(void);
void putout(char * c);
int print(const char *fmt, ...);
static void Delay(int count)
{
    volatile int i, j = 0;
    volatile static int loop = 800000000/10000;
    for(;count > 0;count‐‐)
    for(i=0;i < loop; i++) { j++; }
}
void main(void)
{
    int i;
    GPD0CON &= ~(0xF << 0);//关闭蜂鸣器
    MP0_4CON = (MP0_4CON & ~0xFFFF0000) | 0x11110000; //设置高 4 为管脚为输出方式
    MP0_4PUD=(0x55<<16)&MP0_4PUD;//设置为下拉方式
  clock_init();
    uart_init();
  //MP0_4DAT |= 0xF0;
  for( i=4;i<8;i++)//关闭 led
  {
    MP0_4DAT |= ( 1<< i);
    Delay(100000);  
  }
while(1)
  {
    for( i=4;i<8;i++)//循环点亮 led
    {      
            print[3]= i+45;
      print1[3]= i+45;
      MP0_4DAT &= ~( 1<< i);                 
            putout(print);
      Delay(300000);  
      MP0_4DAT |= ( 1<< i);
            putout(print1);
      Delay(300000);  
    }

  }
}
第一步 执行MP0_4CON = (MP0_4CON & ~0xFFFF0000) | 0x11110000; 语句设置MP0_4CON寄存器
高四位为输出功能。
执行 MP0_4PUD=(0x55<<16)&MP0_4PUD;语句 将高四位设为下拉方式。
第二步 关闭 4 个 led
第三步 循环点亮 4 个 led  执行 MP0_4DAT &= ~( 1<< i));点亮 led,执行 MP0_4DAT |= ( 1<< (i));关
闭 led。


0个回复

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

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-9-22 20:23 , Processed in 0.304119 second(s), Total 33, Slave 24 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表