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

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

 

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

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

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

进度:第4篇——led.c(按键)

描述:按键模块主要就用到了寄存器GPFCON相关的,比较少,就直接加到led.c / led.h中

            单独试验某一模块的功能时可以将(启动加载篇startup.s)+(主函数篇main.c中初始化要用到的相关模块)+(相关模块)就可以实现。

//.s文件使用startup.s

/*****************************************************
Author:Ivan    Version:0.1    Date: 
File name:led.h
Description:led模块+按键模块相关寄存器地址
*****************************************************/
#ifndef LED_H_
#define LED_H_
#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)
//以上led相关寄存器地址
#define GPFCON (*(volatile unsigned long *)0x56000050)
#define GPFDAT (*(volatile unsigned long *)0x56000054)
//以上按键相关寄存器地址
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相关位)
    GPFCON = 0x0;    //将GPFCON 0-3设置为input模式
}

/*****************************************************
Author:Ivan    Version:0.1    Date: 
File name:main.h
Description:包含所有用到的.h文件
*****************************************************/
#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" 

void Main()
{
    led_init();
			
	while(1)
	{
		if(GPFDAT & 0x01)    //如果按键1被按下
		{
			GPBDAT |= (0x1 << 5);
		}
		else
		{
			GPBDAT &= ~(0x1 << 5);
		}
		if(GPFDAT& 0x02)    //如果按键2被按下
		{
			GPBDAT |= (0x1 << 6);
		}
		else
		{
			GPBDAT &= ~(0x1 << 6);
		}
		if(GPFDAT& 0x04)    //如果按键3被按下
		{
			GPADAT |= (0x1 << 25);
		}
		else
		{
			GPADAT &= ~(0x1 << 25);
		}
		if(GPFDAT& 0x08)    //如果按键4被按下
		{
			GPADAT |= (0x1 << 26);
		}
		else
		{
			GPADAT &= ~(0x1 << 26);
		}
	}
}



你可能感兴趣的:(arm电子相册项目——按键模块篇led.c)