|
舵機(jī)控制
- #include <12c5a.H> //STC12C5A系列單片機(jī)
- unsigned char count; //0.5毫秒計數(shù)
- //PWM控制
- sbit jia =P1^6; //測試加
- sbit jan =P1^5; //測試減
- unsigned char jd; //角度控制
- sbit pwm8=P0^1;
- sbit pwm7=P1^1;
- sbit pwm6=P2^1;
- sbit pwm5=P2^0;
- sbit youyan=P3^5;
- sbit zuoyan=P3^7;
- sbit zuojiao=P1^7;
- sbit youjiao=P1^2;
- sbit zuojiao2=P1^6;
- sbit youjiao2=P1^0;
- sbit pwm4=P0^4;
- sbit pwm3=P1^4;
- sbit pwm2=P3^4;
- sbit pwm1=P2^4;
- uint16 pwm[9]={1500,1500,1500,1500,1500,1500,1500,1500,1500}; //定時器取定時值從這里取
- /**************************************************************************************************
- 函數(shù)名:delay(uint16 time)
- 功能: 軟件延時函數(shù)
- 參數(shù): time 定時值,其大小與延時長短成正比
- 備注:
- /***************************************************************************************************/
- void delay(uint16 time)
- {
- uint16 i;
- uint16 j;
- for(i=0;i<1000;i++)
- for(j=0;j<time;j++);
- }
- /**************************************************************************************************
- 函數(shù)名:timer_init()
- 功能: 定時器初始化函數(shù)
- 備注: 1T
- /***************************************************************************************************/
- void Timer_init()
- {
- EA=1; //開總中斷
- AUXR|=0xC0; //T0,T1工作在1T
- TMOD|= 0x11; //T0工作在方式1,16位
- ET0 = 1; //開定時器0中斷
- }
- /**************************************************************************************************
- 函數(shù)名:timer0(uint32 us)
- 功能: 定時器0定時函數(shù)
- 參數(shù): us,毫秒。 精確定時。
- 備注: 晶振12M,工作模式1T
- /***************************************************************************************************/
- void Timer0(uint32 us)
- {
- uint32 valu;
- valu=us*12; //工作在1T,最大定時時間2700us
- valu=valu;
- valu=0xffff-valu; //
- TH0=valu>>8;
- TL0=(valu<<8)>>8;
- TR0 = 1; //T0開始工作
- }
- /**************************************************************************************************
- 函數(shù)名:T0zd(void) interrupt 1
- 功能: 定時器0中斷函數(shù)
- 備注: 控制8個舵機(jī)
- /***************************************************************************************************/
- void T0zd(void) interrupt 1
- {
- static uint8 i=1;
- switch(i) //
- {
- case 1:
- {
- pwm1=1;
- Timer0(pwm[1]); //定時
- } break;
- case 2:
- {
- pwm1=0; //pwm1變低
- Timer0(2500-pwm[1]);// 定時
- } break;
- case 3:
- {
- pwm2=1; //pwm2變高
- Timer0(pwm[2]);// 定時時常為pwm[2]
- } break;
- case 4:
- {
- pwm2=0; //pwm2變低
- Timer0(2500-pwm[2]);// 定時時常為pwm[2]
- } break;
- case 5:
- {
- pwm3=1; //pwm3變高
- Timer0(pwm[3]);// 定時時常為pwm[3]
- } break;
- case 6:
- {
- pwm3=0; //pwm3變低
- Timer0(2500-pwm[3]);// 定時
- } break;
- case 7:
- {
- pwm4=1; //pwm4變高
- Timer0(pwm[4]);// 定時
- } break;
- case 8:
- {
- pwm4=0; //pwm4變低
- Timer0(2500-pwm[4]);// 定時
- } break;
- case 9:
- {
- pwm5=1; //pwm5變高
- Timer0(pwm[5]);// 定時
- } break;
- case 10:
- {
- pwm5=0; //pwm5變低
- Timer0(2500-pwm[5]);// 定時
- } break;
- case 11:
- {
- pwm6=1; //pwm6變高
- Timer0(pwm[6]);// 定時
- } break;
- case 12:
- {
- pwm6=0; //pwm6變低
- Timer0(2500-pwm[6]);// 定時
- } break;
- case 13:
- {
- pwm7=1; //pwm7變高
- Timer0(pwm[7]);// 定時
- } break;
- case 14:
- {
- pwm7=0; //pwm7變低
- Timer0(2500-pwm[7]);// 定時
- } break;
- case 15:
- {
- pwm8=1; //pwm8變高
- Timer0(pwm[8]);// 定時
- } break;
- case 16:
- {
- pwm8=0; //pwm8變低
- Timer0(2500-pwm[8]);// 定時
- i=0;
- } break;
- default:break;
-
- }
-
- i++;
- }
- void keyscan() //測試按鍵掃描
- {
- if(jia==0)
- {
-
- if(jia==0)
- {
- pwm[1]=pwm[1]+3;
- if(pwm[1]>=250)
- pwm[1]=250;
- delay(40);
-
-
- }
- }
- if(jan==0)
- {
-
- if(jan==0)
- {
- pwm[1]=pwm[1]-3;
-
- if(pwm[1]<=20)
- pwm[1]=20;
- delay(40);
- }
- }
- }
- void main()
- {
- P0M1=0; //設(shè)置P口為強(qiáng)推免輸出模式,下同
- P0M0=0XFF;
- P2M1=0;
- P2M0=0XFF;
-
- P3M1=0;
- P3M0=0XFF;
- P4M1=0;
- P4M0=0XFF;
- P5M1=0;
- P5M0=0XFF;
- P4SW|=0X70;
-
-
- Timer_init();
- Timer0(32);
- delay(40);
- pwm[1]=110;
- while(1)
- {
- keyscan(); //持續(xù)監(jiān)測按鍵狀態(tài)
-
- }
- }
復(fù)制代碼
|
-
-
舵機(jī)精確控制.7z
2020-4-4 12:17 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
22.05 KB, 下載次數(shù): 22, 下載積分: 黑幣 -5
|