|
#include <reg52.h>
#include <intrins.h>
void Delay10ms();
void Delay5ms();
void Delay1ms();
#define uchar unsigned char
#define uint unsigned int
sbit a=P1^0; //電機(jī)信號(hào)輸入
sbit b=P1^1;
sbit c=P1^2;
sbit d=P1^3;
sbit pwm1=P1^4;
sbit pwm2=P1^5;
sbit buzz=P2^7;
uchar cishu; //中斷次數(shù)
uchar p1; //p1占空比
uchar p2; //p2占空比
void qian() //方向控制
{
a=1;b=0;c=1;d=0;
}
void hou() //方向控制
{
a=0;b=1;c=0;d=1;
}
void zuo() //方向控制
{
a=1;b=0;c=0;d=1;
}
void you() //方向控制
{
a=0;b=1;c=1;d=0;
}
void ting() //方向控制
{
a=0;b=0;c=0;d=0;
}
void jia()
{
if(p1>29)
{
p1=30;p2=30; buzz=0;
}
else
{
p1++; p2++; buzz=1;
}
}
void jian()
{
if(p1<21)
{
p1=20;p2=20;buzz=0;
}
else
{
p1--; p2--; buzz=1;
}
}
uchar RxData()
{
uchar tmp; //定義一個(gè)臨時(shí)變量,用來保存接收到的數(shù)據(jù)
while (!RI);//等待數(shù)據(jù)接收完,接收完后時(shí)RI會(huì)自動(dòng)置1
RI = 0; //清中斷標(biāo)志
tmp = SBUF; //將接收到的數(shù)據(jù)保存到tmp中
return tmp; //返回接收到的數(shù)據(jù)
}
void UartInit(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位數(shù)據(jù),可變波特率
TMOD &= 0x00; //清除定時(shí)器1模式位
TMOD |= 0x21; //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
TL1 = 0xFD; //設(shè)定定時(shí)初值
TH1 = 0xFD; //設(shè)定定時(shí)器重裝值
ET1 = 0; //禁止定時(shí)器1中斷
TR1 = 1; //啟動(dòng)定時(shí)器1
TL0 = 0xF1; //設(shè)置定時(shí)初值
TH0 = 0xFF; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
ET0 = 1;
EA = 1;
ES=1;
}
void main()
{
UartInit();
RI = 1;
p1=25;p2=25;
while(1)
{
// switch(RxData())
// {
// case 0x01: qian(); Delay1ms(); p1=30;p2=30; break;
// case 0x02: hou(); Delay1ms(); p1=30;p2=30; break;
// case 0x03: zuo(); Delay1ms(); p1=21;p2=21; break;
// case 0x04: you(); Delay1ms(); p1=21;p2=21; break;
// case 0x00: ting(); Delay1ms(); p1=0;p2=0; break;
// default : ;
// }
}
}
void es () interrupt 4
{
uchar tmp; //定義一個(gè)臨時(shí)變量,用來保存接收到的數(shù)據(jù)
if(RI==1)
{
tmp = SBUF; //將接收到的數(shù)據(jù)保存到tmp中
switch(tmp)
{
case 0x01: qian(); Delay1ms(); break; //p1=30;p2=30;
case 0x02: hou(); Delay1ms(); break; //p1=30;p2=30;
case 0x03: zuo(); Delay1ms(); break; //p1=21;p2=21;
case 0x04: you(); Delay1ms(); break; //p1=21;p2=21;
case 0x00: ting(); Delay1ms(); break; //p1=0;p2=0;
case 0x09: buzz=~buzz; break;
case 0x06: jia(); buzz=0;Delay1ms();buzz=1; break;
case 0x07: jian(); buzz=0;Delay1ms();buzz=1; break;
default : ;
}
}
RI=0;
}
void T_0 () interrupt 1
{
TR0=0;
TL0 = 0xF1; //設(shè)置定時(shí)初值
TH0 = 0xFF; //設(shè)置定時(shí)初值
if(cishu<=30)
{
cishu++;
}
else
{
cishu=0;
}
if(cishu<=p1)
{
pwm1=1;
}
else
{
pwm1=0;
}
if(cishu<=p2)
{
pwm2=1;
}
else
{
pwm2=0;
}
TR0=1;
}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
void Delay5ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
|
|