1.主函数(main.c)代码部分:
#include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Servo.h" #include "Key.h" uint8_t KeyNum; float Angle; int main(void) { OLED_Init(); Servo_Init(); Key_Init(); OLED_ShowString(1, 1, "Angle:"); while (1) { KeyNum = Key_GetNum(); if (KeyNum == 1) { Angle += 30; if (Angle > 180) { Angle = 0; } } Servo_SetAngle(Angle); OLED_ShowNum(1, 7, Angle, 3); } }
2.舵机单独封装代码部分:
#include "stm32f10x.h" // Device header #include "PWM.h" void Servo_Init(void) { PWM_Init(); } void Servo_SetAngle(float Angle) { PWM_SetCompare2(Angle / 180 * 2000 + 500); } #ifndef __SERVO_H #define __SERVO_H void Servo_Init(void); void Servo_SetAngle(float Angle); #endif
3.设计思路:与PWM驱动LED呼吸灯基本相似,只是单独封装一个函数,并单独计算/调用角度,达到要求。