#include<reg52.h>
#include"xiaoche.h"
#include"xiaoche1.h"
#include"chuankou.h"
void main()
{
delay1(5000);
UART_Init();
delay1(1000);
init1();
csbinit();
PT1=1;
P2=0x00;
while(1)
{
csb();
}
}
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit en0=P3^7;
sbit en1=P3^6;
sbit en2=P3^5;
sbit en3=P3^4;
sbit my1=P1^0;
sbit my2=P1^1;
sbit my3=P1^2;
sbit my4=P1^3;
sbit mz1=P1^4;
sbit mz2=P1^5;
sbit mz3=P1^6;
sbit mz4=P1^7;
//sbit s2=P0^0;
//sbit s3=P0^1;
//sbit hz=P3^3;
//sbit hy=P3^2;
uchar pwm,num;
void delay1(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void init1()
{
num=0;
RCAP2H=(65536-500)/256;
RCAP2L=(65536-500)%256;
TH2=RCAP2H;
TL2=RCAP2L;
EA=1;
ET2=1;
TR2=1;
}
void intersvr0() interrupt 3
{
TF2=0;
num++;
if(num==100)
num=0;
if(num<=pwm)
{
en0=1;
en1=1;
en2=1;
en3=1;
}
else
{
en0=0;
en1=0;
en2=0;
en3=0;
}
}
/*void keyscan()
{
if(s2==0)
{
delay1(50);
if(s2==0)
{
if(pwm<100)
{
pwm++;
delay1(100);
}
}
}
if(s3==0)
{
delay1(50);
if(s3==0)
{
if(pwm>1)
{
pwm--;
delay1(100);
}
}
}
}*/
void zhi()
{
my1=1;
my2=0;
my3=1;
my4=0;
mz1=1;
mz2=0;
mz3=1;
mz4=0;
}
void hou()
{
my1=0;
my2=1;
my3=0;
my4=1;
mz1=0;
mz2=1;
mz3=0;
mz4=1;
}
void zuo()
{
my1=1;
my2=0;
my3=1;
my4=0;
mz1=0;
mz2=1;
mz3=0;
mz4=1;
}
void you()
{
my1=0;
my2=1;
my3=0;
my4=1;
mz1=1;
mz2=0;
mz3=1;
mz4=0;
}
void ting()
{
my1=0;
my2=0;
my3=0;
my4=0;
mz1=0;
mz2=0;
mz3=0;
mz4=0;
}
/*void hongwai()
{
if(hz==0&&hy==1)
{
zuo();
}
if(hz==1&&hy==0)
{
you();
}
if(hz==1&&hy==1)
{
zhi();
}
if(hz==0&&hy==0)
{
ting();
delay1(1000);
you();
}
}
/*void main()
{
init1();
num=0;
pwm=16;
while(1)
{
keyscan();
hongwai();
}
} */
#include<reg52.h>
#include"xiaoche1.h"
#define uchar unsigned char
#define uint unsigned int
uint i=0;
uchar UART_data[5]={0,0,0,0};
void UART_Init()
{
i=0;
SCON = 0x50;
TMOD|= 0x20;
PCON|= 0x00;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
ES = 1;
EA = 1;
}
void jisuan()
{
if(UART_data[2]==0x02)
{P2=0x55; zhi();}
if(UART_data[2]==0x04)
{P2=0xff;zuo();}
if(UART_data[2]==0x03)
{P2=0xaa;you();}
if(UART_data[2]==0x00)
{P2=0x00;ting();}
if(UART_data[2]==0x01)
{P2=0xfd;hou();}
if(UART_data[2]==0xF0)
{P2=0xf7;}
if(UART_data[2]==0xF1)
{P2=0x01;}
if(UART_data[2]==0xF2)
{P2=0x02;}
}
void chuankou()
{
if(i==1)
{
jisuan();
ES=1;
}
}
/*void main (void)
{
delay1(10000)
init1();
UART_Init();
while(1)
{
if(i==1)
{
jisuan();
ES=1;
}
}
}*/
void UART(void) interrupt 4
{
if(RI==1)
{
static unsigned char count;
RI = 0;
UART_data[count]=SBUF;
if(count==0&&UART_data[count]==0xff)
{
count++;
}
else
if(count>=1&&count<=3)
{
count++;
}
else
if(count==4&&UART_data[0]==UART_data[4])
{
count=0;
i=1;
ES=0;
TR0=0;
// jisuan();
chuankou();
ES=1;
}
else
{
count=0;
EA=1;
}
}
}
#include <AT89X51.H>
#include <intrins.h>
#include <STDIO.H>
#include "xiaoche1.h"
#define uchar unsigned char
#define uint unsigned int
// #define RX P1_1
// #define TX P1_2
sbit RX=P3^2;
sbit TX=P3^3;
unsigned int time=0;
unsigned int timer=0;
float S=0;
bit flag =0;
/********************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.87)/100; //算出来是CM
if(flag==1) //超出测量
{
flag=0;
pwm=100;
}
if(S>=400)
{
pwm=100;
}
if(S>=300&&S<400)
{
pwm++;
if(pwm==75)
{
pwm=75;
}
}
if(S>=200&&S<300)
{
pwm++;
if(pwm==50)
{
pwm=50;
}
}
if(S>=100&&S<10)
{
pwm++;
if(pwm==25)
{
pwm=25;
}
}
if(S>=1&&S<100)
{
pwm++;
if(pwm==15)
{
pwm=15;
}
}
}
/********************************************************/
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/********************************************************/
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
/********************************************************/
void StartModule()
{
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
void csbinit()
{
TMOD|=0x01;
TH0=0;
TL0=0;
TR0=1;
ET0=1;
EA=1;
}
void csb()
{
StartModule();
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut(); //计算
delayms(10);
}
/*void main(void)
{
TMOD=0x21; //设T0为方式1,GATE=1;
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TH0=0;
TL0=0;
TR0=1;
ET0=1; //允许T0中断
TR1=1; //开启定时器
TI=1;
EA=1; //开启总中断
while(1)
{
StartModule();
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut(); //计算
delayms(10); //100MS
}
}*/
|