📄 back.txt
字号:
if(p_over) //若已打完,关全部中断
{ IE1=0; EX1=0; ET0=0;}
} //要求更新点缓冲
}
//若到了144点,关打点中断,置点行打完标志,点行计数器++,从0--23点行往返
//若开始打新缓冲页,允许更新缓冲
x=dot_count/36; //判断是哪个针头打
m_a=1; m_b=1; m_c=1; m_d=1;
switch (x)
{case 0: m_a=next_dota; //针打下已准备好的电缓冲
x=dot_count/6; //缓冲中第几个字节
y=dot_count%6; //该字节 第几位
if((prt_buf[plc].n[x]<<y)&0x80) next_dota=0; //准备下一个点
else next_dota=1;
break;
case 1: m_b=next_dotb; //针打下已准备好的电缓冲
x=dot_count/6; //缓冲中第几个字节
y=dot_count%6; //该字节 第几位
if((prt_buf[plc].n[x]<<y)&0x80) next_dotb=0; //准备下一个点
else next_dotb=1;
break;
case 2: m_c=next_dotc; //针打下已准备好的电缓冲
x=dot_count/6; //缓冲中第几个字节
y=dot_count%6; //该字节 第几位
if((prt_buf[plc].n[x]<<y)&0x80) next_dotc=0; //准备下一个点
else next_dotc=1;
break;
case 3: m_d=next_dotd; //针打下已准备好的电缓冲
x=dot_count/6; //缓冲中第几个字节
y=dot_count%6; //该字节 第几位
if((prt_buf[plc].n[x]<<y)&0x80) next_dotd=0; //准备下一个点
else next_dotd=1;
break;
}
}
else if((up_or_down==0) && ET0) //若针是打下的
{ TL0=up_time_l; TH0=up_time_h; //载入打下时间
//m_a=1; m_b=1; m_c=1; m_d=1; //针抬起
up_or_down=!up_or_down; //置针头标志为抬起
dot_count+=36; //修改下一个取点位置
if(dot_count>=143) dot_count=dot_count-143; //修改下一个点的位置
}
else ;
}
//=============================================
void rec_int(void) //interrupt 4
{unsigned char ch=0,k;
unsigned int n=0;
busy=0; rlc=0; first_bag=0; p_over=0; del_temp1=1; del_temp2=1;
while(rlc<max_rec_line ) //当缓冲没满4行
{while(ch<24) //当一行没满24字节
{if(RI==1) //当串口标志位
{k=SBUF; RI=0; n=0; if((rlc==max_rec_line -1)&&(ch==1)) busy=1; //收数据,清标志位,当最后一行,变忙
if((k!=0x0d)&&(k!=0x0a))
{rec_buf[rlc].n[ch]=k; ch++;
if(k>=0xb0)
{if(rlc==0) del_temp1=0;
else if(rlc==1) del_temp2=0;}
} //若不是回车,写入缓冲
else if(k==0x0d) //若是回车,这一行缓冲剩下的用空格0x00填补
{while(ch<24) {rec_buf[rlc].n[ch]=' '; if((rlc==max_rec_line -1)&&(ch==1)) busy=1; ch++;}
}
else if(k==0x0a&&temp!=0x0d)
{while(ch<24) {rec_buf[rlc].n[ch]=' '; if((rlc==max_rec_line -1)&&(ch==1)) busy=1; ch++;}
}
temp=k;
}
//if(rlc>0&&ch>0)
n++; if(n>5000)
{p_over=1; first_bag=1; goto end;} //若不是第一行,并且没有数据
} //退出
if(ch>=24) {rlc++; ch=0;}
}
end:
if(rlc== max_rec_line ||ch==0)
{ rlc--; }
else if((ch!=0)&&(rlc< max_rec_line ))
{ while(ch<24) {rec_buf[rlc].n[ch]=' '; ch++;} }
k=rlc;
for(;k<max_rec_line ;k--) rec_buf[k].mark=1;
busy=1;
}
//=================================================
void explain(unsigned char hang)
{unsigned l,c,d;
unsigned long int add=0;
if(hang==0) l=0; //如果在打第一字行 预存字模定位到第二页缓冲区
else if(hang==1) l=12; //如果在打第二字行 预存字模定位到第一页缓冲区
else if(hang==2) l=0;
else if(hang==3) l=12;
for(d=0;d<12;d++) //取一个字行的点缓冲
{for(c=0;c<24;c++) //取一点行数据
{if(rec_buf[hang].n[c]<=0x7f)
{add=rec_buf[hang].n[c]*12;
prt_buf[d+l].n[c]=READ_SPI_DATA(add+d); } //如果字符为ASC,取第n行的模
else if(rec_buf[hang].n[c]>=0xb0) //如果为汉字
{add=((rec_buf[hang].n[c]-0xb0)*96)+(rec_buf[hang].n[c+1]-0xa0); //取本字节和下个字节的模,并拼成一个汉字,
add*=24; add+=0x600; //汉字第二个打印的模,为前一字节的低2位做高位,加后一字节右移2位
prt_buf[d+l].n[c]=READ_SPI_DATA(add+d*2); prt_buf[d+l].n[c+1]=READ_SPI_DATA(add+d*2+1);
prt_buf[d+l].n[c+1]=(prt_buf[d+l].n[c]<<6)+(prt_buf[d+l].n[c+1]>>2); c++;} //若为汉字,额外加数据指针
}
}
//for(d=0;d<12;d++) prt_buf[d+l].n[0]&=0x7f;
}
//==============================================
void main_delay(unsigned int i)
{while(i-->0) {nop; nop;}}
void time_arrange(void)
{unsigned char a;
unsigned int count,time_long;
motor=0;
main_delay(30000); //来回计时求平均数
a=0; time_long=0;
while(rst_det==1) ;
main_delay(3);
while(rst_det==0) rst_det=1;
main_delay(3);
while(rst_det==1) rst_det=1;
main_delay(3);
while(a<5)
{count=0;
// rst_det=1;
//while(rst_det==1) ;
// main_delay(1);
// while(rst_det==0) rst_det=1;
// main_delay(1);
// rst_det=1;
// while(rst_det==1) ;
// main_delay(1);
do
{count++;rst_det=1;}
while(rst_det==0);
main_delay(3);
do
{count++;rst_det=1;}
while(rst_det==1);
main_delay(3);
if(count>2500) {a++; time_long+=count;}
if(a>=5) break;
}
motor=1;
time_long/=12;
//time_long/=2;
/*if(time_long>=8500) time_long-=2500;
else if(time_long>=8000) time_long-=2200; //分段补偿
else if(time_long>=7500) time_long-=1800;
else if(time_long>=7000) time_long-=1500;
else if(time_long>=6000) time_long-=1300;
else if(time_long>=5000) time_long-=1100; */
// if(time_long>=10500) time_long+=11570;
// else if(time_long>=10000) time_long+=11580;
// else if(time_long>=9500) time_long+=11590;
// else if(time_long>=9000) time_long+=11610;
if(time_long>=8500) time_long+=11620;
else if(time_long>=8000) time_long-=1560; //分段补偿
else if(time_long>=7500) time_long-=1500;
else if(time_long>=7000) time_long-=1440;
else if(time_long>=6000) time_long-=1370;
else if(time_long>=5000) time_long-=1300;
time_long=0xffff-time_long;
down_time_l=time_long&0xff;
down_time_h=time_long>>8;
}
void uart_init(void)
{ /*
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
PCON &= 0x7F; //串行通信选择方式2
TR1=1;ES=1; //开定时器1用和中断
*/
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xFA;
TL1 = 0xFA;
PCON &= 0x7f;
TR1 = 1; ES=0;
}
if(plc==0)
{rst_det=1; insert_line=insert_line_bak;
while(insert_line>0)
{while(rst_det==0) rst_det=1; main_delay(1);
while(rst_det==1) rst_det=1; insert_line--;}
}
else if(plc==12)
{rst_det=1; insert_line=insert_line_bak;
while(insert_line>0)
{while(rst_det==0) rst_det=1; main_delay(1);
while(rst_det==1) rst_det=1; insert_line--;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -