📄 2005912.c
字号:
DataPort=0xFF;
E=1;
_nop_();
while(0) //DataPort & busy
_nop_();
E=0;
return;
}
/*************************************************************lcd设置***********************************/
void LCDInt()
{
E=0;
LCDcom(0x38); //function set
LCDcom(0x06); //enter mode set
LCDcom(0x0f); //display ON/Off
return;
}
/********************************lcd清屏程序**************************************************************/
void LCDclr()
{ RS=0;
RW=0;
E=0;
LCDcom(0x01);
//dly2ms(1);
return;
}
/*******************************************lcd写命令************************************************************/
void LCDcom(unsigned char command)
{
LCD_busy();
RW=0;
DataPort=command;
E=1;
_nop_();
E=0;
return;
}
/************************************时间和扫描显示*********************************************/
void t0(void)interrupt 1
{
count++;
TH0=0x3c; //定时器初值重载
TL0=0xb0;
if(count==20) //1秒到否
{
count=0;
sec++;
}
if(sec==999) sec=0;
// if(k==0x01) {x=x0+x;y=y0+y; } //直线
if(k1==0x02) { x=x0+x;y=y0+y; } //圆
TabVR[8]=tab[sec/100];
TabVR[9]=tab[(sec%100)/10]; //显示时间
TabVR[10]=tab[sec%10];
TabXY[5]=tab[x/100];
TabXY[6]=tab[(x%100)/10];
TabXY[7]=tab[x%10]; //显示x 的数字
TabXY[12]=tab[y/100];
TabXY[13]=tab[(y%100)/10]; //显示y的值
TabXY[14]=tab[y%10];
}
void t1(void) interrupt 3{
TH1=0x3c;
TL1=0xb0;
LCD_L1(TabXY);
LCD_L2(TabVR);
}
/***********************************************键盘函数*********************************************/
unsigned char kbscan(void)
{ unsigned char sccode,recode;
P0=0xf0;
if((P0&0xf0)!=0xf0)
{ delay(2000);
if((P0&0xf0)!=0xf0)
{sccode=0xfe;
while((sccode&0x10)!=0)
{ P0=sccode;
if((P0&0xf0)!=0xf0)
{ recode=(P0&0xf0)|0x0f;
return((~sccode)+(~recode));
}
else sccode=(sccode<<1)|0x01;
}
}
}
return(0);
}
void xshuzi(){
TabXY[5]=xy[0];
TabXY[6]=xy[1];
TabXY[7]=xy[2];
TabXY[0]=0x20;
TabXY[1]=0x20;
TabXY[2]=0x20;
x0=100*(xy[0]-0x30)+10*(xy[1]-0x30)+(xy[2]-0x30);
}
void yshuzi(){
TabXY[12]=xy[0];
TabXY[13]=xy[1];
TabXY[14]=xy[2];
TabXY[0]=0x20;
TabXY[1]=0x20;
TabXY[2]=0x20;
y0=100*(xy[0]-0x30)+10*(xy[1]-0x30)+(xy[2]-0x30);
}
void banjing()
{
TabXY[3]=0x20;
TabXY[4]=0x20;
TabXY[5]=0x20;
TabXY[10]=0x20; //清屏
TabXY[11]=0x20;
TabXY[13]=0x20;
TabXY[14]=0x20;
TabXY[15]=0x20;
TabXY[12]=0x20; //rrrrrrrrrrrrrrrrrrrr
TabXY[8]=xy[0];
TabXY[7]=0x3a;
TabXY[6]=0x52;
TabXY[9]=xy[1];
TabXY[10]=xy[2];
TabXY[0]=0x20;
TabXY[1]=0x20;
TabXY[2]=0x20;
r0=100*(xy[0]-0x30)+10*(xy[1]-0x30)+(xy[2]-0x30);
}
void yuanhs(){
double m,f0,z0,a;
x0=x0;
y0=y0-r0;
zhixianhs();
delay(1000); //0x02为画圆标志
x=0;
y=-250; // y0=y-r0;
// zhixianhs();
// delay(4000);
while(x>=0&&y<0)
{ m=(x*x)+(y*y)-(r0*r0);
if(m<0) //第四象限//
{x++; m=m+2*x+1; }
else if(m>0)
{ y++;m=m+2*y+1;}
else
{ if(fabs(m+2*x+1)<fabs(m+2*y+1))
a=fabs(m+2*x+1);
else
a=fabs(m+2*y+1);
if(a>=fabs(m+2*x+2*y+2))
{y++;x++;}
else
{ if(fabs(m+2*x+1)<fabs(m+2*y+1)) x++;
else y++;}
}
f=long_yuanf(x,y);
if(f0<f)
{ cf1=0; n1=(f-f0)*5;}
else
{ cf1=1; n1=(f0-f)*5;}
f0=f;
contrl_1(cf1,n1);
z=long_yuanz(x,y);
if(z0<z) { cf2=1; n2=(z-z0)*5;}
else
{ cf2=0; n2=(z0-z)*5;}
z0=z;
contrl_2(cf2,n2);
}
while(x>0&&y>=0)
{
if(m>0)
{x--; m=m-2*x+1; }
else if(m<0)
{ y++;m=m+2*y+1;}
//第一象限//
else
{ if(fabs(m-2*x+1)<fabs(m+2*y+1))
a=fabs(m-2*x+1);
else
a=fabs(m+2*y+1);
if(a>=fabs(m-2*x+2*y+2))
{y++;x--;}
else
{ if(fabs(m-2*x+1)<fabs(m+2*y+1)) x--;
else y++;}
}
f=long_yuanf(x,y);
if(f0<f)
{ cf1=0; n1=(f-f0)*5;}
else
{ cf1=1; n1=(f0-f)*5;}
f0=f;
contrl_1(cf1,n1);
z=long_yuanz(x,y);
{ if(z0<z) { cf2=1; n2=(z-z0)*5;}
else
{ cf2=0; n2=(z0-z)*5;}
z0=z;}
contrl_2(cf2,n2);
}
while(x<=0&&y>0)
{
if(m>0)
{y--; m=m-2*y+1; }
else if(m<0)
{ x--;m=m-2*x+1;}
else
{ if(fabs(m-2*x+1)<fabs(m-2*y+1)) //第二象限//
a=fabs(m-2*x+1);
else
a=fabs(m-2*y+1);
if(a>=fabs(m-2*x-2*y+2))
{y--;x--;}
else
{ if(fabs(m-2*x+1)<fabs(m-2*y+1)) x--;
else y--;}
}
f=long_yuanf(x,y);
if(f0<f)
{ cf1=0; n1=(f-f0)*5;}
else
{ cf1=1; n1=(f0-f)*5;}
f0=f;
contrl_1(cf1,n1);
z=long_yuanz(x,y);
if(z0<z) { cf2=1; n2=(z-z0)*5;}
else
{ cf2=0; n2=(z0-z)*5;}
z0=z;
contrl_2(cf2,n2);
}
while(x<=0&&y<=0)
{
if(m<0)
{y--; m=m-2*y+1; }
else if(m>0)
{ x++;m=m+2*x+1;}
else
{ if(fabs(m+2*x+1)<fabs(m-2*y+1)) //第三象限//
a=fabs(m+2*x+1);
else
a=fabs(m-2*y+1);
if(a>=fabs(m+2*x-2*y+2))
{y--;x++;}
else
{ if(fabs(m+2*x+1)<fabs(m-2*y+1)) x++;
else y--;}
}
f=long_yuanf(x,y);
if(f0<f)
{ cf1=0; n1=(f-f0)*5;}
else
{ cf1=1; n1=(f0-f)*5;}
f0=f;
contrl_1(cf1,n1);
z=long_yuanz(x,y);
if(z0<z) { cf2=1; n2=(z-z0)*5;}
else
{ cf2=0; n2=(z0-z)*5;}
z0=z;
contrl_2(cf2,n2);
}
}
/*****************************************************求z的长度**************************************/
long long_yuanz(x,y)
{
double a5;
unsigned long a2, a3,a4;
a2=(unsigned long)((l/2-x )*(l/2-x));
a3=(unsigned long)((h/2+160-y)*(h/2+160-y));
a4= a2+a3;
a5=sqrt(a4); //求出z的长度, 开方,
return(a5);
}
/*************************************求f的长度***************************************************************/
long long_yuanf(x,y)
{
unsigned long u2,a5,a6,v ;
a5=(unsigned long)(650-y)*(650-y);
a6=(unsigned long)(525+x)*(x+525);
u2=(a5+a6);
v=sqrt(u2);
return(v);
}
//圆函数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -