請問這個程式編譯時出現的一個warning在哪裡?! |
尚未結案
|
abc02161
一般會員 發表:2 回覆:0 積分:0 註冊:2011-04-25 發送簡訊給我 |
各位大大好~以下是小弟我寫的控制步進馬達程式
但是我在編譯時出現了一個warning不知道在哪?! 請各位前輩指點: 謝謝^^~ [code c#] #include #include #define LCD_Data P0 // 傳送的資料 #define BF 0x80 //忙碌旗標(BF=1 忙碌) char ankle[10]={0x70,0x30,0x71,0x30,0x72,0x30,0x73,0x30,0x74,0x30}; // RS232 傳送實際角度的值 // p 萬 千 百 十 個 /****************************************************************************/ // RS232 int get_data; // 收到的資料 int x; // 次方 int e,f,g,h; // 千百十個 位數 // LCM顯示 unsigned int sum,i,j,k,l,m,n,o,p,q; sbit RS=P2^0;// 處理資料=1,處理指令=0 sbit RW=P2^1;// 讀寫(讀取=1,寫入=0) sbit E=P2^2; // 致能 // 步進馬達 sbit zero=P3^7; // 歸零信號 int step_num=0,step_sum=0; // step_num=激磁代碼,step_sum=馬達步數 int step_set=0; // step_set=設定的步數 int step_angle=0; // 步進馬達實際角度 //char step_motor[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//半步激磁編碼(0.9度 400步)正->逆時針_反->順時針 char step_motor[4]={0x01,0x02,0x04,0x08};//兩相激磁編碼(1.8度 200步)正->逆時針_反->順時針/************************************副程式*********************************************/ /****************************************************************************/ // 延遲1ms=0.001s void delay(int count) { int i,j; for(i=0;i ; } /****************************************************************************/ //讀狀態 unsigned char ReadStatusLCD(void) { LCD_Data = 0xFF; RS = 0; RW = 1; E = 0; //若振盪速度太高需在這後加小的延時 delay(1); E = 1; while (LCD_Data & BF); //檢測忙信號 return(LCD_Data); } /****************************************************************************/ //寫資料 void WriteDataLCD(unsigned char WDLCD) { ReadStatusLCD(); //檢測忙 LCD_Data = WDLCD; RS = 1; RW = 0; E = 0; //若振盪速度太高需在這後加小的延時 delay(1); E = 1; } /****************************************************************************/ //寫指令 void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時忽略忙檢測 { if (BuysC) ReadStatusLCD(); //根據需要檢測忙 LCD_Data = WCLCD; RS = 0; RW = 0; E = 0; //若振盪速度太高需在這後加小的延時 delay(1); E = 1; } /****************************************************************************/ //LCM初始化 void LCDInit(void) { LCD_Data = 0; WriteCommandLCD(0x38,1); //顯示模式設定:資料長度8位元,且檢測忙信號 WriteCommandLCD(0x01,1); //清除顯示幕,並把游標移至左上角 WriteCommandLCD(0x08,1); //關閉顯示,關閉游標,游標所在字元不反白 WriteCommandLCD(0x06,1); //輸入模式設定:位置遞增,顯示幕不位移 WriteCommandLCD(0x0c,1); //開啟顯示,關閉游標,游標所在字元不反白 } /****************************************************************************/ //按指定位置顯示一個字 void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData) { Y &= 1; X &= 15; //限制X不能大於15,Y不能大於1 if (Y) X |= 0x40; //當要顯示第二行時位址碼 64個位置回到第二行; X |= 0x80; // 算出指令碼 WriteCommandLCD(X, 0); //這裡不檢測忙信號,發送位址碼 WriteDataLCD(DData); } /****************************************************************************/ // 步進馬達歸零 void step_zero_search() { zero_search: step_num ; if(step_num==4) { step_num=0; } P1=step_motor[step_num]; delay(40); if(zero!=1) { goto zero_search; } P1=0x00; step_sum=0; // 步數歸零 } /****************************************************************************/ // LCD顯示步數 void LCD_Display() { step_angle=step_sum*0.18*100; // 馬達步數 i=step_sum/1000;//千位 j=(step_sum00)/100;//百位 k=((step_sum00)0)/10;//十位 l=((step_sum00)0);//個位 // 馬達角度 m=step_angle/10000;//萬位 n=(step_angle000)/1000;//千位 o=((step_angle000)00)/100;//百位 p=(((step_angle000)00)0)/10;//十位 q=(((step_angle000)00)0);//個位 // 實際角度 ankle[1]=m 0x30; // 萬位 ankle[3]=n 0x30; // 千位 ankle[5]=o 0x30; // 百位 ankle[7]=p 0x30; // 十位 ankle[9]=q 0x30; // 個位 DisplayOneChar(6,0,i 0x30); // 顯示字元(X ,Y ,Data) DisplayOneChar(7,0,j 0x30); DisplayOneChar(8,0,k 0x30); DisplayOneChar(9,0,l 0x30); DisplayOneChar(7,1,m 0x30); // 顯示字元(X ,Y ,Data) DisplayOneChar(8,1,n 0x30); DisplayOneChar(9,1,o 0x30); DisplayOneChar(11,1,p 0x30); DisplayOneChar(12,1,q 0x30); } /****************************************************************************/ // 移動至設定步數 void goto_step_set() { regoto_step_set: if(step_set step_num ; step_sum--; if(step_num==4) { step_num=0; } P1=step_motor[step_num]; // 東轉 LCD_Display(); delay(40); } if(step_set>step_sum) // 往西 { if(step_num==0) // 西轉 { step_num=4; } step_num--; step_sum ; P1=step_motor[step_num]; LCD_Display(); delay(40); } if(step_set!=step_sum) { goto regoto_step_set; } P1=0x00; LCD_Display(); // LCM顯示 for(i=0;i<10;i ) // 傳送ankle內的值至PC { SBUF=ankle[i]; delay(100); } } /****************************************************************************/ // RS232接收 void serial_INT(void) interrupt 4 // RS232接收中斷副程式 { if(RI==1) //是否接收完畢?! { RI=0; //清除接收旗標 get_data=SBUF; switch(get_data) { case 'u': // PC端要求歸零代碼'u' if(step_sum!=0) // 不是在零度就進行歸零 { regoto_zero: step_num ; step_sum--; if(step_num==4) { step_num=0; } P1=step_motor[step_num]; // 東轉 LCD_Display(); delay(40); if(step_sum!=0) // 是否到零度 { goto regoto_zero; } } P1=0x00; SBUF='u'; // 歸零完成訊號 break; case 'a': // 下一個資料是千位數 x=4; break; case 'b': // 下一個資料是百位數 x=3; break; case 'c': // 下一個資料是十位數 x=2; break; case 'd': // 下一個資料是個位數 x=1; break; default: // 資料數值 if(x==4) // 千 { e=get_dataH; } if(x==3) // 百 { f=get_dataH; } if(x==2) // 十 { g=get_dataH; } if(x==1) // 個 { h=get_dataH; step_set=e*1000 f*100 g*10 h; // 計算所收到的設定步數 goto_step_set(); // 移動至設定步數 } break; } } } /****************************************************************************/ main() // PC控制步進馬達角度(接收步數(a千b百c十d個)後開始轉動,轉玩回傳現在角度(p 萬 千 百 十 個) ) { IE=0x90; // 整體中斷控制致能,串列埠中斷控制致能 SCON=0x50; // 8 bit UART(Mode1) TMOD=0x20; // Timer1(Mode2),使用內部計時器 TH1=0xe6; // TH1=TL1 = 256 - (振盪器頻率 / (32 * 12 * 鮑率)) TL1=0xe6; // 設定鮑率=1200 delay(400);//400ms 啟動等待,等LCD進入工作狀態 LCDInit(); //LCD初始化 P1=0x00; // 關閉步進馬達停止吃電 DisplayOneChar(0,0,'R'); DisplayOneChar(1,0,'e'); DisplayOneChar(2,0,'s'); DisplayOneChar(3,0,'e'); DisplayOneChar(4,0,'t'); DisplayOneChar(5,0,'i'); DisplayOneChar(6,0,'n'); DisplayOneChar(7,0,'g'); DisplayOneChar(8,0,'.'); DisplayOneChar(9,0,'.'); DisplayOneChar(10,0,'.'); step_zero_search(); // 步進馬達歸零 LCDInit(); //LCD初始化 DisplayOneChar(0,0,'S'); DisplayOneChar(1,0,'t'); DisplayOneChar(2,0,'e'); DisplayOneChar(3,0,'p'); DisplayOneChar(4,0,':'); DisplayOneChar(5,0,' '); DisplayOneChar(0,1,'A'); DisplayOneChar(1,1,'n'); DisplayOneChar(2,1,'g'); DisplayOneChar(3,1,'l'); DisplayOneChar(4,1,'e'); DisplayOneChar(5,1,':'); DisplayOneChar(10,1,'.'); DisplayOneChar(13,1,0xdf); // 度 DisplayOneChar(14,1,' '); LCD_Display(); // LCD顯示步數 TR1=1; // 啟動Timer1(rs232開啟) SBUF='u'; // 歸零完成訊號 lag???? while(1); } [/code]
------
Nick~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |