fengyv

http://www.cnblogs.com/fengyv

导航

基础实验一GPIO(流水灯)

Posted on 2012-07-16 09:04  fengyv  阅读(687)  评论(0编辑  收藏  举报

 

硬件连接比较简单,只需将Nu-Link和M0转换板对应接口(VCC DAT CLK RST GND)用杜邦线连接,再连接PC-USB端口即可。平台搭建也跳过,直接上图;

just  code  it :

[cpp]  view plain copy
  1. /* 
  2.  ------------------------------------------------------------ 
  3.  *作    者:小AX 
  4.  *功 能 描 述:通过软件延时函数实现LED灯实现顺流逆流等变化效果. 
  5.  ------------------------------------------------------------ 
  6.  */  
  7. #include "SmartM_M0.h"  
  8.   
  9. /**************************************** 
  10. *函数名称:main 
  11. *输    入:无 
  12. *输    出:无 
  13. *功    能:函数主体 
  14. ******************************************/  
  15.   
  16. INT32 main(VOID)  
  17. {  
  18.      UINT32 i;  
  19.      UINT32 rand();  
  20.      PROTECT_REG  
  21.      (  
  22.          PWRCON |= XTL12M_EN;  
  23.          //默认时钟源为外部晶振,PWRCON为系统掉电控制寄存器  
  24.          while((CLKSTATUS & XTL12M_STB) == 0);  
  25.          //等待12MHz时钟稳定(CLKSTATUS时钟状态监控寄存器)        
  26.          CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M;    
  27.          //设置外部晶振为系统时钟(CLKSEL0 时钟源选择控制寄存器0)  
  28.            
  29.          P2_PMD=0x5555;                             //GPIO设置为输出模式  
  30.      )  
  31.   
  32.      while(1)  
  33.      {    
  34.          for(i=0; i<8; i++)  
  35.            {  
  36.                P2_DOUT = ~(1UL<<i);                  //移位操作,顺流  
  37.   
  38.                Delayms(100);  
  39.                                                    //延时100ms  
  40.            }  
  41.                                                   
  42.           for(i=1; i<8; i++)  
  43.            {  
  44.                P2_DOUT = ~(128UL>>i);            //移位操作,逆流  
  45.   
  46.                Delayms(100);  
  47.                                                    //延时100ms  
  48.            }    
  49.                 
  50.           for(i=0;i<4;i++)  
  51.            {  
  52.                P2_DOUT = ~((8UL>>i)|(16UL<<i));    //移位操作,中间望向两端跑  
  53.   
  54.                Delayms(100);  
  55.                                                    //延时100ms  
  56.            }    
  57.   
  58.           for(i=0;i<4;i++)  
  59.            {  
  60.                P2_DOUT = ~((64UL>>i)|(2UL<<i));    //移位操作,两端向中间跑  
  61.   
  62.                Delayms(100);  
  63.                                                    //延时100ms  
  64.            }     
  65.                  
  66.                P2_DOUT=0xff;  
  67.                Delayms(1000);                      //全体灭灯  
  68.                                                    //延时1000ms  
  69.               
  70.           for(i=0; i<24; i++)  
  71.            {  
  72.                P2_DOUT = rand();                   //移位操作,随机闪烁  
  73.   
  74.                Delayms(100);                         
  75.            }                                       //延时100ms  
  76.               
  77.      }  
  78. }