主题 : 按键控制 LED 问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 59981
精华: 0
发帖: 34
金钱: 175 两
威望: 35 点
贡献值: 0 点
综合积分: 68 分
注册时间: 2011-12-02
最后登录: 2012-05-09
楼主  发表于: 2012-03-29 15:22

 按键控制 LED 问题

   按键按下无反应帮忙看下,代码如下:
tiny6410板子
#define GPKCON      (*(volatile unsigned long *)0x7F008800)
#define GPKDAT      (*(volatile unsigned long *)0x7F008808)

#define GPNCON      (*(volatile unsigned long *)0x7F008830)
#define GPNDAT      (*(volatile unsigned long *)0x7F008834)

/*
* LED1,LED2,LED4对应GPK4、GPK5、GPK6、GPK7
*/
#define    GPk4_out    (1<<(4*4))
#define    GPk5_out    (1<<(5*4))
#define    GPk6_out    (1<<(6*4))
#define    GPk7_out    (1<<(7*4))

#define    GPk4_msk    (3<<(4*4))
#define    GPk5_msk    (3<<(5*4))
#define    GPk6_msk    (3<<(6*4))
#define    GPk7_msk    (3<<(7*4))

/*
* K1,K2,K3,K4对应GPG0,GPG3,GPG5,GPG6
*/
#define GPG0_in     (0<<(0*2))
#define GPG1_in     (0<<(1*2))
#define GPG2_in     (0<<(2*2))
#define GPG3_in     (0<<(3*2))

#define GPG0_msk    (3<<(0*2))
#define GPG1_msk    (3<<(1*2))
#define GPG2_msk    (3<<(2*2))
#define GPG3_msk    (3<<(3*2))

int main()
{
        unsigned long dwDat;
        // LED1,LED2,LED3,LED4对应的4根引脚设为输出
        GPKCON &= ~(GPk4_msk|GPk5_msk| GPk6_msk| GPk7_msk);
        GPKCON |= GPk4_out | GPk5_out | GPk6_out | GPk7_out;
        
        // K1,K2,K3,K4对应的4根引脚设为输入
        GPNCON &= ~(GPG0_msk | GPG1_msk | GPG2_msk | GPG3_msk);
        GPNCON |= GPG0_in | GPG1_in | GPG2_in | GPG3_in;

        GPKDAT = 0XF0;
        
        while(1){
            //若Kn为0(表示按下),则令LEDn为0(表示点亮)
            dwDat = GPNDAT;             // 读取GPF管脚电平状态
        
            if (dwDat & (1<<0))        // K1没有按下
                GPKDAT |= (1<<4);       // LED1熄灭
            else    
                GPKDAT &= ~(1<<4);      // LED1点亮
                
            if (dwDat & (1<<1))         // K2没有按下
                GPKDAT |= (1<<5);       // LED2熄灭
            else    
                GPKDAT &= ~(1<<5);      // LED2点亮
    
            if (dwDat & (1<<2))        // K3没有按下
                GPKDAT |= (1<<6);        // LED3熄灭
            else    
                GPKDAT &= ~(1<<6);        // LED3点亮
                
            if (dwDat & (1<<3))         // K4没有按下
                GPKDAT |= (1<<7);        // LED4熄灭
            else    
                GPKDAT &= ~(1<<7);        // LED4点亮
    }

    return 0;
}
级别: 侠客
UID: 66166
精华: 0
发帖: 83
金钱: 385 两
威望: 83 点
贡献值: 0 点
综合积分: 166 分
注册时间: 2012-03-27
最后登录: 2012-04-29
1楼  发表于: 2012-04-02 17:00
谢谢。。。。。。。。。
级别: 新手上路
UID: 77386
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2012-09-07
最后登录: 2014-05-09
2楼  发表于: 2012-12-27 22:26
我也遇到这个问题?无解,我是从SD卡启动的,代码和你的基本一样,但按键没反应,看看手册上说选择从SD卡启动时GPN的13 14 15 位好像被占用了,不知道是不是这个原因???
级别: 新手上路
UID: 77386
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2012-09-07
最后登录: 2014-05-09
3楼  发表于: 2012-12-28 21:40
GPk4_msk应该是  #define    GPk4_msk    (15<<(4*4))
级别: 新手上路
UID: 77386
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2012-09-07
最后登录: 2014-05-09
4楼  发表于: 2012-12-28 21:47
这个问题没人解决吗??
级别: 新手上路
UID: 77386
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2012-09-07
最后登录: 2014-05-09
5楼  发表于: 2013-01-04 23:11
来个高手吧???
级别: 新手上路
UID: 77386
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2012-09-07
最后登录: 2014-05-09
6楼  发表于: 2013-01-08 21:24
客服也不来回答个问题??
级别: 新手上路
UID: 77386
精华: 0
发帖: 22
金钱: 110 两
威望: 22 点
贡献值: 0 点
综合积分: 44 分
注册时间: 2012-09-07
最后登录: 2014-05-09
7楼  发表于: 2013-02-15 19:01

 回 楼主(282963937) 的帖子

已解决!!!!!
级别: 新手上路
UID: 114192
精华: 0
发帖: 28
金钱: 140 两
威望: 28 点
贡献值: 0 点
综合积分: 56 分
注册时间: 2015-04-07
最后登录: 2018-09-15
8楼  发表于: 2015-04-14 08:07
大哥!!我也有一样的问题呢?发帖都没人回我?你能不能帮下我啊?到底哪里出问题了啊???