找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1791|回復(fù): 6
收起左側(cè)

大神們,求指教ADC比較問題

[復(fù)制鏈接]
ID:321930 發(fā)表于 2020-1-19 21:44 | 顯示全部樓層 |閱讀模式
想照貓畫虎做個追光系統(tǒng),ADC采集沒問題了,可是本人太菜不會做比較,我的意思是比較兩個ADC數(shù)值若差大于一定值舵機(jī)就增加一定脈沖。應(yīng)該怎么寫,謝謝了

回復(fù)

使用道具 舉報(bào)

ID:321930 發(fā)表于 2020-1-19 21:47 | 顯示全部樓層
剛開始簡單寫成if(adc1-adc2>10){jiaodu++;}編譯通過不了,沒學(xué)過C
回復(fù)

使用道具 舉報(bào)

ID:592807 發(fā)表于 2020-1-20 11:56 | 顯示全部樓層
這兩句沒錯,估計(jì)其他地方錯了,你要把錯誤提示發(fā)出來
回復(fù)

使用道具 舉報(bào)

ID:679425 發(fā)表于 2020-1-20 13:36 | 顯示全部樓層
編譯時的錯誤提示
回復(fù)

使用道具 舉報(bào)

ID:553941 發(fā)表于 2020-1-20 14:10 | 顯示全部樓層
你要提供錯誤信息和源碼呀,不然怎么知道你哪的錯
回復(fù)

使用道具 舉報(bào)

ID:321930 發(fā)表于 2020-1-28 16:54 | 顯示全部樓層



#include    "config.h"
#include    "adc.h"
#include    "delay.h"
//#include    "soft_uart.h"
#include    "pcf8574lcd.h"
unsigned int scale1;//占空比控制變量
unsigned int scale2;//占空比控制變量
sbit out1=P3^6;
sbit out2=P3^7;
sbit key1=P3^5;
sbit key2=P3^4;
sbit key3=P3^3;
sbit key4=P3^2;

unsigned int kf1=1;//按鍵用的標(biāo)志位
unsigned int kt1=0;//按鍵用的標(biāo)志位
unsigned int kf2=1;//按鍵用的標(biāo)志位
unsigned int kt2=0;//按鍵用的標(biāo)志位
unsigned int num1=50;
unsigned int num2=25;
unsigned int ADC1;//上
unsigned int ADC2;//下
unsigned int ADC3;//左
unsigned int ADC4;//右
unsigned int ADC5;//電壓
volatile uint8 data display_buffer1[16];    //顯示緩沖區(qū)1
volatile uint8 data display_buffer2[16];    //顯示緩沖區(qū)2
                             




void timer0() interrupt 1{//定時器0 0中斷服務(wù)程序
    static unsigned int tt1,tt2;//tt用來保存當(dāng)前時間在一秒中的比例位置
    tt1++;
    tt2++;
     //每10微妙增加1
    if(tt1==150){//2.5毫秒的時鐘周期
        tt1=0;//使tt=0,開始新的PWM周期
        out1=0;
         
    }
    if(tt2==150){//2.5毫秒的時鐘周期
        tt2=0;//使tt=0,開始新的PWM周期
        out2=0;
         
    }
    if(scale1==tt1){//按照當(dāng)前占空比鐵環(huán)輸出為高電平
out1=1;        
    }
    if(scale2==tt2){//按照當(dāng)前占空比鐵環(huán)輸出為高電平
        
out2=1;
    }
}


void    ADC_config(void)
{
    ADC_InitTypeDef        ADC_InitStructure;                //結(jié)構(gòu)定義
    ADC_InitStructure.ADC_Px        = ADC_P10 | ADC_P11 | ADC_P12 | ADC_P13 | ADC_P14 ;    //設(shè)置要做ADC的IO,    ADC_P10 ~ ADC_P17(或操作),ADC_P1_All
    ADC_InitStructure.ADC_Speed     = ADC_540T;            //ADC速度            ADC_90T,ADC_180T,ADC_360T,ADC_540T
    ADC_InitStructure.ADC_Power     = ENABLE;            //ADC功率允許/關(guān)閉    ENABLE,DISABLE
    ADC_InitStructure.ADC_AdjResult = ADC_RES_H8L2;        //ADC結(jié)果調(diào)整,    ADC_RES_H2L8,ADC_RES_H8L2
    ADC_InitStructure.ADC_Polity    = PolityLow;        //優(yōu)先級設(shè)置    PolityHigh,PolityLow
    ADC_InitStructure.ADC_Interrupt = DISABLE;            //中斷允許        ENABLE,DISABLE
    ADC_Inilize(&ADC_InitStructure);                    //初始化
    ADC_PowerControl(ENABLE);                            //單獨(dú)的ADC電源操作函數(shù), ENABLE或DISABLE
}




void ADC_zhuanhuan(void)
{
u8 a,b,c,d;
ADC1=Get_ADC10bitResult(0);//上下左右  電壓
ADC2=Get_ADC10bitResult(1);
ADC3=Get_ADC10bitResult(2);
ADC4=Get_ADC10bitResult(3);
ADC5=Get_ADC10bitResult(4);
a=ADC1/11;
b=ADC2/11;
c=ADC3/11;
d=ADC4/11;


}

/**************************************************************
更新顯示緩沖區(qū)
***************************************************************/
void updata_buffer(void)
{
//顯示日期
    u8 a,b,c,d;

   display_buffer1[0] = 'S';
   display_buffer1[1] = ':';
    display_buffer1[2] = a/10+0x30;        //年
    display_buffer1[3] = a%10+0x30;
   display_buffer1[4] = ' ';
   display_buffer1[5] = 'X';
   display_buffer1[6] = ':';
    display_buffer1[7] = b/10+0x30;        //年
    display_buffer1[8] = b%10+0x30;
   display_buffer1[9] = ' ';
   display_buffer1[10] = ' ';
   display_buffer1[11] = ' ';
   display_buffer1[12] = ' ';
   display_buffer1[13] = ' ';
   display_buffer1[14] = num1/10+0x30;
   display_buffer1[15] = num1%10+0x30;

   display_buffer2[0] = 'Z';
   display_buffer2[1] = ':';
    display_buffer2[2] = c/10+0x30;        //年
    display_buffer2[3] = c%10+0x30;
   display_buffer2[4] = ' ';
   display_buffer2[5] = 'Y';
   display_buffer2[6] = ':';
    display_buffer2[7] = d/10+0x30;        //年
    display_buffer2[8] = d%10+0x30;
   display_buffer2[9] = ' ';
   display_buffer2[10] = ' ';
   display_buffer2[11] = ' ';
   display_buffer2[12] = ' ';
   display_buffer2[13] = ' ';
   display_buffer2[14] = num2/10+0x30;
   display_buffer2[15] = num2%10+0x30;

  
   

   

}
/******************************************************************
顯示緩沖區(qū)內(nèi)容
*******************************************************************/
void display_buffer(void)
{
    uint8 i ;
    send_command(0x80) ;    //顯示第一行
    for(i=0;i<16;i++)
    send_data(display_buffer1[i]);
    send_command(0xc0) ;   //顯示第二行
    for(i=0;i<16;i++)
    send_data(display_buffer2[i]);
}

/*****************************************************/
/**********************************************/
void main(void)
{
    u8 a,b,c,d;
  
TMOD=0x02;//定時器0,工作模式2(0000,0010),8位定時模式
    TL0 = 0xec;        //設(shè)置定時初值   20微妙
    TH0 = 0xec;        //設(shè)置定時重載值
    TR0=1;//啟動定時器
    ET0=1;//允許定時器0中斷
    EA=1;//允許總中斷


lcd_open();   
init_lcd() ;   
   
    while (1)
    {
    updata_buffer();

    display_buffer();
      ADC_zhuanhuan();
/**********************************************/
   


    if(a-b>=10){
      num1++;
   
        if(num1>99)
           {
             num1=99;
                  }
                  }
/**********************************************/
/**********************************************/
      
    if(b-a>=10){
      num1--;
   
        if(num1<50)
           {
             num1=50;
                  }
                  }
/**********************************************/
/**********************************************/
      
    if(c-d>=10){
      num2++;
   
        if(num2>99)
           {
             num2=99;
                  }
                  }
/**********************************************/
/**********************************************/
      
    if(d-c>=10){
      num2--;

        if(num2<25)
           {
             num2=25;
                  }
                  }
/**********************************************/
           if(key1==0){
                num1=50;
                scale1=25;            
             }
        if(key2==0){//當(dāng)按鍵1按下
            if(kf1){//當(dāng)標(biāo)志位kf0=1的時候進(jìn)行
                    kf1=0;//標(biāo)志位kf0=0
                    kt1=1;//標(biāo)志位kt0=0
                    num1++;
              }
        }else{//當(dāng)按鍵松開
           if(kt1){//當(dāng)標(biāo)志位kt0=1的時候進(jìn)行
                kf1=1;//標(biāo)志位kf0=1
                kt1=0;//標(biāo)志位kt0=0
           }
        }//按鍵1結(jié)束
          if(key3==0){//當(dāng)按鍵1按下
            if(kf2){//當(dāng)標(biāo)志位kf0=1的時候進(jìn)行
                    kf2=0;//標(biāo)志位kf0=0
                    kt2=1;//標(biāo)志位kt0=0
                    num1--;
              }
        }else{//當(dāng)按鍵松開
           if(kt2){//當(dāng)標(biāo)志位kt0=1的時候進(jìn)行
                kf2=1;//標(biāo)志位kf0=1
                kt2=0;//標(biāo)志位kt0=0
           }
        }//按鍵1結(jié)束
        if(key4==0){
                num1=99;
            
        }
         
        scale1=num1+25;        
        scale2=num2+25;
    //           ADC_soft_uart();
     }
}
大神們過年好,程序是這樣的,無法通過作比較使得程序中的角度進(jìn)行加減,num1和num2的值一直保持不變,按鍵是正常的,程序可以通過編譯了


IMG_20200128_164624.jpg
回復(fù)

使用道具 舉報(bào)

ID:321930 發(fā)表于 2020-1-28 17:09 | 顯示全部樓層
IMG_20200128_164624.jpg SXZY分別代表上下左右,右側(cè)兩個值就是角度
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表