发布时间:2018-04-25编辑:佚名阅读(2292)
主函数:
// GYZ // 1路PWM波形输出,可以控制舵机和电调 #include<reg52.h> //引脚位定义 sbit key1 = P2^5; sbit key2 = P2^4; //独立按键引脚 sbit pwm1 = P2^7; //全局变量定义 unsigned int target =6,percent = 0; // 头文件包含 #include<Timer.h> #include<interrupt.h> #include<key.h> //函数声明 void Timer0Initial(); void initial_Timer(); void delay(unsigned int x); void keyscan(); void main() { initial(); while(1) { keyscan(); } }
独立按键扫描key.h
void keyscan() { if(key1 == 0) { delay(3); if(key1 == 0) { if(target >= 7) { target -= 1; } while(key1 == 0) {P1 = 0x00;} } P1 = 0xFF; } if(key2 == 0) { delay(3); if(key2 == 0) { if(target <= 26) { target += 1; } while(key2 == 0) {P1 = 0x00;} } P1 = 0xFF; } }//按键检测程序 void initial() { key1 = 1; key2 = 1; P1 = 0xff; initial_Timer(); }
定时器程序Timer.h
//Timer Configuration //使用12Mhz晶振 //理论上,12Mhz晶振12分频之后 //应该是100次计数时间是100us //选用65次计数产生一次中断 void Timer0Initial() { TH0 = (65536-65)/256; TL0 = (65536-65)%256; } //该初值使每0.1ms产生一次中断 void initial_Timer() { EA = 1; //开启总中断 ET0 = 1; //允许T0中断 TMOD = 0x01; //定时器模式,T0使用工作方式1 Timer0Initial(); //装初值,0.1ms产生一次中断 TR0 = 1; //打开T0定时器 } void delay(unsigned int x) { unsigned int i,j; for(i = 0;i< x; ++i) for(j = 120; j >0 ; --j) ; }
中断的程序interrupt.h
void Timer0() interrupt 1 using 0 { percent += 1; if(percent == 200) { percent = 0; pwm1 = 1;//拉高电平的引脚,来维持50hz的频率 } if(percent == target) { pwm1 = 0; } Timer0Initial(); }
关键字: 51单片机控制舵机
上一篇:a328p控制舵机
下一篇:华为手机关闭铃声渐变
0人
0人
0人
0人