控制fl2440开发板led灯亮灭,蜂鸣器发声

来源:互联网 发布:vb 读取西门子plc 编辑:程序博客网 时间:2024/04/28 08:08

led灯亮灭,蜂鸣器发声是通过设置相应寄存器的值来控制的,主要有GPBCON、GPBDAT、GPBUP等,GPBCON有GPB0-10,每一个GPBi设置不同的值来表示输入输出等,设置GPBDAT的每一位表示高低电平,GPBUP设置GPBi是否有效,通过对这三个寄存器的设置则可实现led灯和蜂鸣器。

下面有一个简单的程序:

实现led灯轮流亮灭,led.c:

#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
#define GPBUP (*(volatile unsigned *)0x56000018)
void delay(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<t;j++);

}
int ledMain(void)
{
GPBCON=0x111400;
GPBDAT=0xfff;

while(1)
{
GPBDAT=0xfdf;
delay(500);
GPBDAT=0xfbf;
delay(500);
GPBDAT=0xeff;
delay(500);
GPBDAT=0x9ff;
delay(500);
}
return 0;
}

通过汇编程序进入函数,init.s:

AREA |DATA|,CODE,READONLY
    ENTRY
    ldr r13,=0x1000
    IMPORT ledMain
    b ledMain
    END

用ADS编译,下载到开发板则可看见led的效果。

控制蜂鸣器的发声,bell.c:

#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
#define GPBUP (*(volatile unsigned *)0x56000018)
void delay(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<t;j++);
}
int bellmain()
{
GPBCON=0x0001;
while(1)
{
GPBDAT=0x0;
delay(1000);
GPBDAT=0x1;
delay(1000);
}
return 0;
}

汇编程序如上,只需改函数的入口即可,编译同上,则可是想蜂鸣器的发声。

以上只是我现在的理解,当然可能有一些不懂的地方,今后慢慢学习。