📄 jishi.c
字号:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit black1=P2^0;
sbit black2=P2^1;
sbit left1=P2^2;
sbit right1=P2^3;
sbit left2=P2^4;
sbit right2=P2^5;
sbit rs=P2^7;
sbit lcden=P2^6;
sbit IN4=P1^0;
sbit ENB=P1^1;
sbit IN3=P1^2;
sbit IN2=P1^3;
sbit ENA=P1^4;
sbit IN1=P1^5;
uchar t,a,b,c,d,e,f;
uint s,t1,road,speed;
uchar code table[]="T:000s S:00.00m";
uchar code table1[]="v:00.00cm/s 00s";
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_time(uchar dat)
{
uchar bai,shi,ge;
bai=dat/100;
shi=dat%100/10;
ge=dat%10;
write_com(0x80+2);
write_date(0x30+bai);
write_date(0x30+shi);
write_date(0x30+ge);
}
void write_rosp(uchar add,uint rosp)
{
uchar qian,bai,shi,ge;
qian=rosp/1000;
bai=rosp%1000/100;
shi=rosp%1000%100/10;
ge=rosp%10;
write_com(0x80+add);
write_date(0x30+qian);
write_date(0x30+bai);
write_com(0x80+add+3);
write_date(0x30+shi);
write_date(0x30+ge);
}
void write_daoji(uint daoji)
{
uchar shi,ge;
shi=daoji/10;
ge=daoji%10;
write_com(0x80+0x40+13);
write_date(0x30+shi);
write_date(0x30+ge);
}
void init()
{
uchar num;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<16;num++)
{
write_date(table1[num]);
delay(5);
}
TMOD=0x11;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;//开总中
EX0=1;//开外部中断0
TCON=0x01;
ET0=1;//开定时器0中断
ET1=1;
TR0=1;//启动定时器0
t=0;
a=0;
b=0;
c=0;
d=0;
e=0;
t1=0;
s=0;
xunji();
}
void limit()
{
black1=1;
black2=1;
if(black1==0&&black2==0)
{
delay(5);
if(black1==1&&black2==1)c++;if(c==9)c=0;
}
if(c==2||c==6)
{
if(speed>=25)
{
ENA=0;
ENB=0;
}
if(speed<=20)
{
ENA=1;
ENB=1;
}
xunji();
}
if(c==4)
{
ENA=1;
ENB=1;
IN1=1;
IN2=1;
IN3=1;
IN4=1;
TR1=1;
f=10;
write_daoji(f);
}
if(c==8)
{
ENA=1;
ENB=1;
IN1=1;
IN2=1;
IN3=1;
IN4=1;
}
else
{
ENA=1;
IN1=1;
IN2=0;
ENB=1;
IN3=1;
IN4=0;
xunji();
}
}
void xunji()
{
if(left1==0||(right1==1&&right2==0)) //左拐
{
ENA=0;
ENB=1;
IN3=1;
IN4=0;
}
else if(right1==0||(left1==1&&left2==0)) //右拐
{
ENA=1;
IN1=1;
IN2=0;
ENB=0;
}
}
void main()
{
init();
while(1)
{
limit();
}
}
void exter0() interrupt 0
{
speed=60000/t1;
t1=0;
write_rosp(0x42,speed);
s++;
road=6*s;
write_rosp(9,road);
}
void timer0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
t1++; b++;
if(b==100)
{
b=0;
t++;
write_time(t);
}
}
void timer1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
d++;
if(d%20==0){f--;write_daoji(f);}
if(d==200)
{
d=0;
TR1=0;
ENA=1;
ENB=1;
IN1=1;
IN2=0;
IN3=0;
IN4=1;
if(left1==0&&right2==0)
{
delay(5);
if(left1==1&&right2==1)e++;
}
if(left2==0&&right1==0)
{
delay(5);
if(left2==1&&right1==1)e++;
}
while(c==5&&e==2)
{
ENA=1;
ENB=1;
IN1=1;
IN2=0;
IN3=1;
IN4=0;
e=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -