⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 two18.c

📁 通过51单片机控制用sp2349扩展串口
💻 C
📖 第 1 页 / 共 5 页
字号:
  write_zf(CUT5, 2);             //显示"断油5路"                                 2006.3.6
  write_com(0x83);               //                                              2006.3.6
  write_zf(WHITE1,2);            //                                              2006.3.6

  door1=0;                       //关门1                                         2006.3.6
  break;

  case 'S':
  write_com(0x80);               //第一行显示"正常行使"
  write_hz(NORMAL,4);
  break;

  case '!':
  write_com(0x82);
  write_zf(CUT5,2);              //显示"断油5路"                                 2006.3.6
  write_com(0x83);
  write_zf(WHITE1,2);

  door1=0;                       //关门1                                         2006.3.6
  break;

  case  1 :
  write_com(0x80);                //                                             2006.3.6
  write_zf(WHITE1, 2);            //                                             2006.3.6
  write_com(0x81);                //                                             2006.3.6
  write_zf(WHITE1,2);             //                                             2006.3.6
  write_com(0x82);                //                                             2006.3.6
  write_zf(CUT5,2);               //显示"断油5路"                                2006.3.6
  write_com(0x83);                //
  write_zf(WHITE1,2);             //

  door1=0;                       //关门1                                         2006.3.6
  break;

  case  2 :
  write_com(0x80);                //                                             2006.3.6
  write_zf(WHITE1, 2);            //                                             2006.3.6
  write_com(0x81);                //                                             2006.3.6
  write_zf(WHITE1,2);             //                                             2006.3.6
  write_com(0x82);                //                                             2006.3.6
  write_zf(CUT4,2);               //显示"断油4路"                                2006.3.6
  write_com(0x83);                //
  write_zf(WHITE1,2);             //

  door1=0;                       //关门1                                         2006.3.6
  break;

  case  3 :
  write_com(0x80);                //                                             2006.3.6
  write_zf(WHITE1, 2);            //                                             2006.3.6
  write_com(0x81);                //                                             2006.3.6
  write_zf(WHITE1,2);             //                                             2006.3.6
  write_com(0x82);                //                                             2006.3.6
  write_zf(CUT3,2);               //显示"断油3路"                                2006.3.6
  write_com(0x83);                //                                             2006.3.6
  write_zf(WHITE1,2);             //                                             2006.3.6

  door1=0;                       //关门1                                         2006.3.6
  break;

  case  4 :
  write_com(0x80);                //                                             2006.3.6
  write_zf(WHITE1, 2);            //                                             2006.3.6
  write_com(0x81);                //                                             2006.3.6
  write_zf(WHITE1,2);             //                                             2006.3.6
  write_com(0x82);                //                                             2006.3.6
  write_zf(CUT2,2);               //显示"断油2路"                                2006.3.6
  write_com(0x83);                //                                             2006.3.6
  write_zf(WHITE1,2);             //                                             2006.3.6

  door1=0;                       //关门1                                         2006.3.6
  break;

  case  5 :
  write_com(0x80);                 //                                            2006.3.6
  write_zf(WHITE1, 2);             //                                            2006.3.6
  write_com(0x81);                 //                                            2006.3.6
  write_zf(WHITE1,2);              //                                            2006.3.6
  write_com(0x82);                 //                                            2006.3.6
  write_zf(CUT1,2);                //显示"断油1路"                               2006.3.6
  write_com(0x83);                 //                                            2006.3.6
  write_zf(WHITE1,2);              //                                            2006.3.6

  door1=0;                         //关门1                                       2006.3.6
  break;

  case  6 :                        //                                            2006.3.6
  write_com(0x80);                 //                                            2006.3.6
  write_zf(WHITE1, 2);             //                                            2006.3.6
  write_com(0x81);                 //                                            2006.3.6
  write_zf(WHITE1,2);              //                                            2006.3.6
  write_com(0x82);                 //                                            2006.3.6
  write_zf(WHITE1,2);              //                                            2006.3.6
  write_com(0x83);                 //                                            2006.3.6
  write_zf(WHITE1,2);              //                                            2006.3.6
  break;

  default:                         //错误,退出
  break;

   };

  }

  else  ;                           //退出                                       2006 3 9

}  */
//==========================================================
//写EEPROM
//==========================================================
void write_s24(uchar adr_cnt,uchar j)
{
 inlast3=inbuf3+7;                                         //                          2006 5 23
// for(i=0;i<8;i++)
// {
  ISendStr(S24C04,adr_cnt,inlast3,j);

//  adr_cnt++;
//  getline++;

// }
  inlast3=inbuf3;
}
//==========================================================
//读EEPROM
//==========================================================
void read_s24(uchar addr,uchar j)
{
 inlast3=inbuf3;
// for(i=0;i<8;i++)
// {
  IRcvStr(S24C04,addr,inlast3,j);
//  addr++;
//  outline++;

// }
 inlast3=inbuf3;
}
//===========================================================
//缓存3清空
//===========================================================
void clear()
{
  inbuf3[0]=0;
  inbuf3[1]=0;
  inbuf3[2]=0;
  inbuf3[3]=0;
  inbuf3[4]=0;
  inbuf3[5]=0;
  inbuf3[6]=0;
  inbuf3[7]=0;
}
//===========================================================
//字串校验 XX,00,001,001=>00+001=001
//===========================================================
uchar JAOYAN(uchar i,uchar j,uchar k)
{
 uchar z1;
 uchar z2;
 uchar z3;

 uchar a[3];
 a[0]=0;
 a[1]=0;
 a[2]=0;

 inlast3=inbuf3+i;
 a[0]=*inlast3;
 inlast3++;
 a[1]=*inlast3;
 z1=atoi(a);

 inlast3=inbuf3+j;
 a[0]=*inlast3;
 inlast3++;
 a[1]=*inlast3;
 inlast3++;
 a[2]=*inlast3;
 z2=atoi(a);

 inlast3=inbuf3+k;
 a[0]=*inlast3;
 inlast3++;
 a[1]=*inlast3;
 inlast3++;
 a[2]=*inlast3;
 z3=atoi(a);

 if(z3==(z2+z1))
 {
  inlast3=inbuf3;
 // ES=0;
 // C2=1;
 // senddatas(inlast3+3,2);
 // ES=1;
 // C2=0;
//  inlast3=inbuf3;
  return(1);
  }
 else
  {
   inlast3=inbuf3;
   return(0);
  }
}
//===========================================================
//读EEPROM数据至片内RAM
//===========================================================
void EEPROM_RAM()
{
 clear();                                            // 缓存3清空
 read_s24(0x00,3);                                   //从EEPROM 0x00地址读数据至缓存3
 c=atoi(inbuf3);                                     //数据字符串型化为整形       危险距离

 clear();
 read_s24(0x03,3);
 d=atoi(inbuf3);                                     //安全距离

 clear();
 read_s24(0x06,3);
 e=atoi(inbuf3);                                     //启动速度

 clear();
 read_s24(0x09,3);
 f=atoi(inbuf3);                                     //安全速度

 clear();
 read_s24(0x12,3);
 x=atoi(inbuf3);                                     //速度脉冲系数

 clear();
 read_s24(0x15,3);
 t0=atoi(inbuf3);                                    //制动距离与速度比  第一组

 clear();
 read_s24(0x18,3);
 t1=atoi(inbuf3);                                    //制动距离与速度比  第二组

 clear();
 read_s24(0x21,3);
 t2=atoi(inbuf3);                                    //制动距离与速度比  第三组

 clear();
 read_s24(0x24,3);
 t3=atoi(inbuf3);                                    //制动距离与速度比  第四组

 clear();
 read_s24(0x27,3);
 t4=atoi(inbuf3);                                    //制动距离与速度比  第五组

 clear();
 read_s24(0x30,3);
 t5=atoi(inbuf3);                                    //制动距离与速度比  第六组

 clear();
 read_s24(0x33,3);
 t6=atoi(inbuf3);                                    //制动距离与速度比  第七组

 clear();
 read_s24(0x36,3);
 t7=atoi(inbuf3);                                    //制动距离与速度比  第八组

 clear();
 read_s24(0x39,3);
 t8=atoi(inbuf3);                                    //制动距离与速度比  第九组

 clear();
 read_s24(0x42,3);
 t9=atoi(inbuf3);                                    //制动距离与速度比  第十组

 }
//===========================================================
//距离、速度字串合并
//===========================================================
void DIS_AND_SPE()
{
  inbuf3[0]='D';
  inbuf3[1]=copyinbuf1[0];
  inbuf3[2]=copyinbuf1[1];
  inbuf3[3]=copyinbuf1[2];
  inbuf3[4]=copyinbuf1[3];
  inbuf3[5]=copyinbuf1[4];
  inbuf3[6]=copyinbuf1[5];
  inbuf3[7]=',';
  inbuf3[8]=BUF2[0];
  inbuf3[9]=BUF2[1];
  inbuf3[10]=BUF2[2];
  inbuf3[11]=BUF2[3];
  inbuf3[12]=BUF2[4];
  inbuf3[13]=BUF2[5];
 }

//===========================================================
//函数名称:examine()
//功能描述:检查字符串是否为合法数据
//输入:*st
//输出:0/1
//全局变量: /
//调用模块: /
//===========================================================
uchar examine(uchar *st)
{
 uchar i;
 for(i=0;i<8;st++,i++)
 {
  if((*st>='0'&&*st<='9')||*st=='.'||*st=='M')
   continue;
  else return(0);
  }
  return(1);
}
//===========================================================
//函数名称:change()
//功能描述:接收距离数据格式调整,去掉第一个非零数值前的零
//输入:*buffer
//输出:count
//全局变量: /
//调用模块: /
//===========================================================
change(uchar *buffer)                     //移位操作,去掉数据
{
 uchar i,count;
 uchar *s;
 s=buffer;                                //保存指针首地址
 count=0;                                 //移位次数计数附初值
 while(*buffer=='0'&&count!=3)            //判断指针第一位、第二位、第三位是否为零,是,作移位
 {
  for(i=0;*buffer!='M';buffer++,i++)      //依次移位
  *buffer=*(buffer+1);
  buffer=s;                               //指针回首地址
  count++;                                //计数加一
  }

 for(i=0;i<8;buffer++,i++)                //前移位,后补空
 {
  if(*buffer=='M')
  *buffer=0x20;
  }
 return(count);                           //返回移位次数
}
//=====================================================
//串口初始化
//=====================================================
void init(void)           //串口初始化
{
 TMOD=0x51;               //T1计数,T0定时
 T2CON=0x30;              //T2作为波特率发生器
 SCON=0x50;
 PCON=0x80;
 RCAP2H=0xFF;             //波特率76800
 RCAP2L=0xF7;
 PT0=1;                   //T0中断优先级高
 PS=0;                    //串口中断优先级低
 TR2=1;                   //开定时器T2
 }
//=====================================================
//开定时器T0
//=====================================================
void  start_T0(void)
{
 TR1=0;                  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -