ARM 學(xué)習(xí)筆記之二 LED點亮程序設(shè)計
第一步,先聊聊單片機 LED 點亮:
單片機可操作單個位:sbit led1 = P1 ^ 2;
通過控制 變量 led1 來控制燈 的 亮 與 滅;
#include
sbit led1 = P1 ^ 2;
void delay(unsigned int xx)//延時
{
int i = 0;
while(xx--)
{
for(i = 0; i < 400; i++);
}
}
int main()
{
while(1)
{
led1 = 1//滅
delay(100);
led1 = 0;//亮
delay(100);
}
}
這是單片機的點燈實驗,下面我們將它引入到 ARM 上:
ARM 中不能像單片機那樣進行單個的位操作,必須是整體,但也很簡單...
有這么幾個步驟:
(1)分析電路(需要操作哪個燈,這是你要做的)
(2)分析驅(qū)動方式(查詢寄存器的工作方式: 輸入 / 輸出 / ...)
(3)控制對應(yīng)引腳(查詢哪個引腳和該引腳是否拉高拉低)
不說了,直接上代碼
#include
#define LED_A_ON(i) GPADAT &= ~(0x1 << i) //A口i燈亮
#define LED_B_ON(i) GPBDAT &= ~(0x1 << i) //B口i燈亮
#define LED_A_OFF(i) GPADAT |= (0x1 << i) //A口i燈亮
#define LED_B_OFF(i) GPBDAT |= (0x1 << i) //B口i燈亮
void LED_INIT(void);//初始化控制燈
void delay(unsigned int xx);//延時
int main()
{
LED_INIT();
while(1)//流水燈實驗
{
LED_B_ON(5);
LED_B_OFF(6);
LED_A_OFF(25);
LED_A_OFF(26);
delay(100);
LED_B_ON(6);
LED_B_OFF(5);
LED_A_OFF(25);
LED_A_OFF(26);
delay(100);
LED_A_ON(25);
LED_B_OFF(5);
LED_B_OFF(6);
LED_A_OFF(26);
delay(100);
LED_A_ON(26);
LED_B_OFF(5);
LED_B_OFF(6);
LED_A_OFF(25);
delay(100);
}
}
void LED_INIT()//初始化控制燈
{
GPBCON &= ~(0x03 << 10);//GPB5清零
GPBCON |= (0x01 << 10); //置1
GPACON &= ~(0x3 << 25);
GPADAT |= (0x3 << 25);
GPBDAT |= (0x3 << 5);
delay(10000);
}
自己比較吧,是不是也不太難呢。