主题 : 不知道怎么回事,用扫描方式检测按键的话,用变了网上的所有程序都不能运行 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 60696
精华: 0
发帖: 26
金钱: 130 两
威望: 26 点
综合积分: 52 分
注册时间: 2011-12-14
最后登录: 2012-02-05
楼主  发表于: 2012-01-17 20:24

 不知道怎么回事,用扫描方式检测按键的话,用变了网上的所有程序都不能运行

请指教指教;
下面是程序:
#define GPBCON      (*(volatile unsigned long *)0x56000010) //LED

#define GPBDAT      (*(volatile unsigned long *)0x56000014)

#define GPGCON      (*(volatile unsigned long *)0x56000060) //KEY

#define GPGDAT      (*(volatile unsigned long *)0x56000064)

/*

* LED1-4对应GPB5、GPB6、GPB7、GPB8

*/

#define GPB5_out        (1<<(5*2))

#define GPB6_out        (1<<(6*2))

#define GPB7_out        (1<<(7*2))

#define GPB8_out        (1<<(8*2))

/*

* K1-K4对应GPG6、GPG5、GPG3、GPG0

*/

#define GPG6_in     ~(3<<(6*2))
#define GPG5_in     ~(3<<(5*2))
#define GPG3_in     ~(3<<(3*2))
#define GPG0_in     ~(3<<(0*2))

int main()

{

        unsigned long dwDat;

        // LED1-LED4对应的4根引脚设为输出

        GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out ;

       // K1-K2-K3-K4对应的4根引脚设为输入

        GPGCON = GPG0_in & GPG3_in & GPG5_in & GPG6_in ;
                GPBUP = 0xff;
        while(1){

            //若Kn为0(表示按下),则令LEDn为0(表示点亮)

            dwDat = GPGDAT;             // 读取GPG管脚电平状态


                GPBDAT &= ~(1<<5);      // LED1点亮

            if (dwDat & (1<<3))         // K2没有按下

                GPBDAT |= (1<<6);       // LED2熄灭

            else  

                GPBDAT &= ~(1<<6);      // LED2点亮

            if (dwDat & (1<<5))         // K3没有按下

                GPBDAT |= (1<<7);       // LED3熄灭

            else  

                GPBDAT &= ~(1<<7);      // LED3点亮

            if (dwDat & (1<<6))        // K4没有按下

                GPBDAT |= (1<<8);       // LED4熄灭

            else  

                GPBDAT &= ~(1<<8);      // LED4点亮

    }

    return 0;

}

这个程序也不知道哪里错误了,就是在我的板子上面不能运行
级别: 新手上路
UID: 60696
精华: 0
发帖: 26
金钱: 130 两
威望: 26 点
综合积分: 52 分
注册时间: 2011-12-14
最后登录: 2012-02-05
1楼  发表于: 2012-01-17 20:28