天嵌 ARM开发社区

 找回密码
 注册
查看: 2556|回复: 10

外部按键测试 急 謝

[复制链接]
nono1860 发表于 2010-11-18 01:40:10 | 显示全部楼层 |阅读模式
请问各位大大,小弟利用qt4.5想设计一个外部按键测试的程序(例如应用程序里的按钮),利用开发板上的外部按键来显示液晶显示屏上的数字,
但是我程式写完如下,移植到开发板上的时候液晶都是显示1,怎样案外部键盘都没有反应,请问我要怎解决这问题,请高手告知ledplayer::ledplayer( QWidget* parent,  const char* name, WFlags fl )
    : QWidget( parent, name, fl )
{
       readpress = new QTimer(this);
    connect(readpress,SIGNAL(timeout()),this,SLOT(getkey()));
    readpress->start(2*1000);
          fd =::open("/dev/IRQ-Test", 0);
            }


void ledplayer::getkey()
{
        readpress->stop();
        /*开始读取键盘驱动发出的数据,注意key_value和键盘驱动中定义为一致的类型*/
        ret = ::read(fd2, key_value_temp, sizeof(key_value_temp));
        if (ret != sizeof(key_value_temp))
        {
                perror("read buttons:");
                goto out;
        }
        
        if(key_value[0] != key_value_temp[0])
        {
                   ui->lcd->display(1);
                                goto out;
        }
        if(key_value[1] != key_value_temp[1])
        {
                  ui->lcd->display(2);
                goto out;
        }
        if(key_value[2] != key_value_temp[2])
        {
               
             ui->lcd->display(3);
                goto out;
        }
        if(key_value[3] != key_value_temp[3])
        {
                           ui->lcd->display(4);
                goto out;
        }
         
        out:        readpress->start(1000);
}
天嵌_support1 发表于 2010-11-18 10:25:24 | 显示全部楼层
1# nono1860

看代码这个活,头是很大的。
if(key_value[0] != key_value_temp[0])
        {
                   ui->lcd->display(1);
                                goto out;
        }
        if(key_value[1] != key_value_temp[1])
        {
                  ui->lcd->display(2);
                goto out;
        }
        if(key_value[2] != key_value_temp[2])
        {
               
             ui->lcd->display(3);
                goto out;
        }
        if(key_value[3] != key_value_temp[3])
        {
                           ui->lcd->display(4);
                goto out;
        }
结果都是一,那说明 (key_value[0] != key_value_temp[0]) 这个条件永远成立了嘛。
你不妨通过直接打印再按下按键时,打印相应的值出来看看,你就清楚你按下各个按键时产生的数值。
你再去设置你的 key_value 数组的元素值。
 楼主| nono1860 发表于 2010-11-18 16:27:55 | 显示全部楼层
請問大大,我將 key_value [0-4],key_value_temp [0-4]打印出來,顯示如圖所示,但是我怎按我的按鍵(K1的- k4)都沒反應,值也都沒有變,我想是不是沒有進入此函數啊?請大大告知謝謝有點急下面是我的程式碼。可否大大幫我看是否我open還是read放錯位置。謝
ledplayer::ledplayer( QWidget* parent,  const char* name, WFlags fl )
    : QWidget( parent, name, fl )
{
       timer= new QTimer(this);
    connect(readpress,SIGNAL(timeout()),this,SLOT(getkey()));
    readpress->start(2*1000);

                    }


void ledplayer::getkey()
{
        
  fd =::open("/dev/IRQ-Test", 0);

timer->stop();

        
        ret = ::read(fd2, key_value_temp, sizeof(key_value_temp));
         
ui->lcd->display( key_value_temp[0]);
ui->lcd1->display( key_value_temp[1]);
ui->lcd2->display( key_value_temp[2]);
ui->lcd3->display( key_value_temp[3]);
ui->lcd4->display( key_value[0]);
ui->lcd5->display( key_value[1]);
ui->lcd6->display( key_value[2]);
ui->lcd7->display( key_value[3]);

  if (ret != sizeof(key_value_temp))
        {
                perror("read buttons:");
                goto out;
        }
        
        if(key_value[0] != key_value_temp[0])
        {
                   ui->lcd->display(1);
                                goto out;
        }
        if(key_value[1] != key_value_temp[1])
        {
                  ui->lcd->display(2);
                goto out;
        }
        if(key_value[2] != key_value_temp[2])
        {
               
             ui->lcd->display(3);
                goto out;
        }
        if(key_value[3] != key_value_temp[3])
        {
                           ui->lcd->display(4);
                goto out;
        }
         
        out:        readpress->start(1000);
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| nono1860 发表于 2010-11-18 18:53:27 | 显示全部楼层
更正我的圖
左邊為key_value_temp,右邊為key_value
為什麼右邊的key_value的值怪怪的,好像沒有讀取完成
我在app的button測試程序中發現key_value的值與圖上的值不同
請問大大是怎回事

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
天嵌_support1 发表于 2010-11-18 19:21:47 | 显示全部楼层
4# nono1860


我说了,你先用没有界面的程序,用printf函数,
在按下各个按键时,所产生的值书出来,你具体看看你的按键都产生了什么值,
你再确定你的判断语句。不要弄得那么复杂嘛
 楼主| nono1860 发表于 2010-11-18 20:56:51 | 显示全部楼层
我已經用過了!! key_value_temp按下會變成49 沒按會是48,key_value都是48([0~4])
 楼主| nono1860 发表于 2010-11-19 16:23:48 | 显示全部楼层
恩以解決 time->start()不可以設太大!
天嵌_support1 发表于 2010-11-19 17:02:37 | 显示全部楼层
7# nono1860


timer->start()是你驱动里的函数?
 楼主| nono1860 发表于 2010-11-24 09:30:12 | 显示全部楼层
不是!!!我是把每次循環的數字變小 再把key_value設48 目前是這樣
 楼主| nono1860 发表于 2010-11-24 09:45:09 | 显示全部楼层
不是!!!我是把每次循環的數字變小 再把key_value設48 目前是這樣
津津 发表于 2011-4-30 17:34:02 | 显示全部楼层
我也做这个测试了,没有结果啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-9-28 05:34 , Processed in 1.045832 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表