1.利用按键控制led灯亮灭

来源:互联网 发布:oracle sql if 子查询 编辑:程序博客网 时间:2024/05/22 15:03

1.      配置key

2.      key状态

3.      根据key状态点亮led

 

硬件连接图:

 

分析:

     按键接了上拉电阻,按键没按下时,GPIO口的状态为高电平

     

#define GPFCON      (*(volatile unsigned long *)0x56000050)#define GPFDAT      (*(volatile unsigned long *)0x56000054)#define GPGCON      (*(volatile unsigned long *)0x56000060)#define GPGDAT      (*(volatile unsigned long *)0x56000064)/* * LED1,LED2,LED4对应GPF4、GPF5、GPF6 *///GPF4 5 6 配置成输出引脚   LED端#defineGPF4_out(1<<(4*2))#defineGPF5_out(1<<(5*2))#defineGPF6_out(1<<(6*2))#defineGPF4_msk(3<<(4*2))#defineGPF5_msk(3<<(5*2))#defineGPF6_msk(3<<(6*2))/* * S2,S3,S4对应GPF0、GPF2、GPG3 *///GPF0 2 GPG3配置成输出引脚   按键#define GPF0_in     (0<<(0*2))#define GPF2_in     (0<<(2*2))#define GPG3_in     (0<<(3*2))#define GPF0_msk    (3<<(0*2))#define GPF2_msk    (3<<(2*2))#define GPG3_msk    (3<<(3*2))int main(){        unsigned long dwDat;                // LED1,LED2,LED4对应的3根引脚设为输出        GPFCON &= ~(GPF4_msk | GPF5_msk | GPF6_msk);//先清0,再赋值        GPFCON |= GPF4_out | GPF5_out | GPF6_out;                // S2,S3对应的2根引脚设为输入        GPFCON &= ~(GPF0_msk | GPF2_msk);        GPFCON |= GPF0_in | GPF2_in;        // S4对应的引脚设为输入        GPGCON &= ~GPG3_msk;        GPGCON |= GPG3_in;        while(1){            //若Kn为0(表示按下),则令LEDn为0(表示点亮)            dwDat = GPFDAT;             // 读取GPF管脚电平状态                    if (dwDat & (1<<0))        // S2没有按下                GPFDAT |= (1<<4);       // LED1熄灭            else                    GPFDAT &= ~(1<<4);      // LED1点亮                            if (dwDat & (1<<2))         // S3没有按下                GPFDAT |= (1<<5);       // LED2熄灭            else                    GPFDAT &= ~(1<<5);      // LED2点亮                dwDat = GPGDAT;             // 读取GPG管脚电平状态                        if (dwDat & (1<<3))         // S4没有按下                GPFDAT |= (1<<6);       // LED3熄灭            else                    GPFDAT &= ~(1<<6);      // LED3点亮    }    return 0;}


 

分析:

         利用按位操作寄存器,能省不少事~

 

按位操作

清零:     位与    GPFCON &= ~(1<<4);       //赋值 0

 

置位:  位或    GPEDAT |= (1<<4);            //赋值1

 

烧写、上电即可看到效果~