
#include "reg51.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
sbit out1=P2^3;//电机
sbit out2=P2^4;
sbit k1=P1^0;//按钮
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
uchar flag=0,fang=0;//方向控制
uchar speed=5,time=0;//速度控制0-9
uchar start=0;//启动
uchar sec=0;
uchar disp1[]="sudu:0 ";//速度
//主函数
void main()
{
init_1602();
TMOD|=0X01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
//按键检测
if(!k1)//启动
{
start=1;
}
if(!k2)//停止
{
start=0;
}
if(!k3)//正转
{
fang=0;
}
if(!k4)//反转
{
fang=1;
}
if(!k5)//加速
{
if(speed<9)
speed++;
while(!k5);
}
if(!k6)//减速
{
if(speed>0)
speed--;
while(!k6);
}
//电机控制
if(start==1)
{
if(time<9)
time++;
else
time=0;
if(fang==0)//正转
{
if(time<speed)
{
out2=0;out1=1;
}
else
{
out2=1;
}
}
else //反转
{
if(time<speed)
{
out1=0;out2=1;
}
else
{
out1=1;
}
}
}
else
{
out1=1;
out2=1;
}
}
}
//定时器中断
void Timer0() interrupt 1
{
//=================显示
if(sec<50)//0.5s
sec++;
else
{
sec=0;
disp1[5]=speed+0x30;//速度
write_string(1,0,disp1);
if(start)
{
if(fang==0)
{
write_string(2,6,"right");
}
else
{
write_string(2,6,"left ");
}
}
else
{
write_string(2,6,"stop ");
}
}
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
}