專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

ARM—LPC2124—NXP實(shí)踐

作者:佚名   來(lái)源:互聯(lián)網(wǎng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月10日   【字體:

認(rèn)識(shí)ARM7-- LPC2124—Philips

 

當(dāng)作851模式用:熟悉、理解保留字、數(shù)據(jù)模式、硬件接口與擴(kuò)展à內(nèi)置

1)             單個(gè)LED燈(位操作輸出)與多(8及其整倍數(shù))個(gè)LED燈(字節(jié)操作—輸出)最小系統(tǒng),僅有輸出的單片機(jī)系統(tǒng)

1)        單個(gè)LED燈,位操作輸出

2)        多(8及其整倍數(shù))個(gè)LED燈,字節(jié)操作輸出

3)        單個(gè)與多個(gè)LED燈,位與字節(jié)混合操作輸出

4)        單個(gè)LED燈閃爍延時(shí)函數(shù)

5)        多個(gè)LED燈閃爍或流動(dòng)延時(shí)函數(shù)—流水燈

6)        多種軟控制形成流水燈

 

 

 

 

 

1)    輸出一個(gè)LED燈顯示

了解ARM

A)        硬件操作

打開(kāi)-Proteus,

選取ARM芯片LPC2124R電阻、LED燈、電源(設(shè)置正電位)與接地

連線(xiàn)完成(可以將二極管的極性調(diào)換,使用高電位或低電位)

保存文件

B)        軟件操作

打開(kāi)- Keil,

建立新的工程、設(shè)置或選擇ARM芯片LPC2124、

建立新文件、編寫(xiě)控制代碼、保存文件為*.C、添加到工作區(qū)

設(shè)置時(shí)鐘頻率、設(shè)置輸出的編譯文件*.HEX

鏈接編譯、編譯修改

保存文件

C)        控制指令軟件編寫(xiě)

 

***************單位輸出一個(gè)LED燈顯示*************

#include  

//軟件延時(shí)函數(shù): delay()—用戶(hù)自定義函數(shù)

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;//設(shè)置引腳為GPIO-輸出口PINSEL0、PINSEL1設(shè)置各引腳的功能。

IO0DIR = 0x000001;//P0.0設(shè)置為輸出 P0~7口用0x0000ff

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

  while (1) 

{

IO0CLR = 0x000001;// 使led

       delay();

      IO0SET = 0x000001;

       delay();

  }

 

程序說(shuō)明:

 

GPIO

做輸入輸出。以P0口為例,寄存器有IO0PINIO0SET、IO0DIR、IO0CLR。

 

D)        仿真結(jié)果

打開(kāi)-Proteus的仿真文件,雙擊芯片LPC2124,選擇需要仿真的文件路徑,選取*.HEX文件,OK;

點(diǎn)擊仿真按鈕,觀(guān)察結(jié)果,修改軟硬件,調(diào)整仿真時(shí)鐘頻率;

 

2)    多位輸出—LEDs燈顯示流水燈

A)      硬件操作

同前

B)       軟件操作

同前

C)      控制指令軟件編寫(xiě)

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

void delay (void) //軟件延時(shí)函數(shù)

                        

  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();

  }

}

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

程序說(shuō)明:

該程序表明了

可以注意數(shù)值的發(fā)送格式0x000080;這里總計(jì)8位,每位代表4個(gè)二進(jìn)制數(shù),總共32位?0x00000000==二進(jìn)制0000 0000 0000 0000 0000 0000 0000 0000

0x0000FFFF==二進(jìn)制0000 0000 1111 1111 1111 1111 1111 1111

注意對(duì)比8位的51系列數(shù)值的發(fā)送格式0x000x0FF

程序可讀性差,使用數(shù)組比較恰當(dāng)

專(zhuān)用的數(shù)據(jù)格式的變化,可以用于數(shù)碼管的顯示驅(qū)動(dòng)

D)      仿真結(jié)果

打開(kāi)-Proteus的仿真文件,雙擊芯片LPC2124,選擇需要仿真的文件路徑,選取*.HEX文件,OK;

點(diǎn)擊仿真按鈕,觀(guān)察結(jié)果,修改軟硬件,調(diào)整仿真時(shí)鐘頻率;

3)    多位輸出—LEDs燈顯示流水燈

A)      硬件操作

同前

B)       軟件操作

同前

C)      控制指令軟件編寫(xiě)

 

//流水燈

#include                        

        

void delay (void)//  軟件延時(shí)函數(shù)delay()

                        

  unsigned volatile long i,j;

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

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

}

 

int main(void)

 {

  PINSEL0 = 0;    //PINSEL0設(shè)置引腳為GPIO PINSEL1設(shè)置?

  IO0DIR = 0x0003FF;//P0.0~P0.09設(shè)置為輸出,陽(yáng)極硬件--高電平,陰極硬件可取反;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();

  }

}

程序說(shuō)明:

程序書(shū)寫(xiě)的繁瑣可以看到數(shù)組的好處。程序編寫(xiě)用循環(huán)結(jié)構(gòu)的好處

D)      仿真結(jié)果

 

 

 

4)    多位輸出—LEDs燈顯示流水燈位掃描數(shù)組

 

A)      硬件操作

同前

B)       軟件操作

同前

C)      控制指令軟件編寫(xiě)

 

//流水燈--數(shù)組

#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)//  軟件延時(shí)函數(shù)delay()

                        

  unsigned volatile long i,j;

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

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

}

 

int main(void)

 {

  PINSEL0 = 0;    //PINSEL0設(shè)置引腳為GPIO ;PINSEL1設(shè)置?

  IO0DIR = 0x0fffFF;//P0.0~P0.15設(shè)置為輸出,陽(yáng)極硬件--高電平,陰極硬件可取反;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();

         }       

  }

}

程序說(shuō)明:

程序書(shū)寫(xiě)簡(jiǎn)潔,可讀性好;可以看到數(shù)組的好處。程序編寫(xiě)用循環(huán)結(jié)構(gòu)的好處

 

---------數(shù)組也顯得不方便移位功能好使--------------

//流水燈—38LED—數(shù)組

#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)// 軟件延時(shí)函數(shù)delay()

                        

  unsigned volatile long i,j;

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

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

}

 

int main(void)

 {

  PINSEL0 = 0;  //PINSEL0設(shè)置引腳為GPIO ;

  IO0DIR = 0x0FFFFFFFF;//P0.0~P0.31設(shè)置為輸出,陽(yáng)極硬件--高電平,陰極硬件也不能取反; 

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

  IODIR1 = 0x0ffff0000;//P1.16~P1.31設(shè)置為輸出,陽(yáng)極硬件--高電平,陰極硬件也不能取反; 

  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();

     }

      }    

  }

}

程序說(shuō)明:

通過(guò)使用32+16LED顯示流水燈,可以理解LPC2124的各個(gè)管腳、端口的功能。

 

---------------數(shù)組也顯得不方便移位功能好使-----------------













 

關(guān)閉窗口

相關(guān)文章