|
|
每周只有周末有時(shí)間弄弄,12月2日的進(jìn)度
編碼器和PWM抄了一段程序,各種編譯錯(cuò)誤請各位高人指點(diǎn)指點(diǎn)。
1、編碼器函數(shù),Encoder_EC11_Scan() 是判斷編碼器旋轉(zhuǎn)方向,EC11_Key_Scan()是判斷編碼器按鍵狀態(tài)
//----------------EC11 編碼器掃描函數(shù)----------------//
char Encoder_EC11_Scan() /* 這里只是部分代碼 */
{
char ScanResult = 0; //返回編碼器掃描結(jié)果,用于分析編碼器的動(dòng)作
//返回值的取值: 0:無動(dòng)作; 1:正轉(zhuǎn); -1:反轉(zhuǎn);
if(EC11_A_Now != EC11_A_Last) //以A為時(shí)鐘,B為數(shù)據(jù)。正轉(zhuǎn)時(shí)AB反相,反轉(zhuǎn)時(shí)AB同相
{
if(EC11_A_Now == 0)
{
if(EC11_B_Now ==1) //只需要采集A的上升沿或下降沿的任意一個(gè)狀態(tài),若A下降沿時(shí)B為1,正轉(zhuǎn)
ScanResult = 1; //正轉(zhuǎn)
else //反轉(zhuǎn)
ScanResult = -1;
}
EC11_A_Last = EC11_A_Now; //更新編碼器上一個(gè)狀態(tài)暫存變量
EC11_B_Last = EC11_B_Now; //更新編碼器上一個(gè)狀態(tài)暫存變量
}
return ScanResult; //返回值的取值: 0:無動(dòng)作; 1:正轉(zhuǎn); -1:反轉(zhuǎn);
}
//----------------EC11 按鍵掃描函數(shù)----------------//
int EC11_Key_Scan()
{
unsigned int i = 0;
if(EC11_Key == 1 && i == 0)
{
delay_ms(1);
if(EC11_Key == 1)
{
i = 1;
}
}
/* else if(EC11_Key == 1 && i == 1)
{
delay_ms(1);
if(EC11_Key == 1)
{
i = 2;
}
}
else if(EC11_Key == 1 && i == 2)
{
delay_ms(1);
if(EC11_Key == 1)
{
i = 3;
}
} */
else
{
i = 0;
}
return i;
}
2、PWM pwm_init(void) 是初始化,pwm_set0(unsigned int x) pwm_set1(unsigned int x) 為設(shè)置兩個(gè)通道的占空比
//----------------PWM初始化函數(shù)----------------//
void pwm_init(void) //PWM初始化函數(shù),初始占空比為0
{
CMOD=0x02; //0000 0010 空閑時(shí)不計(jì)數(shù),不產(chǎn)生中斷,時(shí)鐘源為fosc/2,因此輸出占用率為fosc/512
CL=0x00;
CH=0x00;
AUXR1 = 0x10; //切換IO口
CCAPM0=0x42; //0100 0010, 8位 PWM
CCAPM1=0x42; //0100 0010, 8位 PWM
CCAP0L=0x00;
CCAP0H=0x00; //PWM實(shí)現(xiàn)方法,因?yàn)槭牵肝唬珻L基礎(chǔ)計(jì)數(shù)器從0xFF遞減到0x00,溢出后將CCAP0H
//的值加載到CCAP0L,若CL遞減過程中,若大于CCAP0L,則輸出高電平,否則為低電平
CCAP1L=0x00;
CCAP1H=0x00;
CR=1; //開啟PCA計(jì)數(shù)器
}
void pwm_set0(unsigned int x) //占空比設(shè)置函數(shù)
{
if(x>255) x=255 ;
if(x<10) x=10 ;
CCAP0H=x; //設(shè)置比較值
CCAP0L=x;
}
void pwm_set1(unsigned int x) //占空比設(shè)置函數(shù)
{
if(x>255) x=255 ;
if(x<5) x=5 ;
CCAP1H=x; //設(shè)置比較值
CCAP1L=x;
}
3、主函數(shù)這里一堆錯(cuò)誤,
if EC11_Key_Scan()==1 判斷按鍵未按下,為電壓調(diào)節(jié)模式
{
if Encoder_EC11_Scan()==1 編碼器正傳
{ pwm_0=pwm_0++;
pwm_set0(pwm_0); 占空比增大
}
if Encoder_EC11_Scan()==-1 編碼器反傳
{ pwm_0=pwm_0--;
pwm_set0(pwm_0); 占空比減小
}
}
if EC11_Key_Scan()==0 按鍵按下,為電流調(diào)節(jié)模式
{ if Encoder_EC11_Scan()==1
{pwm_1=pwm_1++;
pwm_set1(pwm_1);
}
if Encoder_EC11_Scan()==-1
{ pwm_1=pwm_1--;
pwm_set1(pwm_1);
}
}
4、一堆錯(cuò)誤
MAIN.C(212): error C141: syntax error near 'EC11_Key_Scan', expected '('
MAIN.C(213): error C141: syntax error near '{'
MAIN.C(215): error C141: syntax error near '{'
MAIN.C(218): error C141: syntax error near 'Encoder_EC11_Scan', expected '('
MAIN.C(219): error C141: syntax error near '{'
MAIN.C(223): error C141: syntax error near 'EC11_Key_Scan', expected '('
MAIN.C(224): error C141: syntax error near '{'
MAIN.C(225): error C141: syntax error near '{'
MAIN.C(228): error C141: syntax error near 'Encoder_EC11_Scan', expected '('
MAIN.C(229): error C141: syntax error near '{'
|
|