📄 002.c
字号:
#include <reg51.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char
#define tim 65536-2000
sbit dis0 =P2^4;
sbit dis1 =P2^5;
sbit dis2 =P2^6;
sbit dis3 =P2^7;
sbit dis4 =P3^4;
int pen1;
sbit key3 =P2^0;
sbit key2 =P2^1;
sbit key1 =P2^2;
sbit key0 =P2^3;
int disp[8];
uchar key,keyx,ts;
int para[10],ptr=0;
uchar code ledtab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code distab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0xed,0x6b,0x0f,0xe3,0x4f,0x4d};
void modeproc(),keyproc(),time(uint);
int xm,ym,xe,ye,fm,xo,yo,x2,y2,shun=0,ni=1,i,autopic=0;
int xx=0,yy=0;
//==================电机驱动=================================
char movx[6]={0x01,0x03,0x02,0x06,0x04,0x05};//movx[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
char movy[6]={0x10,0x30,0x20,0x60,0x40,0x50};
//char movx1[6]={0x81,0x83,0x82,0x86,0x84,0x85};
//char movy1[6]={0x90,0xb0,0xa0,0xe0,0xc0,0xd0};
char inderx=0,indery=0;
char pen=0x80;
void right()
{inderx++;
if(inderx>5)
inderx=0;
P0=movx[inderx]|pen1;
time(1000);
}
void left()
{inderx--;
if(inderx<0)
inderx=5;
P0=movx[inderx]|pen1;
time(1000);
}
void up()
{indery++;
if(indery>5)
indery=0;
P0=movy[indery]|pen1;
time(1000);
}
void down()
{indery--;
if(indery<0)
indery=5;
P0=movy[indery]|pen1;
time(1000);
}
//=======驱动结束===================================
void time(uint t)
{
uint i;
for(i=0;i<t;i++);
}
void distran()
{
disp[3]=distab[para[ptr]%10];//s4
disp[2]=distab[(para[ptr]/10)%10];//s3
disp[1]=distab[(para[ptr]/100)%10];//s2
disp[0]=distab[(para[ptr]/1000)%10];//s1
disp[4]=~ledtab[ptr];
}
void display()
{
static dis=0;distran();
dis=(dis+1)%5;
dis0=1;dis1=1;dis2=1;dis3=1;dis4=1;
P1=disp[dis];
switch(dis)
{
case 0: dis0=0; break;
case 1: dis1=0; break;
case 2: dis2=0; break;
case 3: dis3=0; break;
case 4: dis4=0; break;
}
if(!key0) keyx=dis+1;
if(!key1) keyx=dis+5;
if(!key2) keyx=dis+9;
if(!key3) keyx=dis+13;
}
void modi(uchar p,uchar x)
{
para[p]=(para[p]%1000)*10+x;
}
void dingwei()
{
while(xx!=xm||yy!=ym)//画笔定位到设定值
{
if(xx<xm)
{
xx++;
pen1=0x80;
right();
}
if(xx>xm)
{
xx--;
pen1=0x80;
left();
}
if(yy<ym)
{
yy++;
pen1=0x80;
up();
}
if(yy>ym)
{
yy--;
pen1=0x80;
down();
}
}
}
void mode_zx()
{
int xiangxian,bushu;//,xe1,ye1;
if(!autopic){
ptr=0;
para[0]=1000;
for(;;)
{
if(keyx>0)
{
key=keyx;
while(keyx!=0)
{keyx=0; time(3000);}
if(key==16)
break;
keyproc();
}
}
para[0]=para[0]*1000/325*10;
para[1]=para[1]*1000/325*10;
para[2]=para[2]*1000/325*10;
para[3]=para[3]*1000/325*10;
}
xm=para[0];
ym=para[1];
dingwei();//画笔初始化
xm=0;
ym=0;
xe=para[2]-para[0];
ye=para[3]-para[1];
// xe1=xe;
//ye1=ye;
bushu=abs(xe)+abs(ye);
xx=para[2];//下次开始前笔的位置坐标
yy=para[3];
fm=0;
if((ye>ym)&&(xe>xm))
xiangxian=1;
if((ye>ym)&&(xe<xm))
{xiangxian=2;}//xe=-xe;
if((ye<ym)&&(xe<xm))
{xiangxian=3;}//ye=-ye;xe=-xe;}
if((ye<ym)&&(xe>xm))
{xiangxian=4;}//ye=-ye;}
pen1=0;
if(xe==0)//终点坐标在Y轴上(新坐标)
{if(ye>=0)
{while(ym!=ye)
{ ptr=6;
para[6]=bushu--;
ym++;
up();
}
}
if(ye<0)
{
while(ym!=ye)
{
ptr=6;
para[6]=bushu--;
ym--;
down();
}
}
}
if(ye==0)//终点坐标在X轴上(新坐标)
{if(xe>=0)
{while(xm!=xe)
{
ptr=6;
para[6]=bushu--;
xm++;
right();
}
}
if(xe<0)
{
while(xm!=xe)
{ ptr=6;
para[6]=bushu--;
xm--;
left();
}
}
}
while(xm!=xe||ym!=ye)
{
if(fm>=0)
{
if(xiangxian==2||xiangxian==3)
{
xm--;
left();
}
if(xiangxian==1||xiangxian==4)
{
xm++;
right();
}
fm=fm-abs(ye);
}
if(fm<0)
{
if(xiangxian==1||xiangxian==2)
{
ym++;
up();
}
if(xiangxian==3||xiangxian==4)
{
ym--;
down();
}
fm=fm+abs(xe);
}
ptr=6;
para[6]=bushu--;
}
}
void mode_yh(int fangxiang)
{
int xiangxian,flag;//x1,y1;
if(!autopic){
ptr=0;
if(fangxiang==0)
para[0]=2000;
else para[0]=3000;
for(;;)
{
if(keyx>0)
{
key=keyx;
while(keyx!=0)
{keyx=0; time(3000);}
if(key==16)
break;
keyproc();
}
}
para[0]=para[0]*1000/325*10;
para[1]=para[1]*1000/325*10;
para[2]=para[2]*1000/325*10;
para[3]=para[3]*1000/325*10;
para[4]=para[4]*1000/325*10;
para[5]=para[5]*1000/325*10;
}
xm=para[0];
ym=para[1];
dingwei();//画笔初始化
xm=para[0]-para[4];//01起始23重点45原点
ym=para[1]-para[5];
xe=para[2]-para[4];
ye=para[3]-para[5];
xo=0;
yo=0;
// x1=xm;
// y1=ym;
xx=para[2];
yy=para[3];
fm=0;
if(xm==xe&&ym==ye)
flag=1;
while(xm!=xe||ym!=ye||flag)
{
flag=0;
if((ym-yo)>0&&(xm-xo)>0)
xiangxian=1;
if((ym-yo)>0&&(xm-xo)<0)
xiangxian=2;
if((ym-yo)<0&&(xm-xo)<0)
xiangxian=3;
if((ym-yo)<0&&(xm-xo)>0)
xiangxian=4;
if(ym==yo&&(xm-xo)>0)
xiangxian=5;//+x轴上
if(xm==xo&&(ym-yo)>0)
xiangxian=6;//+y轴上
if(ym==yo&&(xm-xo)<0)
xiangxian=7;//-x轴上
if(xm==xo&&(ym-yo)<0)
xiangxian=8;//-y轴上
pen1=0;
if(fm>=0)
{
if((fangxiang==1&&xiangxian==1)||(fangxiang==0&&xiangxian==4)||(xiangxian==5))
{ fm=fm-2*abs(xm)+1;
xm--;
left();
}
if((xiangxian==3&&fangxiang==1)||(xiangxian==2&&fangxiang==0)||(xiangxian==7))
{ fm=fm-2*abs(xm)+1;
xm++;
right();
}
if((fangxiang==0&&xiangxian==1)||(fangxiang==1&&xiangxian==2)||(xiangxian==6))
{ fm=fm-2*abs(ym)+1;
ym--;
down();
}
if((xiangxian==3&&fangxiang==0)||(xiangxian==4&&fangxiang==1)||(xiangxian==8))
{
fm=fm-2*abs(ym)+1;
ym++;
up();
}
}
else
{
if((fangxiang==0&&(xiangxian==3||xiangxian==8))||(fangxiang==1&&(xiangxian==2||xiangxian==6)))
{
fm=fm+2*abs(xm)+1;
xm--;
left();
}
if(((xiangxian==1||xiangxian==6)&&fangxiang==0)||((xiangxian==4||xiangxian==8)&&fangxiang==1))
{
fm=fm+2*abs(xm)+1;
xm++;
right();
}
if((fangxiang==1&&(xiangxian==3||xiangxian==7))||(fangxiang==0&&(xiangxian==4||xiangxian==5)))
{
fm=fm+2*abs(ym)+1;
ym--;
down();
}
if(((xiangxian==1||xiangxian==5)&&fangxiang==1)||((xiangxian==2||xiangxian==7)&&fangxiang==0))
{
fm=fm+2*abs(ym)+1;
ym++;
up();
}
}
}
}
void fuwei()
{
xm=0;
ym=0;
dingwei();
}
void mypic()
{ autopic=1;
para[0]=150;
para[1]=240;
para[2]=150;
para[3]=240;
para[4]=150;
para[5]=255;
mode_yh(1);
para[0]=150;
para[1]=240;
para[2]=100;
para[3]=240;
mode_zx();
para[0]=100;
para[1]=240;
para[2]=130;
para[3]=210;
para[4]=130;
para[5]=240;
mode_yh(1);
para[0]=130;
para[1]=210;
para[2]=180;
para[3]=210;
mode_zx();
para[0]=180;
para[1]=210;
para[2]=200;
para[3]=190;
para[4]=200;
para[5]=210;
mode_yh(1);
para[0]=200;
para[1]=190;
para[2]=400;
para[3]=190;
mode_zx();
para[0]=400;
para[1]=190;
para[2]=420;
para[3]=210;
para[4]=400;
para[5]=210;
mode_yh(1);
para[0]=420;
para[1]=210;
para[2]=470;
para[3]=210;
mode_zx();
para[0]=470;
para[1]=210;
para[2]=500;
para[3]=240;
para[4]=470;
para[5]=240;
mode_yh(1);
para[0]=500;
para[1]=240;
para[2]=450;
para[3]=240;
mode_zx();
para[0]=450;
para[1]=240;
para[2]=450;
para[3]=240;
para[4]=450;
para[5]=255;
mode_yh(1);
para[0]=450;
para[1]=240;
para[2]=150;
para[3]=240;
mode_zx(); //~~
/* para[0]=250;
para[1]=200;
para[2]=350;
para[3]=200;
mode_zx();
para[0]=350;
para[1]=200;
para[2]=350;
para[3]=220;
mode_zx();
para[0]=350;
para[1]=220;
para[2]=250;
para[3]=220;
mode_zx();
para[0]=250;
para[1]=220;
para[2]=250;
para[3]=200;
mode_zx();//~*/
/*
para[0]=70;
para[1]=20;
para[2]=70;
para[3]=20;
para[4]=70;
para[5]=70;
mode_yh(1);
para[0]=110;
para[1]=70;
para[2]=90;
para[3]=40;
mode_zx();
para[0]=90;
para[1]=40;
para[2]=70;
para[3]=70;
mode_zx();
para[0]=70;
para[1]=70;
para[2]=50;
para[3]=40;
mode_zx();
para[0]=50;
para[1]=40;
para[2]=30;
para[3]=70;
mode_zx();
para[0]=90;
para[1]=90;
para[2]=50;
para[3]=90;
mode_zx();*/
/* para[0]=300;
para[1]=100;
para[2]=1300;
para[3]=100; mode_zx();
para[0]=1300;
para[1]=100;
para[2]=1300;
para[3]=200; mode_zx();
para[0]=1300;
para[1]=200;
para[2]=1200;
para[3]=200; mode_zx();
para[0]=1200;
para[1]=200;
para[2]=1100;
para[3]=400; mode_zx();
para[0]=1100;
para[1]=400;
para[2]=500;
para[3]=400; mode_zx();
para[0]=500;
para[1]=400;
para[2]=400;
para[3]=200; mode_zx();
para[0]=400;
para[1]=200;
para[2]=300;
para[3]=200; mode_zx();
para[0]=300;
para[1]=200;
para[2]=300;
para[3]=100; mode_zx();
para[0]=400;
para[1]=100;
para[2]=400;
para[3]=100;
para[4]=550;
para[5]=100; mode_yh(0);
para[0]=900;
para[1]=100;
para[2]=900;
para[3]=100;
para[4]=1050;
para[5]=100; mode_yh(0);*/
autopic=0;
}
void modeproc()
{
if(key>0)
{
switch(key)
{
case 1: mode_zx();break;
case 2: mode_yh(shun);break;
case 3: mode_yh(ni);break;
case 4: mypic();break;
case 5: fuwei();break;
/* case 5: modi(ptr,4);break;
case 6: modi(ptr,5);break;
case 7: modi(ptr,6);break;
case 8: modi(ptr,7);break;
case 9: modi(ptr,8);break;
case 10:modi(ptr,9);break;
case 11:if(ptr<7) ptr++;break;
case 12:if(ptr>0) ptr--;break;
case 13:para[ptr]+=1;break;
case 14:para[ptr]-=1;break;
case 15:para[ptr]+=10;break;
case 16:para[ptr]-=10;break;*/
}
}
key=0;
}
void keyproc()
{
if(key>0)
{
switch(key)
{
case 1: modi(ptr,0);break;
case 2: modi(ptr,1);break;
case 3: modi(ptr,2);break;
case 4: modi(ptr,3);break;
case 5: modi(ptr,4);break;
case 6: modi(ptr,5);break;
case 7: modi(ptr,6);break;
case 8: modi(ptr,7);break;
case 9: modi(ptr,8);break;
case 10:modi(ptr,9);break;
case 11:if(ptr<7) ptr++;break;
case 12:if(ptr>0) ptr--;break;
/*case 13:para[ptr]+=1;break;
case 14:para[ptr]-=1;break;
case 15:para[ptr]+=10;break;
case 16:para[ptr]-=10;break;*/
}
}
key=0;
}
void timer0() interrupt 1
{
TH0=tim>>8; TL0=tim; display();
}
void main()
{
TMOD=0x11;IE=0x82;
TH0=tim>>8; TL0=tim; TR0=1;
distran();
for(;;)
{ptr=0;
for(i=0;i<6;i++)
para[i]=0;
if(keyx>0)
{
key=keyx;
while(keyx!=0)
{keyx=0; time(3000);}
modeproc();
}
time(1000);
distran();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -