第一步,先聊聊单片机 LED 点亮:
单片机可操作单个位:sbit led1 = P1 ^ 2;
通过控制 变量 led1 来控制灯 的 亮 与 灭;
#include <reg52.h>
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)分析驱动方式(查询寄存器的工作方式: 输入 / 输出 / ...)
(3)控制对应引脚(查询哪个引脚和该引脚是否拉高拉低)
不说了,直接上代码
#include <S3C2440.h>
#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);
}
自己比较吧,是不是也不太难呢。
时间: 2024-10-25 04:11:27