单片机源程序如下:
#include #define uchar unsigned char #define uint unsigned int /*================== 对各个输出端口的定义 对占空比的端口定义 ====================*/ sbit IN4=P1^3; //定义左轮前进 sbit IN3=P1^2; //定义左轮后退 sbit IN1=P1^0; //定义右轮前进 sbit IN2=P1^1; //定义右轮后退 sbit ENA=P1^6; //定义右轮使能 sbit ENB=P1^7; //定义左轮使能 uint Duty_left; //定义左轮占空比 uint Duty_right; //定义右轮占空比 uint i; //中断中控制占空比变量 /*=========== ms级延时函数 =============*/ void delay(uint n) { int x,y; for(x=n;x>0;x--) for(y=115;y>0;y--); } /*======= 停止函数 =========*/ void tingzhi() { Duty_left=0; //左轮占空比 Duty_right=0; //右轮占空比 IN1=0; IN2=0; IN3=0; IN4=0; } /*======= 前进函数 =========*/ void qianjin() { Duty_left=100; //左轮占空比 IN4=0; IN3=1; delay(3000); ENB=0; delay(3000); ENB=1; } /*============ pwm初始化函数 ==============*/ void pwm_init() { TMOD |= 0x01; //设置定时器工作方式0x01 TH0=(65536-1)/256; //取约150HZ,12M晶振,每次定时66us,分100次, TL0=(65536-1)%256; //这样开头定义的变量正好直接表示占空比的数值 EA=1; //打开总中断 ET0=1; //开启定时器0中断 TR0=1; //启动定时器0 } main() { pwm_init(); while(1) { qianjin(); } } /*======== 中断函数 ==========*/ void T0_timer() interrupt 1 { i++; if(i<=Duty_right) ENA=1; else ENA=0; if(i<=Duty_left) ENB=1; else ENB=0; if(i==100) { i = 0; } TH0=(65536-1)/256; //取约150HZ,12M晶振,每次定时66us,分100次, TL0=(65536-1)%256; //这样开头定义的变量正好直接表示占空比的数值 }
上一篇:分享一个STC89C52的头文件
下一篇:51单片机蓝牙点灯程序
推荐阅读
史海拾趣



ASM10DTBD-S664






京公网安备 11010802033920号