📄 text1
字号:
#include <reg51.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;
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;
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();
int xm,ym,xe,ye,xx=0,yy=0,fm,xo,yo,x2,y2,shun=0,ni=1,i;
//==================电机驱动=================================
char movx[6]={0x01,0x03,0x02,0x06,0x04,0x05};
char movy[6]={0x10,0x30,0x20,0x60,0x40,0x50};
char inderx=0,indery=0;
char pen=0x80;
void right()
{
if(inderx>5)
inderx=0;
P1=movx[inderx]|pen;
inderx++;
}
void left()
{
if(inderx<0)
inderx=5;
P1=movx[inderx]|pen;
inderx--;
}
void up()
{
if(indery>5)
indery=0;
P1=movy[indery]|pen;
indery++;
}
void down()
{
if(indery<0)
indery=5;
P1=movy[indery]|pen;
indery--;
}
//=======驱动结束===================================
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;
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++;
pen=0;
right();
}
if(xx>xm)
{
xx--;
pen=0;
left();
}
if(yy<ym)
{
yy++;
pen=0;
up();
}
if(yy>ym)
{
yy--;
pen=0;
down();
}
}
}
void mode_zx()
{
int xiangxian;
for(;;)
{
if(keyx>0)
{
key=keyx;
while(keyx!=0)
{keyx=0; time(3000);}
if(key==16)
break;
keyproc();
}
}
xm=para[0];
ym=para[1];
xe=para[2];
ye=para[3];
dingwei();//画笔初始化
xx=xe;//下次开始前笔的位置坐标
yy=ye;
fm=0;
if((ye-ym)>0&&(xe-xm)>0)
xiangxian=1;
if((ye-ym)>0&&(xe-xm)<0)
xiangxian=2;
if((ye-ym)<0&&(xe-xm)<0)
xiangxian=3;
if((ye-ym)<0&&(xe-xm)>0)
xiangxian=4;
pen=0x80;
while(xm!=xe||ym!=ye)
{
if(fm>=0)
{
if(xiangxian==2||xiangxian==3)
{
xm--;
left();
}
if(xiangxian==1||xiangxian==4)
{
xm++;
right();
}
fm=fm-ye;
}
if(fm<0)
{
if(xiangxian==1||xiangxian==2)
{
ym++;
up();
}
if(xiangxian==3||xiangxian==4)
{
ym--;
down();
}
fm=fm+xe;
}
}
}
void mode_yh(int fangxiang)
{
int xiangxian;
for(;;)
{
if(keyx>0)
{
key=keyx;
while(keyx!=0)
{keyx=0; time(3000);}
if(key==16)
break;
keyproc();
}
}
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;
dingwei();//画笔初始化
xx=para[2];
yy=para[3];
fm=0;
while(xm!=xe||ym!=ye)
{
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;
pen=0x80;
if(fm>=0)
{
if((fangxiang==1&&xiangxian==1)||(fangxiang==0&&xiangxian==4))
{
xm--;
left();
fm=fm-2*xm+1;
}
if((xiangxian==3&&fangxiang==1)||(xiangxian==2&&fangxiang==0))
{
xm++;
right();
fm=fm-2*xm+1;
}
if((fangxiang==0&&xiangxian==1)||(fangxiang==1&&xiangxian==2))
{
ym--;
down();
fm=fm-2*ym+1;
}
if((xiangxian==3&&fangxiang==0)||(xiangxian==4&&fangxiang==1))
{
ym++;
up();
fm=fm-2*ym+1;
}
}
if(fm<0)
{
if((fangxiang==0&&xiangxian==3)||(fangxiang==1&&xiangxian==2))
{
xm--;
left();
fm=fm+2*xm+1;
}
if((xiangxian==1&&fangxiang==0)||(xiangxian==4&&fangxiang==1))
{
xm++;
right();
fm=fm+2*xm+1;
}
if((fangxiang==1&&xiangxian==3)||(fangxiang==0&&xiangxian==4))
{
ym--;
down();
fm=fm+2*ym+1;
}
if((xiangxian==1&&fangxiang==1)||(xiangxian==2&&fangxiang==2))
{
ym++;
up();
fm=fm+2*ym+1;
}
}
}
}
void fuwei()
{
}
void mypic()
{
}
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();
/* 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;
ptr=0;
distran();
for(;;)
{para[0]=xx;
para[1]=yy;
for(i=2;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 + -