PCA9685实现16路舵机驱动程序单片机解密 时间:2025-11-17 来源: 芯片解密 浏览:2次 字号:大 中 小 单片机解密51驱动16路舵机程序。单片机源程序如下:#include"reg51.h" #include <intrins.h>#include <stdio.h>#include <math.h>typedef unsigned char uchar; typedef unsigned int uint; sbit scl=P2^1; sbit sda=P2^0; #define PCA9685_adrr 0x80#define PCA9685_SUBADR1 0x2#define PCA9685_SUBADR2 0x3#define PCA9685_SUBADR3 0x4#define PCA9685_MODE1 0x0#define PCA9685_PRESCALE 0xFE#define LED0_ON_L 0x6#define LED0_ON_H 0x7#define LED0_OFF_L 0x8#define LED0_OFF_H 0x9#define ALLLED_ON_L 0xFA#define ALLLED_ON_H 0xFB#define ALLLED_OFF_L 0xFC#define ALLLED_OFF_H 0xFD#define SERVOMIN 90 // this is the 'minimum' pulse length count (out of 4096)#define SERVOMAX 700 // this is the 'maximum' pulse length count (out of 4096)#define SERVO000 130 //#define SERVO180 520 //void delayms(uint z){ uint x,y; for(x=z;x>0;x--) for(y=148;y>0;y--);}void delayus(){ _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}void init(){ sda=1; delayus(); scl=1; delayus();}void start(){ sda=1; delayus(); scl=1; delayus(); sda=0; delayus(); scl=0; delayus();}void stop(){ sda=0; delayus(); scl=1; delayus(); sda=1; delayus();}void ACK(){ uchar i; scl=1; delayus(); while((sda==1)&&(i<255)) i++; scl=0; delayus();} 下一篇:单片机+GP2Y1014AU pm2.5测量单片机解密