1.按鍵控制舵機槳
為了再次領悟舵機的運用,我們使用按鍵控制舵機槳在我們想要的位置上停留。
K8負責控制舵機槳往一個方向不停旋轉,K16則控制相反方向旋轉。按鍵模式為支持連按。然后數碼管顯示高電平持續(xù)的時間,如果數碼管顯示5,則高電平在20ms周期里持續(xù)的時間為0.5ms,如果顯示的是20,那就是持續(xù)2ms的高電平時間。
#include <reg52.h> #include <function.h>//詳見第六章第8講 #include <timer.h> //詳見第八章第11講 sbit PWMOUT = P1^7; //舵機信號線引腳 u16 highval=15; void main() { u8 key; LED_Init();//初始化LED硬件模塊 KEY_Init();//初始化按鍵模塊 EA = 1; //閉合總中斷開關 TIM0_Init(100,9); //定時0.1ms,9是微調使定時精度更高 TIM1_Init(1000,0);//定時1ms,用來刷新數碼管顯示,定時精度要求不高可不微調 ShowNumber(highval); while(1) { key=KEY_Scan(1,500);//支持連按 if(key==8) { highval++; if(highval>25)highval=25;//高電平持續(xù)時間不能超過2.5ms ShowNumber(highval); } if(key==16) { highval--; if(highval<5)highval=5;//高電平持續(xù)時間不能低于0.5ms ShowNumber(highval); } } } void TIM0_IRQHandler() interrupt 1 { static u8 pwm=0; TH0 = T0RH; //重新加載重載值 TL0 = T0RL; pwm++; if(pwm>=200)pwm=0;//pwm在0~199之間間隔0.1ms變化,周期為20ms if(pwm<highval)PWMOUT=1;//highval的值決定舵機槳的停留位置 else PWMOUT=0; } void TIM1_IRQHandler() interrupt 3 { TH1 = T1RH; //重新加載重載值 TL1 = T1RL; SEG_Scan(); }
2.呼吸燈思想與舵機
呼吸燈的程序思想如果用在舵機控制上,那么舵機槳就是從0度的位置轉到180度的位置又從180度處轉回0度處如此循環(huán)往復,現在我們動手改寫一下呼吸燈的程序使其能融入舵機的控制中。
#include <reg52.h> #include <function.h>//詳見第六章第8講 #include <timer.h> //詳見第八章第11講 sbit PWMOUT = P1^7; //舵機信號線引腳 u16 highval=5; void main() { u8 key; LED_Init();//初始化LED硬件模塊 KEY_Init();//初始化按鍵模塊 EA = 1; //閉合總中斷開關 TIM0_Init(100,9); //定時0.1ms,9是微調使定時精度更高 TIM1_Init(50000,0);//定時50ms,定時精度要求不高可不微調 while(1); } void TIM0_IRQHandler() interrupt 1 { static u8 pwm=0; TH0 = T0RH; //重新加載重載值 TL0 = T0RL; pwm++; if(pwm>=200)pwm=0;//pwm在0~199之間間隔0.1ms變化,周期為20ms if(pwm<highval)PWMOUT=1;//highval的值決定舵機槳的停留位置 else PWMOUT=0; } void TIM1_IRQHandler() interrupt 3 { static u8 dir; TH1 = T1RH; //重新加載重載值 TL1 = T1RL; //控制highval只能在5~24之間變化 if(dir==1)highval--;//占空比逐漸減少,舵機槳往0度的位置走動 if(highval<5)dir=0; if(dir==0)highval++; //占空比逐漸增加,舵機槳往180度的位置走動 if(highval>=24)dir=1;//測試發(fā)現,24已經是舵機漿的盡頭,無需寫25 }
本章的舵機知識內容比較少,主要是簡單入門使用舵機,后期的教程我們再用其他模塊配合舵機一起實戰(zhàn)。
C語言網提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習題和答疑,點擊了解:
一點編程也不會寫的:零基礎C語言學練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學奧賽或C++選手的 必學C++課程
藍橋杯ACM、信息學奧賽的必學課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導課程