3284|10

78

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

紧急求高人解答!!!!我写的键盘扫描程序哪出错了!!!!! [复制链接]

用的是dsp28027 ,采用句柄和指针形式写的,没用寄存器!!1

      void matrixkeyscan()
{
//        int32_t temp,key,key1=0,key2=0,key3=0,key4=0;

//        GPIO_setPortData(myGpio,GPIO_Port_A,0xFFF7FFFF);
//        temp=GPIO_getPortData(myGpio,GPIO_Port_A);
//        temp=temp&

        GPIO_setLow(myGpio,GPIO_Number_19);
        temp=GPIO_getData(myGpio,GPIO_Number_19);
        if(temp==0)
        {GPIO_setLow(myGpio,GPIO_Number_19);
        GPIO_setHigh(myGpio,GPIO_Number_18);
        GPIO_setHigh(myGpio,GPIO_Number_17);
        GPIO_setHigh(myGpio,GPIO_Number_16);

        delay_nop(q);

        key1=GPIO_getData(myGpio,GPIO_Number_29);
        key2=GPIO_getData(myGpio,GPIO_Number_32);
        key3=GPIO_getData(myGpio,GPIO_Number_33);
        key3=GPIO_getData(myGpio,GPIO_Number_34);
        if(key1==0&key2==1&key3==1&key4==1)
        {
                key=1;
        }
        if(key1==1&key2==0&key3==1&key4==1)
                {
                        key=2;
                }
        if(key1==1&key2==1&key3==0&key4==1)
                        {
                                key=3;
                        }
        if(key1==1&key2==1&key3==1&key4==0)
                                {
                                        key=4;
                                }
        }


        GPIO_setLow(myGpio,GPIO_Number_18);
        temp1=GPIO_getData(myGpio,GPIO_Number_18);
        if(temp1==0)
        {
        GPIO_setHigh(myGpio,GPIO_Number_19);
                GPIO_setLow(myGpio,GPIO_Number_18);
                GPIO_setHigh(myGpio,GPIO_Number_17);
                GPIO_setHigh(myGpio,GPIO_Number_16);

                delay_nop(q);

                key1=GPIO_getData(myGpio,GPIO_Number_29);
                key2=GPIO_getData(myGpio,GPIO_Number_32);
                key3=GPIO_getData(myGpio,GPIO_Number_33);
                key3=GPIO_getData(myGpio,GPIO_Number_34);
                if(key1==0&key2==1&key3==1&key4==1)
                        {
                                key=5;
                        }
                if(key1==1&key2==0&key3==1&key4==1)
                                        {
                                                key=6;
                                        }
                if(key1==1&key2==1&key3==0&key4==1)
                                                        {
                                                                key=7;
                                                        }
                if(key1==1&key2==1&key3==1&key4==0)
                                                                        {
                                                                                key=8;
                                                                        }
        }


        GPIO_setLow(myGpio,GPIO_Number_17);
                temp=GPIO_getData(myGpio,GPIO_Number_17);
                if(temp2==0)
                {
                GPIO_setHigh(myGpio,GPIO_Number_19);
                                GPIO_setHigh(myGpio,GPIO_Number_18);
                                GPIO_setLow(myGpio,GPIO_Number_17);
                                GPIO_setHigh(myGpio,GPIO_Number_16);

                                delay_nop(q);

                                key1=GPIO_getData(myGpio,GPIO_Number_29);
                                key2=GPIO_getData(myGpio,GPIO_Number_32);
                                key3=GPIO_getData(myGpio,GPIO_Number_33);
                                key3=GPIO_getData(myGpio,GPIO_Number_34);
                                if(key1==0&key2==1&key3==1&key4==1)
                                                        {
                                                                key=9;
                                                        }
                                if(key1==1&key2==0&key3==1&key4==1)
                                                                        {
                                                                                key=10;
                                                                        }
                                if(key1==1&key2==1&key3==0&key4==1)
                                                                                        {
                                                                                                key=11;
                                                                                        }
                                if(key1==1&key2==1&key3==1&key4==0)
                                                                                                        {
                                                                                                                key=12;
                                                                                                        }
                }

                GPIO_setLow(myGpio,GPIO_Number_16);
                                temp3=GPIO_getData(myGpio,GPIO_Number_16);
                                if(temp3==0)
                                {
                                GPIO_setHigh(myGpio,GPIO_Number_19);
                                                                GPIO_setHigh(myGpio,GPIO_Number_18);
                                                                GPIO_setHigh(myGpio,GPIO_Number_17);
                                                                GPIO_setLow(myGpio,GPIO_Number_16);

                                                                delay_nop(q);

                                                                key1=GPIO_getData(myGpio,GPIO_Number_29);
                                                                key2=GPIO_getData(myGpio,GPIO_Number_32);
                                                                key3=GPIO_getData(myGpio,GPIO_Number_33);
                                                                key3=GPIO_getData(myGpio,GPIO_Number_34);
                                                                if(key1==0&key2==1&key3==1&key4==1)
                                                                                                                        {
                                                                                                                                key=13;
                                                                                                                        }
                                                                if(key1==1&key2==0&key3==1&key4==1)
                                                                                                                                        {
                                                                                                                                                key=14;
                                                                                                                                        }
                                                                if(key1==1&key2==1&key3==0&key4==1)
                                                                                                                                                        {
                                                                                                                                                                key=15;
                                                                                                                                                        }
                                                                if(key1==1&key2==1&key3==1&key4==0)
                                                                                                                                                                        {
                                                                                                                                                                                key=16;
                                                                                                                                                                        }
                                }








}

最新回复

既然用28027应该能仿真吧。挂着仿真器单步运行看看。  详情 回复 发表于 2014-8-22 16:45
点赞 关注
 

回复
举报

78

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
GPIO口的配置



        GPIO_setMode(KEY_obj, GPIO_Number_34, GPIO_34_Mode_GeneralPurpose);//第4列
                GPIO_setMode(KEY_obj, GPIO_Number_33, GPIO_33_Mode_GeneralPurpose);//第3列
                GPIO_setMode(KEY_obj, GPIO_Number_32, GPIO_32_Mode_GeneralPurpose);//第2列
                GPIO_setMode(KEY_obj, GPIO_Number_29, GPIO_29_Mode_GeneralPurpose);//第1列
                GPIO_setMode(KEY_obj, GPIO_Number_19, GPIO_16_Mode_GeneralPurpose);//第1行
                GPIO_setMode(KEY_obj, GPIO_Number_18, GPIO_17_Mode_GeneralPurpose);//第2行
                GPIO_setMode(KEY_obj, GPIO_Number_17, GPIO_18_Mode_GeneralPurpose);//第3行
                GPIO_setMode(KEY_obj, GPIO_Number_16, GPIO_19_Mode_GeneralPurpose);//第4行



                GPIO_setPullUp(KEY_obj, GPIO_Number_34, GPIO_PullUp_Enable);
                        GPIO_setPullUp(KEY_obj, GPIO_Number_33, GPIO_PullUp_Enable);
                        GPIO_setPullUp(KEY_obj, GPIO_Number_32, GPIO_PullUp_Enable);
                        GPIO_setPullUp(KEY_obj, GPIO_Number_29, GPIO_PullUp_Enable);
                        GPIO_setPullUp(KEY_obj, GPIO_Number_16, GPIO_PullUp_Enable);
                        GPIO_setPullUp(KEY_obj, GPIO_Number_17, GPIO_PullUp_Enable);
                        GPIO_setPullUp(KEY_obj, GPIO_Number_18, GPIO_PullUp_Enable);
                        GPIO_setPullUp(KEY_obj, GPIO_Number_19, GPIO_PullUp_Enable);



                        GPIO_setDirection(KEY_obj, GPIO_Number_34, GPIO_Direction_Input);
                                GPIO_setDirection(KEY_obj, GPIO_Number_33, GPIO_Direction_Input);
                                GPIO_setDirection(KEY_obj, GPIO_Number_32, GPIO_Direction_Input);
                                GPIO_setDirection(KEY_obj, GPIO_Number_29, GPIO_Direction_Input);
                                GPIO_setDirection(KEY_obj, GPIO_Number_16, GPIO_Direction_Output);
                                GPIO_setDirection(KEY_obj, GPIO_Number_17, GPIO_Direction_Output);
                                GPIO_setDirection(KEY_obj, GPIO_Number_18, GPIO_Direction_Output);
                                GPIO_setDirection(KEY_obj, GPIO_Number_19, GPIO_Direction_Output);




                    GPIO_setExtInt(myGpio, GPIO_Number_34, CPU_ExtIntNumber_1);
                                GPIO_setExtInt(myGpio, GPIO_Number_33, CPU_ExtIntNumber_1);
                                GPIO_setExtInt(myGpio, GPIO_Number_32, CPU_ExtIntNumber_1);
                                GPIO_setExtInt(myGpio, GPIO_Number_29, CPU_ExtIntNumber_1);
                                GPIO_setExtInt(myGpio, GPIO_Number_16, CPU_ExtIntNumber_1);
                                GPIO_setExtInt(myGpio, GPIO_Number_17, CPU_ExtIntNumber_1);
                                GPIO_setExtInt(myGpio, GPIO_Number_18, CPU_ExtIntNumber_1);
                                GPIO_setExtInt(myGpio, GPIO_Number_19, CPU_ExtIntNumber_1);


}
@soso @dontium @ltbytyn @常见泽1 @tiankai001 @huo_hu @liangzr
 
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
没仔细看,发现一个问题& 应该改成&&

点评

感谢老师指点!这个问题倒真的没有注意到,原来&与&&是有区别的。另外还需要加个if语句去判断才行。  详情 回复 发表于 2014-8-22 18:06
 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

4
 
按2楼说的先改            

点评

已改过了,到还是不行  详情 回复 发表于 2014-8-22 14:55
 
 
 

回复

1万

帖子

26

TA的资源

裸片初长成(高级)

5
 
1、GPIO_Number_19的外电路是怎么接的?
因为它决定这两句:
         GPIO_setLow(myGpio,GPIO_Number_19);
        temp=GPIO_getData(myGpio,GPIO_Number_19);

2、总感觉楼主的这种处理方法不妥。C2000的CPU,GPIO分两个部分,一个是GPIOA,一个是GPIOB,它们由两个寄存器存储数据,控制也分A、B,扫描键盘时,可以操作这两块的寄存器。

3、键盘是很慢的处理过程,不能快。但也不能因为处理键盘而影响到其它过程的执行。所以,一般要放在中断里,在中断里判断键盘状态,在时间到则置键值

点评

感谢老师指点,每个扫描再加一个if语句判断就可以用。  详情 回复 发表于 2014-8-22 18:04
1,GPIO_Number_19我设为第一行, 我是根据c51的键盘扫描 先把第一行置低电平。 2,我也想过用A B端口来操作,但我的5,6,7,12口要用来显示,这样会有影响 ,而且用端口的话 A 控制0~31,B控制32~38 ,这样的话我就  详情 回复 发表于 2014-8-22 15:28
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

6
 

已改过了,到还是不行
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

7
 
dontium 发表于 2014-8-22 13:46
1、GPIO_Number_19的外电路是怎么接的?
因为它决定这两句:
         GPIO_setLow(myGpio,GPIO_Number_1 ...

1,GPIO_Number_19我设为第一行, 我是根据c51的键盘扫描 先把第一行置低电平。
2,我也想过用A  B端口来操作,但我的5,6,7,12口要用来显示,这样会有影响 ,而且用端口的话 A 控制0~31,B控制32~38 ,这样的话我就要分开写会很复杂
3,我是放到中断里了   但好像进不去

 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

8
 
这是我写的程序 是用句柄和指针编的,可能不好理解

DSP2802x_ExternalInterrupt.zip

306.39 KB, 下载次数: 2

 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

9
 
既然用28027应该能仿真吧。挂着仿真器单步运行看看。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

10
 
dontium 发表于 2014-8-22 13:46
1、GPIO_Number_19的外电路是怎么接的?
因为它决定这两句:
         GPIO_setLow(myGpio,GPIO_Number_1 ...

感谢老师指点,每个扫描再加一个if语句判断就可以用。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(中级)

11
 
sint27 发表于 2014-8-22 10:28
没仔细看,发现一个问题& 应该改成&&

感谢老师指点!这个问题倒真的没有注意到,原来&与&&是有区别的。另外还需要加个if语句去判断才行。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表