📄 main1.c
字号:
//#include <sst89x5x4.H>
#include <AT89X51.h> ////程序定义
#include <stdio.h>
#include <intrins.h>
#include <math.h>
#include <ALL.h>
#include <Line_interpolation.c>
#include <manual.c>
#include <lcd.c>
#include <G_translation.c>
#include <G_input.c>
#include <return_origin.c>
#include <Cir_interpolation.c>
#include <24c02.c>
//#include <IAP.c>
//#include <Interrupt service.c>
/////////////////////子函数//////////////////////////
void service_t0(void) interrupt TF0_VECTOR using 2
{
TH0=(65536-ir_time)/256;
TL0=(65536-ir_time)%256;
ir_signtime++;
if (ir_signtime>250) {ir_signtime=0; TR0=0;ir_start_flag=0;ir_rpt1=ir_rpt2=0;
ir_data[2]=ir_data[3]=0xff; //清除数据.
}
//如果接收到单次的触发脉冲,如干扰或红外信号的结束,关闭定时器,并把红外引导标记清除,把连发标记也清除
}
#ifdef T2
void service_t2(void) interrupt TF2_VECTOR using 1 /*每秒中断显示XY值并判断XY值是否溢出,溢出则停止输出*/
{
static unsigned int Timer2_Server_Count; /* 定义静态变量,用来计数T2定时器的溢出次数(进入本函数的次数)*/
if(Pref_x>0X5AC1||Pref_x<=0||Pref_y>0X5BEC||Pref_y<=0)
interrupt_flag=1;
}
#endif
#if 0
void service_ex1(void) interrupt IE1_VECTOR using 1 /*外部紧急中断*/
{
interrupt_flag=1;
// Lcd_print("interrupt");
while(1)
{
P1_6=0;
DelayXS(1) ;
P1_6=1;
}
}
#endif
void service_ex0(void) interrupt IE0_VECTOR using 3
{
EA=0 ; //中断关闭
TH0=(65536-ir_time)/256;
TL0=(65536-ir_time)%256;
if(!ir_start_flag&&ir_signtime>20) //如果没收到引导脉冲,进行引导脉冲CHECK.
{
ir_sign_count=0; //脉冲记数
ir_start_flag=1; //ir_start_flag 引导信号标记。
}
if(ir_start_flag)
{
if(ir_signtime>0&&ir_signtime<10) //符合真正数据的脉冲
{
ir_temp>>=1;
if(ir_signtime>3) ir_temp|=0x80; //如果时间>3是1
ir_sign_count++; //红外脉冲+1
switch (ir_sign_count)
{
case 8:
ir_data[0]=ir_temp; //设备码
break;
case 16:
ir_data[1]=ir_temp;
break;
case 24:
ir_data[2]=ir_temp; //数据码
break;
case 32:
ir_data[3]=ir_temp;
if (ir_data[0]==~ir_data[1]&&ir_data[2]==~ir_data[3])
{
ir_flag=1; //有键按下.
SBUF=ir_data[2];
while(!TI){;}
TI=0;
}
break;
}
}
if(ir_signtime>0X40) { lf_flag=1;
if (ir_rpt1>10) { ir_rpt2++;if(ir_rpt2==2) {ir_rpt2=0;ir_flag=1;} }
else ir_rpt1++ ;
} //连发码的处理:接收到连发码,淹死20个码,然后每5个码发送一次键按下信号
else lf_flag=0;
}
ir_signtime=0; //计数器归0
EA=1;
TR0=1; //开始计时
}
void TandC_Tnit(void)
{
EA=1; //总控
ES=1; //串行中断允许
ET1=0; //定时器0
ET0=1; //定时器1,波特发生
EX0=1; //外部0中断
IT0=1; //下降沿触发
SCON=0x50; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD=0x21; //TMOD: timer 1, mode 2, 8-bit reload ,time0 mode1;
PCON=0x80; //SMOD=1;
#ifdef Y12
TH1= 0xFD; //Baud:19200 fosc=11.0592MHz
#endif
#ifdef Y22
TH1= 0xFa; //Baud:19200 fosc=22.1184MHz
#endif
TH0=(65536-ir_time)/256;
TL0=(65536-ir_time)%256;
TR1=1; // timer 1 run
#ifdef T2
T2MOD &= 0xFC; /* 定时器2输出不允许 */
T2MOD |= 0x01; /* ;可以设置为向上/下计数:此程序中为向上达到0xff时溢出*/
EXF2=0; /* 定时器2外部标志位清除*/
TCLK=0;RCLK=0; /* 不用于波特率发生器*/
EXEN2=0; /* 视T2EX(P1.1)端信号无效*/
TH2=MSB_reload_value; /* 填入初始化值*/
TL2=LSB_reload_value;
RCAP2H=MSB_reload_value; /* 重载值 */
RCAP2L=LSB_reload_value;
C_T2=0; /* 定时模式*/
CP_RL2=0; /* 重载模式*/
EA=1; /* 中断允许*/
ET2=1; /* 允许T2中断*/
TR2=1; /* 开始计时*/
`#endif
}
void start_handler(void)
{
WriteCommandLCM(0x01,1);
Lcd_print1(0,0,"1.MDI 2.MANUL ");
Lcd_print1(1,0,"3.RUN 4.ORIRGIN");
WriteCommandLCM(0x0F,1);
WriteCommandLCM(0x06,1);
LocateXY(0,0);
ir_data[2]=LEFT;
while(1)
{
a:
LocateXY(0,0);
while(!(ir_data[2]== ENTER))
{
if(ir_data[2]== RIGHT) goto b;
if(ir_data[2]== GB_DOWN) goto c;
if(ir_data[2]==EXIT) goto e;
}
ir_data[2]=0;
G_input();
break;
b:
LocateXY(6,0);
while(!(ir_data[2]== ENTER))
{
if(ir_data[2]== LEFT) goto a;
if(ir_data[2]== GB_DOWN) goto d;
if(ir_data[2]==EXIT) goto e;
}
ir_data[2]=0;
ManualOperation();
break;
c:
LocateXY(0,1);
while(!(ir_data[2]== ENTER))
{
if(ir_data[2]==RIGHT) goto d;
if(ir_data[2]== GB_UP) goto a;
if(ir_data[2]==EXIT) goto e;
}
ir_data[2]=0;
G_translation();
break;
d:
LocateXY(6,1);
while(!(ir_data[2]== ENTER))
{
if(ir_data[2]== LEFT) goto c;
if(ir_data[2]== GB_UP) goto b;
if(ir_data[2]==EXIT) goto e;
}
ir_data[2]=0;
Return_origin();
break;
}
e: ir_flag=0;
}
#if 1
void DelayXS(unsigned char x) /*延时x秒*/
{
unsigned char TempCycA =(unsigned char)x*DELAY;
unsigned int TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--) ;
}
}
#endif
void buf_0xff(void) /*G代码缓冲区付值为0XFF*/
{
unsigned char i;
for(i=0;i<LENTH;i++)
buf[i]=0xff;
}
void getin_system(void) /*进入系统5秒到计时*/
{
unsigned char i=0x30;
Lcd_print("the system of CN");
for(i=0x35;i>=0x30;i--)
{
DisplayOneChar(5,1,i);
DelayXS(1);
}
}
void displayX(void)
{
unsigned char display_Pref_x[3]={0,0,0};
if(! ((Pref_x%100)==0)) { kc=200-F*50;goto a;}
display_Pref_x[0]=(unsigned char)(Pref_x/10000)+0x30;
display_Pref_x[1]=(unsigned char)(Pref_x/1000%10)+0x30;
display_Pref_x[2]=(unsigned char)(Pref_x/100%100%10)+0x30;
DisplayOneChar (8,1,display_Pref_x[0]);
DisplayOneChar (9,1,display_Pref_x[1]);
DisplayOneChar (10,1,display_Pref_x[2]);
kc=80-F*20;
a:display_Pref_x[0]=0;
}
void displayY(void)
{
unsigned char display_Pref_y[3]={0,0,0};
if(! ((Pref_y%100)==0)) { kc=200-F*50;goto a;}
display_Pref_y[0]=(unsigned char)(Pref_y/10000)+0x30;
display_Pref_y[1]=(unsigned char)(Pref_y/1000%10)+0x30;
display_Pref_y[2]=(unsigned char)(Pref_y/100%100%10)+0x30;
DisplayOneChar (13,1,display_Pref_y[0]);
DisplayOneChar (14,1,display_Pref_y[1]);
DisplayOneChar (15,1,display_Pref_y[2]);
kc=80-F*20;
a:display_Pref_y[0]=0;
}
void displayXY(void)
{
unsigned char display_Pref_xy[3]={0,0,0};
display_Pref_xy[0]=(unsigned char)(Pref_x/10000)+0x30;
display_Pref_xy[1]=(unsigned char)(Pref_x/1000%10)+0x30;
display_Pref_xy[2]=(unsigned char)(Pref_x/100%100%10)+0x30;
DisplayOneChar (7,1,0x58);
DisplayOneChar (8,1,display_Pref_xy[0]);
DisplayOneChar (9,1,display_Pref_xy[1]);
DisplayOneChar (10,1,display_Pref_xy[2]);
DisplayOneChar (12,1,0x59);
display_Pref_xy[0]=(unsigned char)(Pref_y/10000)+0x30;
display_Pref_xy[1]=(unsigned char)(Pref_y/1000%10)+0x30;
display_Pref_xy[2]=(unsigned char)(Pref_y/100%100%10)+0x30;
DisplayOneChar (13,1,display_Pref_xy[0]);
DisplayOneChar (14,1,display_Pref_xy[1]);
DisplayOneChar (15,1,display_Pref_xy[2]);
}
void main(void)
{
LCMInit();
TandC_Tnit();
getin_system(); /*进入系统5秒到计时*/
buf_0xff(); /*G代码缓冲区付值为0XFF*/
s=&buf;
TAI_BI=1; /*提笔*/
//Pref_x=23200;
ReadXYFromNVRAM();
//Pref_y=23500;
//SaveXYToNVRAM();
//Delay5Ms();
#if 0
Pref_x=0x30;
Pref_y=0x31;
while(1)
{ DisplayOneChar(5,0,Pref_x);
DisplayOneChar(7,0,Pref_y);
SaveXYToNVRAM();
//if (Pref_x<0x40)
Pref_x=0;
Pref_y=0;
Delay5Ms();
ReadXYFromNVRAM();
DisplayOneChar(3,1,Pref_x);
DisplayOneChar(5,1,Pref_y);
if (Pref_x>0x40)
{ Pref_x=0x30;
Pref_y=0x30;}
else { Pref_x++;
Pref_y++;}
Delay400Ms();
Delay400Ms();
SBUF=Pref_x;
while(!TI){;}
TI=0;
EA=1;
TR0=1;}
#endif
#if 0
Lcd_print1(0,0,buf);
SaveGcodeToI2C();
Delay5Ms();
buf[2]=0x45;
buf[12]=0x45;
ReadGcodeToI2C();
Lcd_print1(1,0,buf);
//Lcd_print(buf);
#endif
#if 0
SaveXYToNVRAM
(void)();
Pref_x=123;
Pref_y=123;
Delay5Ms();
ReadXYFromNVRAM();
//Pref_x=650;
SBUF=LOWBYTE(Pref_x) ;
while(!TI){;}
TI=0;
SBUF=HIGHBYTE(Pref_x);
while(!TI){;}
TI=0;
SBUF=LOWBYTE(Pref_y) ;
while(!TI){;}
TI=0;
SBUF=HIGHBYTE(Pref_y);
while(!TI){;}
TI=0;
#endif
#if 0
TAI_BI=1;
z_chabu(0,0,50,20);
while(1);
#endif
#if 0
NR=1;
circle_interpolation(30,0,0,30);
while(1);
#endif
//ir_data[2]=ENTER;
//G_translation();
//
//circle_interpolation(-Ii,-Kk,x-Ii,y-Kk);
while(1) /*主循环*/
{
start_handler();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -