📄 sc1.c
字号:
set('3');
// set('1');
set('+');
set_end();
}
void set_dec_p(void)//fuyang
{set ('P');
if(manual_flag==0)
set('1');
else
set('3');
// set('1');
set('-');
set_end();
}
void set_add_a(void)//fangwei
{set ('A');
if(manual_flag==0)
set('1');
else
set('3');
// set('1');
set('+');
set_end();
}
void set_dec_a(void)
{set ('A');
if(manual_flag==0)
set('1');
else
set('3');
//set('1');
set('-');
set_end();
}
void set_add_sc(void)
{set('C');
set('1');
set('+');
set_end();
}
void set_dec_sc(void)
{set('C');
set('1');
set('-');
set_end();
}
void set_add_c(void)//jihua
{
set ('C');
if(go_flag==0)//go
set('+');
else
set('s'); //stop
set_end();
}
void set_dec_c(void)//jihua
{ set ('C');
if(go_flag==0)
set('-');
else
set('s');
set_end();
}
void set_jiaoling_jihua(void)
{ char sk[6]={'\0'};
if(SendSequence_Len<70)
{
set('D');
set('p');
sprintf(sk,"%5.1f",param_jihua);//have problem "+/-"
setnum(sk,5);
set_end();
}
}
void set_jiaoling_fangwei(void)
{ char sk[6]={'\0'};
if(SendSequence_Len<70)
{
set('D');
set('a');
sprintf(sk,"%5.1f",param_fang);
setnum(sk,5);
set_end();
}
}
void set_jiaoling_fuyang(void)
{ char sk[5]={'\0'};
if(SendSequence_Len<70)
{
set('D');
set('e');
set('0');
sprintf(sk,"%4.1f",param_fuyang);
setnum(sk,4);
set_end();
}
}
void PIN_CLEAR()
{
PINDATA=0x01;//P4=0x01;
PINRSC;//RS=0;
PINRWC;//RW=0;
PINEN;//E=1;
Delay(100);
PINENC;//E=0;
}
void Write_command( char CMD)
{
PINDATA=CMD;//P4=CMD;
//Delay(10);
PINRSC;//RS=0;
PINRWC;//RW=0;
PINEN;//E=1;
Delay(100);
PINENC;//E=0;
}
void Write_data(char CMD)
{
PINDATA=CMD;//P1=CMD;
// Delay(10);
PINRS;//RS=1;
PINRWC;//RW=0;
PINEN;//E=1;
PINENC;//E=0;
// Delay(10);
}
void charactertolcm(unsigned line, char char_temp[])//非绘图模式写入4个字符
{
int i=0;
char ch[8];
char line_temp;
line_temp=line;
for(i=0;i<8;i++){
ch[i]=char_temp[i];}
for(i=0;i<8;i++)
{
if(!i%2){
Write_command(line_temp);
line_temp++;}
Write_data(ch[i]);
}
}
void all_show(char sstr[][16],unsigned StartLine,unsigned LineNum)//整屏写入
{unsigned char i,j,l;
Write_command(0x30);
for(i=0;i<LineNum;i++)
{
for(j=0;sstr[i][j]!='\0';j++)
show_buf[i][j]=sstr[i][j];
for(l=j;l<17;l++)
show_buf[i][l]=' ';
}
if(LineNum<4)
for(i=LineNum;i<4;i++)
for(j=0;j<17;j++)
show_buf[i][j]=' ';
Write_command(0x80);
for(i=0;i<16;i++)
Write_data(show_buf[0][i]);
Write_command(0x90);
for(i=0;i<16;i++)
Write_data(show_buf[1][i]);
Write_command(0x88);
for(i=0;i<16;i++)
Write_data(show_buf[2][i]);
Write_command(0x98);
for(i=0;i<16;i++)
Write_data(show_buf[3][i]);
}
void clear()//
{
unsigned char add_x,add_y;
Write_command(0x34);
for(add_y=0x80;add_y<0xa0;add_y++)
{
Write_command(add_y) ;
Write_command(0x80) ;
for(add_x=0;add_x<0x10;add_x++)
{
Write_data(0x00);
}
}
for(add_y=0x80;add_y<0xa0;add_y++)
{
Write_command(add_y) ;
Write_command(0x88) ;
for(add_x=0;add_x<0x10;add_x++)
{
Write_data(0x00);
}
}
}
void Uart0_Initialization(void)//接收
{
/*USART Settings:*/
/*UART function, Idle line multiprocessor Protocol,
//19200 baud, 8 data bits, NO Verification, 1 stop bit*/
_DINT();//
UCTL0 &=~SWRST; //USART IS START
UCTL0 = 0x10;
UBR00 = 0x82;/*GPS 4800bps baud rate*/
UBR10 = 0x06;
UMCTL0 = 0x07;
UTCTL0 = 0x50;
URCTL0 = 0x00;
ME1 &=~0x80; //串口0发送模块使能置0
IE1 &=~0x80; //串口0发送中断使能关
IE1 |= 0x40; //接收中断使能开
IFG1 &= ~(BIT6+BIT7); //发送接收中断标志置0
P3SEL |= 0x30; //P3.4,3.5引脚为外围功能模块
P3DIR |= 0x10; //P3.4为输出方向
P3DIR &=~BIT5; //P3.5为输入方向
ME1 |= 0x40; //串口0接收模块使能开
_EINT(); //开中断
}
#pragma vector= 0x12
__interrupt void Uart0_Rx(void)
{
}
void Uart1_Initialization(void)
{
UCTL1 &=~ SWRST;
UCTL1 = 0x10;
// UBR01 = 0x05; // //Gradient 9600bps baud rate
// UBR11 = 0x0D; //
UBR01 = 0x82;//0x41;//4800bps
UBR11 = 0x06;//0x03;
UMCTL1 = 0x1f;//0x07; ???????????
UTCTL1 = 0x50;
URCTL1 = 0x00;
IE2 |= 0x30; //发送接收中断使能开
IFG2 = 0x00; //发送接收中断标志为0
}
void Uart_TX1(void)//发没问题,确定发送寄存器的地址
{
TXBUF1=*(SendSequence);//发送寄存器
Delay(10);
Reset = FALSE;
}
#pragma vector=0x04
__interrupt void Uart1_TX(void)
{
IFG2 &=~BIT5;//清发中断标志
signal|=BIT3;
}
void handle_TX1(void)//对发送寄存器中的数据进行处理,前移一位
{
int i;
if(SendSequence_Len>0)
SendSequence_Len--;
for(i=0;i<SendSequence_Len;i++)
*(SendSequence+i)=*(SendSequence+i+1);
if(SendSequence_Len>0)
TXBUF1 = *(SendSequence);
else
{
Reset = TRUE;
}
}
void watch2(void)
{
if(SendSequence_Len>0 && Reset==TRUE)
Uart_TX1();
while(Reset==FALSE)
{
if((signal&BIT3)==BIT3)
{
signal &=~BIT3;
handle_TX1();
}
}
}
#pragma vector=0x06
__interrupt void Uart1_Rx(void)
{
IFG2 &=~BIT4; //清串口1收中断标志
if(ReceiveSequence_Len<80)
{
ReceiveSequence[ReceiveSequence_Len] = RXBUF1 & 0x00ff;//接收字符
if((ReceiveSequence[ReceiveSequence_Len]==0x0A)|(ReceiveSequence[ReceiveSequence_Len]=='!'))//
// if((ReceiveSequence[ReceiveSequence_Len]=='o')|(ReceiveSequence[ReceiveSequence_Len]=='!'))//
flag+=1;// flag表示一个命令
ReceiveSequence_Len++;
}
}
void RS_go(int m)//接受数据前移m位
{for(i=0;i<ReceiveSequence_Len;i++)
ReceiveSequence[i]=ReceiveSequence[i+m];
ReceiveSequence_Len-=m;
}
void RS_clr()
{ if(ReceiveSequence_Len>100)
ReceiveSequence_Len=0;
}
void find_ctr(void)
{
if(ReceiveSequence_Len==0)
return;
while(ReceiveSequence[0]!=0x0A & ReceiveSequence[0]!='!')
{
RS_go(1);
if(ReceiveSequence_Len>100)
{
ReceiveSequence_Len=0;
return;
}
}
RS_go(1);
if(ReceiveSequence_Len>100)
ReceiveSequence_Len=0;
}
float judge_num(char sk[],int len,int bi)
{ char sk1[50]={'\0'};
char i=0,j=0;
float back;
for(j=0;j<len;j++)
{sk1[i]=sk[i];
i++;}
back=atof(sk1)/bi;
sk1[0]='\0';
return back;
}
void Judge_Instruction_And_Go(char char1,char char2)//监控命令处理函数
{
// Delay(6000);//波特率9600时延时2000收无误,波特率已改为4800
// Delay(1000);
IE2 &=~BIT5;//串口1发中断关
switch(char1)
{
case 'A'://方位
RS_go(1);
RS_clr() ;
if(ReceiveSequence[8]==0x0A)
// if(ReceiveSequence[8]=='o')
{
saveparam_fang=judge_num(ReceiveSequence,4,10);
RS_go(5);
saveparam_fuyang=judge_num(ReceiveSequence,3,10);
RS_go(4);
RS_clr();
lock1=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -