赞
踩
使用STC89C51单片机控制SG90舵机来回旋转
main.c
- #include "control.h"
-
- void main() {
-
- Timer1_Init();
-
- while(1){
-
- control ();
-
- }
- }
control.c
- #include <reg52.h>
- #include <intrins.h>
-
- sbit PWM = P1^0; // 舵机信号输入点位
-
- unsigned char counter, angle; // 计数值和旋转方向, angle范围 (1-5);
-
- // @11.0592MHZ
- void Delay500ms(){
-
- unsigned char i, j, k;
- _nop_();
- i = 4;
- j = 129;
- k = 119;
- do
- {
- do
- {
- while(--k);
- } while(--j);
- } while(--i);
- }
- // 500微秒@11.0592MHZ
- void Timer1_Init(){
-
- TMOD = 0x10; // 设置定时器模式
- TL1 = 0x33; // 设置定时初始值
- TH1 = 0xFE; // 设置定时初始值
-
- TF1 = 0; // 清除TF1标志
- TR1 = 1; // 定时器1开始计时
- ET1 = 1; // 定时器1的中断允许开关
- EA = 1; // 定时器总开关
- PT1 = 1; // 设置定时器为高低控制优先级
- }
-
- // 中断函数
- void Timer1_Routine() interrupt 3
- {
- TL1 = 0x33; // 设置定时初始值
- TH1 = 0xFE; // 设置定时初始值
- counter++;
- if (counter >= 40) {
- counter = 0;
- }
- if (counter < angle) {
- PWM = 1;
- } else {
- PWM = 0;
- }
- }
-
- void control(){
-
- counter = 0;
- angle = 2; // -45度位置
- Delay500ms();
-
- counter = 0;
- angle = 4; // +45度位置
- Delay500ms();
-
- counter = 0;
- angle = 3; // 0度位置(归中)
- Delay500ms();
- Delay500ms();
- }
control.h
- #ifndef __CONTROL_H_
- #define __CONTROL_H_
-
- Timer1_Init();
- void control ();
-
- #endif
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。