我現在也在做舵機控制,這是控制一個舵機的程序,可以參考!
改變單片機輸出脈沖寬度1ms~2ms,使舵機在-90°~+90°間轉動
單片機源程序如下:
- /*-----------------------------------------------
- 名稱:舵機控制
- 編寫:shifang
- 修改:無
- 內容:舵機進行循環左右搖臂動作 20ms周期,高電平時間從0.5ms~2.5ms,最大范圍,根據不同舵機調整
- ------------------------------------------------*/
- #include<reg52.h>
- #include "delay.h"
- sbit OUT = P0^0;
- unsigned char TH_H,TL_H,TH_L,TL_L;//
- /*------------------------------------------------
- 定時器初始化子程序
- ------------------------------------------------*/
- void Init_Timer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響 TOMD = TOMD | 0X01
- TH0=0x00; //給定初值,這里使用定時器最大值從0開始計數一直到65535溢出
- TL0=0x00;
- EA=1; //總中斷打開
- ET0=1; //定時器中斷打開
- TR0=1; //定時器開關打開
- }
- /*------------------------------------------------
- 數據處理
- ------------------------------------------------*/
- void DataPro(unsigned int temp)
- {
- TH_H=(65536-temp)/256;
- TL_H=(65536-temp)%256;
- TH_L=(46536+temp)/256;
- TL_L=(46536+temp)%256;
- }
- /*------------------------------------------------
- 主程序
- ------------------------------------------------*/
- main()
- {
- unsigned int temp=1500;
- bit flag=0;
- Init_Timer0();
- DataPro(temp);
- while(1)
- {
- while(!flag){
- if(temp<2300)
- temp+=10;
- else
- flag=1;
- DelayMs(3);
- DataPro(temp);
- }
- while(flag)
- {
- if(temp>700)
- temp-=10;
- else
- flag=0;
- DelayMs(3);
- DataPro(temp);
- }
-
- }
- }
- /*------------------------------------------------
- 定時器中斷子程序
- ------------------------------------------------*/
- void Timer0_isr(void) interrupt 1
- {
- if(OUT)
- {
- TH0=TH_L; //重新賦值
- TL0=TL_L;
- }
- else
- {
- TH0=TH_H; //重新賦值
- TL0=TL_H;
- }
- OUT=!OUT;
- }
復制代碼
所有資料51hei提供下載:
127-舵機扇形搖擺.rar
(23.41 KB, 下載次數: 40)
2018-6-30 12:20 上傳
點擊文件名下載附件
|