《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);
}
}
}