📄 新建 文本文档 (2).txt
字号:
#include"AT89x52.h"
#include"intrins.h"
#include"math.h"
void init_zz();
void trun_left();
void trun_right();
void delay();
void cheshu();
#define uchar unsigned char
#define uint unsigned int
sbit hw0=P1^0; //-----定-----
sbit hw1=P1^1;
sbit hw2=P1^2;
sbit hw3=P1^3;
sbit hw4=P1^4;
sbit hw5=P1^5; //-----义-----
sbit hw6=P1^6;
sbit hw7=P1^7;
sbit d20=P2^0;
sbit d21=P2^1;
sbit d22=P2^2; //-----端-----
sbit d23=P2^3;
sbit d24=P2^4;
sbit d25=P2^5;
sbit d26=P2^6;
sbit d27=P2^7; //-----口-----
uchar Temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //----------共阴段显示-----------------------------
uchar c,count,speed; //------------全局变量-----------------------------
uchar percent,light,times; //---percent,times:占空比控制;light:控制渐亮渐灭---
uint i;
uchar time1;
uchar period[]={10,10,10,10}; //舵机偏转对应占空比设置
uchar high[]={2,2,2,2};
char xulie,xulie_1,xulie_2,xulie_3,xulie_4,xulie_5,xulie_6,xulie_7,xulie_8;
void pulse1() interrupt 3 using 2 //----中断服务程序1 ,用作舵机偏转,通过改变通电时间,从而改变相应的角度----
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
count++;
if(hw0==0)
{
xulie=1;
xulie_1=xulie;
}
if(hw1==0)
{
xulie=2;
xulie_2=xulie;
}
if(hw2==0)
{
xulie=3;
xulie_3=xulie;
}
if(hw3==0)
{
xulie=4;
xulie_4=xulie;
}
if(hw4==0)
{
xulie=5;
xulie_5=xulie;
}
if(hw5==0)
{
xulie=6;
xulie_6=xulie;
}
if(hw6==0)
{
xulie=7;
xulie_7=xulie;
}
if(hw7==0)
{
xulie=8;
xulie_8=xulie;
}
if(xulie-xulie_1==1)
{
trun_right();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_3=0;
xulie_4=0;
xulie_5=0;
xulie_6=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_2==-1)
{
trun_left();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_2=0;
xulie_3=0;
xulie_4=0;
xulie_5=0;
xulie_6=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_3==-1)
{
trun_left();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_3=0;
xulie_1=0;
xulie_4=0;
xulie_5=0;
xulie_6=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_2==1)
{
trun_right();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_4=0;
xulie_5=0;
xulie_6=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_4==-1)
{
trun_left();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_4=0;
xulie_5=0;
xulie_6=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_3==1)
{
trun_right();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_3=0;
xulie_5=0;
xulie_6=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_5==-1)
{
trun_left();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_3=0;
xulie_5=0;
xulie_6=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_4==1)
{
trun_right();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_3=0;
xulie_4=0;
xulie_6=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_6==-1)
{
trun_left();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_3=0;
xulie_4=0;
xulie_6=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_5==1)
{
trun_right();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_3=0;
xulie_4=0;
xulie_5=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_7==-1)
{
trun_left();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_3=0;
xulie_4=0;
xulie_5=0;
xulie_7=0;
xulie_8=0;
}
if(xulie-xulie_6==1)
{
trun_right();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_3=0;
xulie_4=0;
xulie_5=0;
xulie_6=0;
xulie_8=0;
}
if(xulie-xulie_8==-1)
{
trun_left();
if(++time1==high[0])
d25=0;
else if(time1==period[0])
{
time1=0;
d25=1;
}
xulie_1=0;
xulie_2=0;
xulie_3=0;
xulie_4=0;
xulie_5=0;
xulie_6=0;
xulie_8=0;
}
}
void pulse() interrupt 1 using 2 //---定时器0中断服务程序----- (用作降速)通过改变
{
TH0 = -500/256;
TL0 = -500%256;
if (times++==percent)
d24=0;
else if (times ==100)
{
times = 0;
d24=1;
}
}
void scan_P2_7()
{
if(d27==0)
c++;
}
void cheshu()
{
if(count==20)
{
speed=c;
}
}
void write_add(uchar WEI)
{
P3=WEI;
}
void write_data(uchar data1)
{
P0=Temp[data1];
}
void delay() //延时子程序
{
for(i = 0;i<7576;i++);
}
void delay1(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init_zz() //初使化小车直走
{
d20=0;
d21=0;
d22=1;
d23=0;
d24=1;
d25=0;
}
void trun_left() //舵机正转准备
{
d20=0;
d21=0;
d22=0;
d23=1;
}
void trun_right() //舵机反转准备
{
d20=0;
d21=0;
d22=1;
d23=0;
}
void main() //主函数
{
uchar ge,shi,bai,qian;
init_zz(); //初使化小车直走
scan_P2_7(); //扫描测速端口
cheshu();
qian=speed/1000;
bai=speed/100-qian*10;
shi=speed/10-qian*100-bai*10;
ge=speed-qian*1000-bai*100-shi*10;
write_add(0xf7);
write_data(qian);
delay1(1);
write_add(0xfb);
write_data(bai);
delay1(1);
write_add(0xfd);
write_data(shi);
delay1(1);
write_add(0xfe);
write_data(ge);
TMOD = 0x11; //设置定时计数器
TH0 = -500/256; //设置初值
TL0 = -500%256;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
EA = 1; //开启cpu总中断
ET1=1; //开启定时器1中断
ET0=1;
TR1=1;
TR0=1;
while(1)
{
if(xulie-xulie_1==1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_1==1);
}
if(xulie-xulie_2==-1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_2==-1);
}
if(xulie-xulie_3==-1)
{
trun_left();
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_3==-1);
}
if(xulie-xulie_2==1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_2==1);
}
if(xulie-xulie_4==-1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_4==-1);
}
if(xulie-xulie_3==1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_3==1);
}
if(xulie-xulie_5==-1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_5==-1);
}
if(xulie-xulie_4==1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_4==1);
}
if(xulie-xulie_6==-1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_6==-1);
}
if(xulie-xulie_5==1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_5==1);
}
if(xulie-xulie_7==-1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_7==-1);
}
if(xulie-xulie_6==1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_6==1);
}
if(xulie-xulie_8==-1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_8==-1);
}
if(xulie-xulie_7==1)
{
do
{
TR1 = 1;
TR0 = 1;
}
while(xulie-xulie_7==1);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -