認識ARM7-- LPC2124—Philips
當作8位51模式用:熟悉、理解保留字、數據模式、硬件接口與擴展à內置
1) 單個LED燈(位操作—輸出)與多(8及其整倍數)個LED燈(字節操作—輸出)—最小系統,僅有輸出的單片機系統
1) 單個LED燈,位操作—輸出
2) 多(8及其整倍數)個LED燈,字節操作—輸出
3) 單個與多個LED燈,位與字節混合操作—輸出
4) 單個LED燈閃爍—延時函數
5) 多個LED燈閃爍或流動—延時函數—流水燈
6) 多種軟控制形成流水燈
1) 單位輸出—一個LED燈顯示
了解ARM
A) 硬件操作
打開-Proteus,
選取ARM芯片LPC2124、R電阻、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-輸出口PINSEL0、PINSEL1設置各引腳的功能。
IO0DIR = 0x000001;//將P0.0設置為輸出 ,P0~7口用0x0000ff
IO0SET = 0x000001;//將P0.0置1,也就是讓led滅(因:外接高電平); P0~7口用0x0000ff
while (1)
{
IO0CLR = 0x000001;// 使led亮
delay();
IO0SET = 0x000001;
delay();
}
程序說明:
GPIO
做輸入輸出。以P0口為例,寄存器有IO0PIN、IO0SET、IO0DIR、IO0CLR。
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系列數值的發送格式0x00與0x0FF
程序可讀性差,使用數組比較恰當
專用的數據格式的變化,可以用于數碼管的顯示驅動
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.09置1,也就是讓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.15置1,也就是讓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.31置1,也就是讓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+16位LED顯示流水燈,可以理解LPC2124的各個管腳、端口的功能。
---------------數組也顯得不方便—移位功能好使-----------------





