关闭

arm电子相册项目——led模块篇led.c

标签: armled模块keil4项目开发
642人阅读 评论(0) 收藏 举报

《arm电子相册项目——led模块篇led.c》

 

工具:keil4 , arm开发板(Mini2451)(s3c2451) , 串口线

功能:显示照片(自动切换 / 手动切换 / 暂停切换 / 可设置)

            显示时钟(精确显示 / 可设置)

进度:第3篇——led.c(led灯)

描述:拿到开发板的第一个程序,就是如何点亮一个led->点亮所有的led->led流水灯

            本篇会从点亮一个led程序开始,一直讲到如何在arm电子相册中应用led不断闪烁

;/*****************************************************
;Author:Ivan    Version:0.1    Date: 
;File name:startup.s
;Description:启动代码
;*****************************************************/
    AREA Init , CODE , READONLY	    ;定义一代码段,只读
    ENTRY    ;入口
	
start	
    ldr r0,=0x53000000
    ldr r1,=0x0
    str r1,[r0]    ;在0x53000000地址中放入0的值
	
	IMPORT Main    ;声明,汇编中可以调用main函数
	
	bl Main    ;跳转到main
	
	EXPORT delay    ;声明,c函数中可以调用汇编delay
	
delay
	ldr r0,=0x1000000    ;赋初值(若c函数中delay(2000000),则初值变为0x2000000)
delay_loop
	cmp r0,#0    ;是否==0
	sub r0,r0,#1    ;r0--
	bne delay_loop    ;b=跳转,n=不,e=相等,若前面cmp比较不相等就跳转,继续循环
	mov pc,lr    ;回到之前的位置

END	

/*****************************************************
Author:Ivan    Version:0.1    Date: 
File name:led.h
Description:led相关寄存器地址
*****************************************************/
#ifndef LED_H_
#define LED_H_
//GPA25,26端口 / GPB5,6端口分别控制Mini2451上的4个led,所以要对这几个端口相关的寄存器初始化
#define GPACON (*(volatile unsigned long *)0x56000000)
#define GPADAT (*(volatile unsigned long *)0x56000004)
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
#define GPBSEL (*(volatile unsigned long *)0x5600001C)
extern void led_init(void);
#endif

/*****************************************************
Author:Ivan    Version:0.1    Date: 
File name:led.c
Description:led模块初始化
*****************************************************/
#include "led.c"

void led_init(void)
{
	GPACON &= ~(0x3<<25);    //将GPA25,GPA26设置为output模式
	GPBCON = (0x5<<10);    //将GPB5,GPB6设置为output模式
	GPBSEL = 0x0;    //将GPBSEL设置为0(有GPB6相关位)
}

/*****************************************************
Author:Ivan    Version:0.1    Date: 
File name:main.h
Description:将多个头文件整合方便调用
*****************************************************/
#ifndef MAIN_H_
#define MAIN_H_
#include "led.h"
#endif

/*****************************************************
Author:Ivan    Version:0.1    Date: 
File name:main.c
Description:主函数(用按键点亮一盏led)
*****************************************************/
#include "main.h"

extern void delay(unsigned int t);    //声明,可以使用汇编delay

void Main()
{
	while(1)
	{
		GPADAT &= ~(0x1<<25);    //只开启GPA25号led
        delay(0x1000000);
        GPADAT |= (0x1<<25);    //只关闭GPA25号led
        delay(0x1000000);
	}
}

上面是一段完整的代码,功能是点亮一个led灯,想要开启 / 关闭其他部分的led,只需将该端口的数据位置0 / 1就行。

	GPACON &= ~(0x3<<25);    //将GPA25,GPA26设置为output模式
	GPBCON = (0x5<<10);    //将GPB5,GPB6设置为output模式
	GPBSEL = 0x0;    //将GPBSEL设置为0(有GPB6相关位)
			
	while(1)
	{
		GPADAT &= ~(0x1<<25);    //只开启GPA25号led
        delay(0x1000000);
        GPADAT |= (0x1<<25);    //只关闭GPA25号led
        delay(0x1000000);
        GPADAT &= ~(0x1<<26);    //GPA26号led
        delay(0x1000000);
        GPADAT |= (0x1<<26);   
        delay(0x1000000);
        GPBDAT &= ~(0x1<<5);    //GPB5号led
        delay(0x1000000);
        GPBDAT |= (0x1<<5);    
        delay(0x1000000);
        GPBDAT &= ~(0x1<<6);    //GPB6号led
        delay(0x1000000);
        GPBDAT |= (0x1<<6);    
        delay(0x1000000);
	}

上面是一段流水灯代码。

	GPACON &= ~(0x3<<25);    //将GPA25,GPA26设置为output模式
	GPBCON = (0x5<<10);    //将GPB5,GPB6设置为output模式
	GPBSEL = 0x0;    //将GPBSEL设置为0(有GPB6相关位)
	
	while(1)
	{
		GPADAT = 0x0;
		GPBDAT = 0x0;
		delay(0x100000);
		GPADAT = 0xffffffff;
		GPBDAT = 0xffffffff;
		delay(0x100000);
	}

arm电子相册中,led灯闪烁,表示机器正常运行





1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33179次
    • 积分:1275
    • 等级:
    • 排名:千里之外
    • 原创:88篇
    • 转载:14篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论