单片机源程序如下:
#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; //这样开头定义的变量正好直接表示占空比的数值
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』