#include<s3c2440.h>
/*
LED IO控制,数据,上拉寄存器
*/
//#define GPBCON (*(volatile unsigned *)0x56000010)
//#define GPBDAT (*(volatile unsigned *)0x56000014)
//#define GPBUP (*(volatile unsigned *)0x56000018)
//#define GPGCON (*(volatile unsigned *)0x56000060)
//#define GPGDAT (*(volatile unsigned *)0x56000064)
//#define GPGUP (*(volatile unsigned *)0x56000068)
/*
LED1-4对应的GPB5,GPB6,GPB7,GPB8
*/
#define GPB5_out (1<<(5*2)) //LED1
#define GPB6_out (1<<(6*2)) //LED2
#define GPB7_out (1<<(7*2)) //LED3
#define GPB8_out (1<<(8*2)) //LED4
/*
K1-K6对应GPG0,GPG3,GPG5,GPG6,GPG7,GPG11
*/
#define GPG11_in ~(3<<(11*2)) //key6
#define GPG7_in ~(3<<(7*2)) //key5
#define GPG6_in ~(3<<(6*2)) //key4
#define GPG5_in ~(3<<(5*2)) //key3
#define GPG3_in ~(3<<(3*2)) //key2
#define GPG0_in ~(3<<(0*2)) //key1
int main()
{
/*用作读取KEY状态值*/
unsigned long dwDat=0;
/*LED1~LED4对应的4根引脚设为输出*/
GPBCON=GPB5_out | GPB6_out | GPB7_out | GPB8_out; //将输出的引脚在配置寄存器中设为01
/*KEY1-KEY6对应的6根引脚设为输入*/
GPGCON=GPG11_in & GPG7_in & GPG6_in & GPG5_in & GPG3_in & GPG0_in;//讲输入的引脚在配置寄存器中设为00
/*关闭KEY和LED的引脚上拉*/
GPBUP=0xFFFFFFFF;
GPGUP=0xFFFFFFFF;
while(1)
{
GPBDAT=0xFFFFFFFF;
dwDat=GPGDAT; //读取KEY引脚状态
if(dwDat & (1<<11)) //key6是否按下 按下时,电压拉入地,为低电平,状态0
{
GPBDAT |=(1<<5); //熄灭LED1
}else{
GPBDAT &=~(1<<5); //点亮LED1
}
if(dwDat & (1<<7)) //判断KEY5是否按下
{
GPBDAT |=(1<<6); //熄灭LED2
}else{
GPBDAT &=~(1<<6); //点亮LED2
}
if(dwDat & (1<<6)) //key4
{
GPBDAT |=(1<<7);
}else{
GPBDAT &=~(1<<7);
}
if(dwDat & (1<<5)) //key3
{
GPBDAT |=(1<<8);
}else{
GPBDAT &=~(1<<8);
}
if(dwDat & (1<<3)) //key2
{
GPBDAT |=(1<<5) | (1<<6);
}else{
GPBDAT &=~((1<<5) | (1<<6));
}
if(dwDat & (1<<0)) //key1
{
GPBDAT |=(1<<7) | (1<<8);
}else{
GPBDAT &= ~((1<<7) | (1<<8));
}
}
return 0;
}