qlb1234 发表于 2009-10-11 12:41:55

调试两天了,灯还是亮不起来,请教高手

不知道程序的思路有没有错。

先定义_QTOUCH_等关键词:
#define _QTOUCH_
#define QT_NUM_CHANNELS 4
#define SNSK B
#define SNS D
#define _ROTOR_SLIDER_
#define QT_DELAY_CYCLES 2

再包含API头文件:
#include"avr\io.h"
#include"avr\interrupt.h"
#include"touch_api.h"

关掉上拉电阻,PORTC输出:
MCUCR|=(1<<PUD);
DDRC=0xFF;

用一个定时器来算时间:
volatile unsigned char qt_measure_flag;//检测标志,全局变量
volatile unsigned int hw_time_ms;//系统当前时间,全局变量
sei();
TIMSK1|=(1<<TOIE1);
TCNT1H=0xFF;
TCNT1L=0x83;
TCCR1B|=(1<<CS11)|(1<<CS10);
SIGNAL(SIG_OVERFLOW1)
{
        TCNT1H=0xFF;
        TCNT1L=0x83;
        hw_time_ms++;
        qt_measure_flag=1;
}
这样,一次中断就1毫秒了。

然后就是跟QTouch有关的部分了:
volatile qt_touch_status_t qt_touch_status;
qt_enable_key(CHANNEL_6, NO_AKS_GROUP, 10u, HYST_6_25);
qt_init_sensing();
while(1)
{
        if(qt_measure_flag)
        {
                qt_measure_flag=0;
                qt_measure_sensors(hw_time_ms);
                if(qt_touch_status.sensor_states[0]&0x01)
                        PORTC=0xFE;
                ……
到这里,如果手指接触A键,灯应该亮起来的才对。不知道是哪里出错了。请高手指点。

Gorgon_Meducer 发表于 2009-10-11 19:02:37

官方的例子能跑起来么?

qlb1234 发表于 2009-10-11 19:13:35

傻孩子大哥能不能发个GCC的简单一按键代码?或者给个HEX让我试验试验,谢谢。

qlb1234 发表于 2009-10-11 21:48:05

已点亮!等一会发张帖子汇报。

lwb_2888 发表于 2009-12-18 16:04:12

我现在在搞一个矩阵式的按键,共24个按键。可是就算没有按键按下,照样有值返回,郁闷

midisamboy 发表于 2010-2-6 17:59:09

能请教吗?这段代码我用的有问题

midisamboy 发表于 2010-2-6 18:01:50

做了三个触摸键,一个触摸键能响应,点亮灯,另一个熄灭灯,结果,熄灭灯后,灯又亮了

midisamboy 发表于 2010-2-6 18:04:52

#include<avr\io.h>
#include<avr\interrupt.h>
#include<touch_api.h>
#include"_QTOUCH_.h"



//unsigned char key_test_flag1=0;
//unsigned char key_test_flag2=0;


unsigned int hw_time_ms;
volatile unsigned char qt_measure_flag;//检测标志,全局变量
volatile qt_touch_status_t qt_touch_status;

//unsigned char test_time;

void delay(unsigned char m)
{
static unsigned char i,j,k;
for(i=0;i<m;i++)
   {
    for(j=0;j<200;j++)
           {
       for(k=0;k<200;k++);
       }
   }
}
SIGNAL(SIG_OVERFLOW1)
{
        TCNT1H=0xFF;
        TCNT1L=0xaa;//0x83
        hw_time_ms++;
        qt_measure_flag=1;
//        test_time++;

}


void port_init(void)
{

        MCUCR|=(1<<PUD);
       
        DDRC=0xFF;
        PORTC=0xFF;
//        PORTC&=~(1<<PC0);
//        PORTC&=~(1<<PC1);
//        PORTC&=~(1<<PC5);
        PORTC&=~(1<<PC2);
}

void timer1_init(void)
{
        TCNT1H=0xFF;
        TCNT1L=0xaa;//0x83
        TCCR1B|=(1<<CS11)|(1<<CS10);
}

void int_ctrl(void)
{
        sei();
        TIMSK1|=(1<<TOIE1);
}

void sys_init(void)
{
        port_init();
        timer1_init();
        int_ctrl();
        hw_time_ms=0;
}
void channel_1()
{

                if(qt_measure_data.qt_touch_status.sensor_states&0x01)
                   {

            
             PORTC|=(1<<PC2);
                  
               
                   //PORTC|=(1<<PC0);
                   }

}

void channel_2()

{

       if(qt_measure_data.qt_touch_status.sensor_states&0x02)
                   {

                     PORTC&=~(1<<PC2);
                   //PORTC|=(1<<PC2);
         

                   //PORTC|=(1<<PC1);
                  
                   }

}


void channel_3()
{
                if(qt_measure_data.qt_touch_status.sensor_states&0x04)
                   {

         PORTC&=~(1<<PC2);
                   //PORTC|=(1<<PC2);
         

                   //PORTC|=(1<<PC5);
                   }

}

int main(void)
{
        sys_init();
        qt_reset_sensing();
        qt_enable_key(CHANNEL_0, NO_AKS_GROUP, 10, HYST_25);
//        qt_enable_key(CHANNEL_2, AKS_GROUP_1, RECAL_12_5, HYST_6_25);
        qt_enable_key(CHANNEL_4, NO_AKS_GROUP, 10, HYST_25);
        qt_enable_key(CHANNEL_2, NO_AKS_GROUP, 10, HYST_25);//HYST_25
        qt_init_sensing();

        while(1)
        {
       if(qt_measure_flag)
           {
          
                qt_measure_flag=0;
                qt_measure_sensors(hw_time_ms);
                //hw_time_ms=0;

      channel_1();
                channel_2();
                channel_3();
      //delay(100);
      }
        }
}

midisamboy 发表于 2010-2-6 18:07:51

说明,用的是MEGA88,三个触摸键,触摸的逻辑出错了,请哪位大虾帮我看看
页: [1]
查看完整版本: 调试两天了,灯还是亮不起来,请教高手