专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

ARM—LPC2124—NXP实践

作者:佚名   来源:互联网   点击数:  更新时间:2014年08月10日   【字体:

认识ARM7-- LPC2124—Philips

 

当作851模式用:熟悉、理解保留字、数据模式、硬件接口与扩展à内置

1)             单个LED灯(位操作输出)与多(8及其整倍数)个LED灯(字节操作—输出)最小系统,仅有输出的单片机系统

1)        单个LED灯,位操作输出

2)        多(8及其整倍数)个LED灯,字节操作输出

3)        单个与多个LED灯,位与字节混合操作输出

4)        单个LED灯闪烁延时函数

5)        多个LED灯闪烁或流动延时函数—流水灯

6)        多种软控制形成流水灯

 

 

 

 

 

1)    输出一个LED灯显示

了解ARM

A)        硬件操作

打开-Proteus

选取ARM芯片LPC2124R电阻、LED灯、电源(设置正电位)与接地

连线完成(可以将二极管的极性调换,使用高电位或低电位)

保存文件

B)        软件操作

打开- Keil

建立新的工程、设置或选择ARM芯片LPC2124

建立新文件、编写控制代码、保存文件为*.C、添加到工作区

设置时钟频率、设置输出的编译文件*.HEX

链接编译、编译修改

保存文件

C)        控制指令软件编写

 

***************单位输出一个LED灯显示*************

#include  

//软件延时函数: delay()—用户自定义函数

void delay (void) 

  unsigned volatile long i,j;

  for(i=0;i<60000;i++)

  for(j=0;j<5;j++)

}

int main(void)

{

PINSEL0 = 0;//设置引脚为GPIO-输出口PINSEL0PINSEL1设置各引脚的功能。

IO0DIR = 0x000001;//P0.0设置为输出 P0~7口用0x0000ff

IO0SET = 0x000001;//P0.01,也就是让led灭(因:外接高电平); P0~7口用0x0000ff

  while (1) 

{

IO0CLR = 0x000001;// 使led

       delay();

      IO0SET = 0x000001;

       delay();

  }

 

程序说明:

 

GPIO

做输入输出。以P0口为例,寄存器有IO0PINIO0SETIO0DIRIO0CLR

 

D)        仿真结果

打开-Proteus的仿真文件,双击芯片LPC2124,选择需要仿真的文件路径,选取*.HEX文件,OK

点击仿真按钮,观察结果,修改软硬件,调整仿真时钟频率;

 

2)    多位输出—LEDs灯显示流水灯

A)      硬件操作

同前

B)       软件操作

同前

C)      控制指令软件编写

///////////////////////////////

void delay (void) //软件延时函数

                        

  unsigned volatile long i,j;

  for(i=0;i<60000;i++);

  for(j=0;j<8;j++);

}

 

int main(void)

 {

  PINSEL0 = 0;   

  IO0DIR = 0x0000FF;

  IO0SET = 0x0000FF;      

  while (1)

   {

      IO0CLR = 0x000001;

       delay();

      IO0SET = 0x000001;

       delay();

             IO0CLR = 0x000002;

       delay();

      IO0SET = 0x000002;

       delay();

             IO0CLR = 0x000004;

       delay();

      IO0SET = 0x000004;

       delay();

             IO0CLR = 0x000008;

       delay();

      IO0SET = 0x000008;

       delay();

              IO0CLR = 0x000010;

       delay();

      IO0SET = 0x000010;

       delay();

             IO0CLR = 0x000020;

       delay();

      IO0SET = 0x000020;

       delay();

             IO0CLR = 0x000040;

       delay();

      IO0SET = 0x000040;

       delay();

             IO0CLR = 0x000080;

       delay();

      IO0SET = 0x000080;

       delay();

  }

}

////////////////////////////////

程序说明:

该程序表明了

可以注意数值的发送格式0x000080;这里总计8位,每位代表4个二进制数,总共32位?0x00000000==二进制0000 0000 0000 0000 0000 0000 0000 0000

0x0000FFFF==二进制0000 0000 1111 1111 1111 1111 1111 1111

注意对比8位的51系列数值的发送格式0x000x0FF

程序可读性差,使用数组比较恰当

专用的数据格式的变化,可以用于数码管的显示驱动

D)      仿真结果

打开-Proteus的仿真文件,双击芯片LPC2124,选择需要仿真的文件路径,选取*.HEX文件,OK

点击仿真按钮,观察结果,修改软硬件,调整仿真时钟频率;

3)    多位输出—LEDs灯显示流水灯

A)      硬件操作

同前

B)       软件操作

同前

C)      控制指令软件编写

 

//流水灯

#include                        

        

void delay (void)//  软件延时函数delay()

                        

  unsigned volatile long i,j;

  for(i=0;i<60000;i++);

  for(j=0;j<9;j++);

}

 

int main(void)

 {

  PINSEL0 = 0;    //PINSEL0设置引脚为GPIO PINSEL1设置?

  IO0DIR = 0x0003FF;//P0.0~P0.09设置为输出,阳极硬件--高电平,阴极硬件可取反;DIR 

  IO0SET = 0x0003FF;       //P0.0~P0.091,也就是让led

  while (1)

   {

      IO0CLR = 0x000001;

       delay();

      IO0SET = 0x000001;

       delay();

             IO0CLR = 0x000002;

       delay();

      IO0SET = 0x000002;

       delay();

             IO0CLR = 0x000004;

       delay();

      IO0SET = 0x000004;

       delay();

             IO0CLR = 0x000008;

       delay();

      IO0SET = 0x000008;

       delay();

              IO0CLR = 0x000010;

       delay();

      IO0SET = 0x000010;

       delay();

             IO0CLR = 0x000020;

       delay();

      IO0SET = 0x000020;

       delay();

             IO0CLR = 0x000040;

       delay();

      IO0SET = 0x000040;

       delay();

             IO0CLR = 0x000080;

       delay();

      IO0SET = 0x000080;

       delay();

                    IO0CLR = 0x000100;

       delay();

      IO0SET = 0x000100;

       delay();

                    IO0CLR = 0x000200;

       delay();

      IO0SET = 0x000200;

       delay();

  }

}

程序说明:

程序书写的繁琐可以看到数组的好处。程序编写用循环结构的好处

D)      仿真结果

 

 

 

4)    多位输出—LEDs灯显示流水灯位扫描数组

 

A)      硬件操作

同前

B)       软件操作

同前

C)      控制指令软件编写

 

//流水灯--数组

#include

typedef unsigned int uint;                     

 uint const SaoMiao_TAB[]={0x000001,0x000002,0x000004,0x000008,0x000010,0x000020,0x000040,0x000080,0x000100,

0x000200,0x000400,0x000800,0x001000,0x002000,0x004000,0x008000,0x010000,0x020000,0x040000,0x080000};

        

void delay (void)//  软件延时函数delay()

                        

  unsigned volatile long i,j;

  for(i=0;i<60000;i++);

  for(j=0;j<9;j++);

}

 

int main(void)

 {

  PINSEL0 = 0;    //PINSEL0设置引脚为GPIO PINSEL1设置?

  IO0DIR = 0x0fffFF;//P0.0~P0.15设置为输出,阳极硬件--高电平,阴极硬件可取反;DIR 

  IO0SET = 0x0fffFF;  //P0.0~P0.151,也就是让led

   

  while (1)

   {

   unsigned volatile long n;

         for(n=0;n<20;n++)

         {

      IO0CLR = SaoMiao_TAB[n];

       delay();

      IO0SET = SaoMiao_TAB[n];

       delay();

         }       

  }

}

程序说明:

程序书写简洁,可读性好;可以看到数组的好处。程序编写用循环结构的好处

 

---------数组也显得不方便移位功能好使--------------

//流水灯—38LED—数组

#include

typedef unsigned int uint;                     

 uint const SaoMiao_TAB[]={0x000001,0x000002,0x000004,0x000008,0x000010,0x000020,0x000040,0x000080,0x000100,0x000200,0x000400,0x000800,0x001000,0x002000,0x004000,0x008000,0x010000,0x020000,0x040000,0x080000,0X100000,0X0200000,0X0400000,0X0800000, 0X01000000,0X02000000,0X040000000,0X080000000};

 

uint const SaoMiao_TAB1[]={0x010000,0x020000,0x040000,0x080000,0x100000,0x200000,0x400000,0x800000,0x01000000,0x02000000,0x04000000,0x08000000,0x010000000,0x020000000,0x040000000,0x080000000};

        

void delay (void)// 软件延时函数delay()

                        

  unsigned volatile long i,j;

  for(i=0;i<60000;i++);

  for(j=0;j<9;j++);

}

 

int main(void)

 {

  PINSEL0 = 0;  //PINSEL0设置引脚为GPIO

  IO0DIR = 0x0FFFFFFFF;//P0.0~P0.31设置为输出,阳极硬件--高电平,阴极硬件也不能取反; 

  IO0SET = 0x0FFFFFFFF; //P0.0~P0.311,也就是让led

  IODIR1 = 0x0ffff0000;//P1.16~P1.31设置为输出,阳极硬件--高电平,阴极硬件也不能取反; 

  IOSET1 = 0x0ffff0000;

   

  while (1)

   {

   unsigned volatile long n,m;

      for(n=0;n<32;n++)

      {

    IO0CLR = SaoMiao_TAB[n];

    delay();

    IO0SET = SaoMiao_TAB[n];

    delay();

          for(m=0;m<16;m++)

          {

    IOCLR1 = SaoMiao_TAB1[m];

    delay();

    IOSET1 = SaoMiao_TAB1[m];

    delay();

     }

      }    

  }

}

程序说明:

通过使用32+16LED显示流水灯,可以理解LPC2124的各个管脚、端口的功能。

 

---------------数组也显得不方便移位功能好使-----------------













 

关闭窗口

相关文章