#include <reg52.h> //头文件
#define uchar unsigned char //宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
uchar b; //中断值
uchar N=0; //占空比计数值
uchar X=50; //占空比初始值
uchar key_up;
uchar key_down;
/************************************************************************
按键初始化
*************************************************************************/
sbit P2_0=P2^0;//正转
sbit P2_1=P2^1;//反转
sbit P2_2=P2^2;//加速
sbit P2_3=P2^3;//减速
sbit P2_4=P2^4;//停止
sbit P1_0=P1^0;//输出控制方向(高电平为电机正转/低电平为电机反转)
sbit P1_1=P1^1;//输出控制刹车(高电平为电机运行/低电平为电机停止)
sbit PWMA=P3^7;//控制PWM输出 (利用脉宽控制电机的转速)
/************************************************************************
调速按键扫描函数
*************************************************************************/
void get_key(void)//按键扫描函数
{
while(P2_2==0)//按键加计数标志
{key_up=1;
}
while(P2_3==0)//按键减计数标志
{key_down=1;
}
}
/************************************************************************
定时器中断执行函数
*************************************************************************/
void timer0( ) interrupt 1 //定时器0工作方式1
{
TH0=(65536-1)/256; //重装计数初值
TL0=(65536-1)%256; //重装计数初值
b++;
get_key();
if (key_up==1)
{
if(X!=100)//判断是否计数到9999
{
X=X+2;//加一
key_up=0;
}
}
if (key_down==1)
{
if(X!=0)//判断是否计数到0
{
X=X-2;//减一
key_down=0;
}
}
}
/************************************************************************
程序主函数
*************************************************************************/
void main()
{
TMOD=0X01; //定时器中断0
TH0=(65536-2)/256; //定时时间高八位初值
TL0=(65536-2)%256; //定时时间低八位初值
EA=1; //开CPU中断
ET0=1; //开T/C0中断
TR0=1;
/****************************PWM处理部分*********************************************/
while(1) //无限循环
{
PWMA=1; //输出PWM正
while(1)
{
b=0;
while(!b);
if (N==X)
PWMA=0;
if (N==100)break;
N++;
/*****************************电机按键控制部分****************************************/
while(P2_0==0)//按键加计数标志
{
P1_0=0;//输出控制方向(高电平为电机正转/低电平为电机反转)
P1_1=1;//输出控制刹车(高电平为电机运行/低电平为电机停止)
}
while(P2_1==0)//按键减计数标志
{
P1_0=1;//输出控制方向(高电平为电机正转/低电平为电机反转)
P1_1=1;//输出控制刹车(高电平为电机运行/低电平为电机停止)
}
while(P2_4==0)//按键减计数标志
{
P1_1=0;//输出控制刹车(高电平为电机运行/低电平为电机停止)
}
/*************************************************************************************/
}
N=0;
}
}
/******************************程序结束************************************************/