三菱电梯外呼小板研究(1)

对三菱外呼小板进行研究,通过示波器,逻辑分析仪,分析出三菱小板对应与液晶显示的逻辑,并通过实际现场实验得出

本来打算做远程监控的,觉得用此版麻烦,后来用can获取通讯,比这个简单。故丢弃不用了这些代码,

2017年4月份辛苦一个星期得来的,丢掉可惜。

清除资料之前,分享给大家,看的懂看看,看不懂的就算了,不提供技术支援,本来就是写的玩的。

禁止商业用途,只学习交流使用,本人不承担任何后果

 

显示板接口说明;以下的结构图,对应着板子的位置


_________________________________________________________
                          | 1 2 3 4 5 6 7 8 |
| - - - - -                                                        - - - |
|                                 G 12v G G                           |
| | y1                                                                   |5v |
| | y2                                                                   |5v |
| | y3                                                                      | |
| | y4                                                                   | G |
| | y5                                                                   | G |
| | yd1                                                                 | G |
| | yd2                                                                  | G |
| | yd3                                                                   | |
| | yd4                                                                  |12v |
| | yd5                                                                  |12v |
| | yDclk                                    上 下 |
| | yDblk                                   - - - - - - - |
| | |
| P366714B000G03 |
|________________________________________________________|

________________________________________________________
以下是用STC15W4k芯片编写的,编写难免有些不足

 

函数接口说明

void GPIOxianshi(void);//初始化io口
bit tingyong(void);//只有显示停用显1,其他全部正常显0 ;
bit yichang(void);//只要不是自动,全变1
bit bianhua(void);//当显示有变化时,显1(包括停用) ;做实时监控时使用

void ztsx_sxzt(void); //先状态,后上下;代码含义看程序 直接两位代码
void Sendlouxian(void);//显示楼层 直接显示楼层

 

 

点开+查看
#include "unstc15.h"
#include "uart.h"
#include "sl_xianshi.h"
#include "delay.h"
#include <intrins.h>

/****改端口****/   //(一下端口按着顺序排列)
/*显示板接口说明
_________________________________________________________
|             1 2 3 4  5  6 7 8                             |
|             - - - -  -  - - -                             |
|                       G 12v  G G                             |
|  |   y1                                          |5v     |
|  |   y2                                          |5v     |
|  |   y3                                          |         |
|  |   y4                                          |    G     |
|  |   y5                                          |    G     |
|  |   yd1                                          |    G     |
|  |   yd2                                          |    G     |
|  |   yd3                                          |         |
|  |   yd4                                          |12v     |
|  |   yd5                                          |12v     |
|  |   yDclk                     上        下                 |
|  |   yDblk                   - - - - - - -             |
|  |                                                     |
|        P366714B000G03                                     |
|________________________________________________________|
*/
/*********读地址***********/
sbit Y1 = P5^4;                       //        y1 y2 y3 的顺序         000 (0)无符号状态  100(4)停用   010(2)专用 001(1)专用满员 
sbit Y2 = P4^7;                       //                             110(6)满员   011(3)自动满员  101(5)自动   111(7)异常
sbit Y3 = P4^6;                       //
sbit Y4 = P4^5;                       //        y4   y5               01下行        10上行
sbit Y5 = P4^4;                       //                                          _______________
sbit YD1 = P4^3;             //               5位编制码  可以编制成1024位        |                |
sbit YD2 = P4^2;             //                                                  |                |
sbit YD3 = P4^1;             //                                                  |    全速采集10/s|
sbit YD4 = P4^0;             //                                                  |                |
sbit YD5 = P5^2;             //                                                  |_____________|
sbit YDclk = P5^1;               //2/3的占空比脉冲  30ms      110  ̄  ̄ _
sbit YDbclk = P5^0;               //1/3的占空比脉冲  30ms      100  ̄ _ _


/*i******    单片机操作 ***********/
sbit key= P0^7;       //默认key高电平,低电平与pc通讯
/*******    数码管操作 ***********/


/**************显示二维数组********因为测试解码很费时间关系只做了-2到35的数值显示(包括16进制)********/
code u32 xianshi[1024]={
 // 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32
//0 //00                                     ////测试8
    0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,
//1
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//2           //8,                                    //28                                    //18
    0xff,0xff,0x08,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x28,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x18,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//3                //1
    0xff,0xff,0xff,0x01,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//4                     //4                                     //24                                    //14                                    //34
    0xff,0xff,0xff,0xff,0x04,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x24,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x14,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x34,0xff,0xff,0xff,
//5
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//6                               //b                                     //2b                                    //1b
    0xff,0xff,0xff,0xff,0xff,0xff,0x0b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1b,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//7
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//8 //22                                    //2                                     //32                                    //12           //37=-2
    0x22,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x02,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x32,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x12,0xff,0xff,0x37,0xff,0xff,0xff,0xff,
//9
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//10          //20                                                                            //30                                    //10
    0xff,0xff,0x20,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x30,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x10,0xff,0xff,0xff,0xff,0xff,
//11               //2d                                     //d                                                                            //1d
    0xff,0xff,0xff,0x2d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0d,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1d,0xff,0xff,0xff,0xff,
//12                    //26                                    //6                                                                             //16
    0xff,0xff,0xff,0xff,0x26,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x06,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x16,0xff,0xff,0xff,
//13
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//14                              //2e                                    //e                                                                             //1e
    0xff,0xff,0xff,0xff,0xff,0xff,0x2e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0xff,
//15
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//16//11           //-1=36                     //31                                                                            //21
    0x11,0xff,0xff,0x36,0xff,0xff,0xff,0xff,0x31,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x21,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//17
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//18          //19                                                                             //9                                    //29
    0xff,0xff,0x19,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x09,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x29,0xff,0xff,0xff,0xff,0xff,
//19
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//20                    //15                                    //35                                    //5                                     //25
    0xff,0xff,0xff,0xff,0x15,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x35,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x25,0xff,0xff,0xff,
//21
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//22                              //1c                                                                            //c                                     //2c
    0xff,0xff,0xff,0xff,0xff,0xff,0x1c,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0c,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2c,0xff,
//23
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//24//33                                    //13                                    //23                                    //03
    0x33,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x13,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x23,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//25
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//26                                                  //1a                                    //2a                                    //a
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2a,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0a,0xff,0xff,0xff,0xff,0xff,
//27
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//28 //7
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x17,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x27,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x07,0xff,0xff,0xff,
//29
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
//30                                                                      //1f                                    //2f                                    //f
    0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xff,
//31                         //997
    0xff,0xff,0xff,0xff,0xef,0xee,0xe2,0x66,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x66
//  0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30
};      //36-1   36=-2
code u8 *zifu[56]={
                 "--","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F",               //16
                 "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F", //32
                 "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F", //48
                 "30","31","32","33","34","35","-1","-2"};    //54
                  //   0         1        2        3        4      5     6       7
//code u8 *ztz[8]={"无符号","专用满员","专用","自动满员","停用","自动","满员","异常"};
code u8 *ztz[8]={"0","1","2","3","4","5","6","7"};
                         ////
code u8 *shangx[4]={"-","M","W","-"};
/****************************************/
u16 kgao;         //       2/3时钟地址(下降沿有效)
u16 kdi;        //      1/3时钟地址 (上升沿有效)
u16 kezt;       //  状态,比如自动停用
u16 keud;      //上下
u16 SS;
u16 kk;          //数据位
u8 szkey=250;  //设置按键反映时间
u8 kkk1;u8 kkk2=77;
u8 kkk3,kkk4=5;       u8 p1zt;u8 p2zt=254;  //必须放在这里,因为一调用函数会变掉这里是初始值
/******************** IO配置函数 **************************/
void    GPIOxianshi(void)
{
    P4M0 = 0;         //设置p1准双向口
    P4M1 = 0;
    P5M0 = 0;         //设置p0准双向口
    P5M1 = 0;
Y1=Y2=Y3=Y4=Y5=YD1=YD2=YD3=YD4=YD5=YDclk =YDbclk =1;    
}
/***********/
chuli(void);
u16 gao(void);

u16 duqu(void);
bit CLKERROR(void);
void Sendlouxian(void);
state_sxzt(void);
void ztsx_sxzt(void);

/*************************************************************************************/
//对楼显信息进行处理函数   检测异常函数
bit yichang(void)
{  //bit key;//key由接受指令控制(这里因为没有加入处理占时自定义)
    
      state_sxzt();  //读取停用值 kezt
    if(kezt==5)
    return 0;
    else
    return 1;
}
bit tingyong(void)
{  //bit key;//key由接受指令控制(这里因为没有加入处理占时自定义)
    
      state_sxzt();  //读取停用值 kezt
    if(kezt==4)
    return 1;
    else
    return 0;
}
 bit bianhua(void)         //启动网络发送标志位,一旦楼显数据变化。发送
{           state_sxzt();   //读取kezt  keud
           p1zt=kezt;
           kkk3=keud;
           kkk1=duqu();
           if(p1zt!=p2zt)       //  发生变化发送
               {p2zt=p1zt;    
            return 1;//空格
             }
           else if(kkk1!=kkk2)      //楼显发生变化发送
             {kkk2=kkk1;return 1;}
           else if(kkk3!=kkk4)      //发生变化发送
             {kkk4=kkk3;return 1;}
           else  return 0;
               
}
   ////////////////////////上行状态反映///////////////////////////////
   void ztsx_sxzt(void)                   //直接打印自动还是满员和上行或下行
   {  u8 *ud;
      u8 *zt;
      state_sxzt();    //可以不要,也可以实时刷新数据
      zt=ztz[kezt];
      ud=shangx[keud];
     //SendString("状态:");
     SendString(zt);
     //SendString("\r\n");
     //SendString("运行方向状态:"); 
     SendString(ud);
     //SendString("\r\n");
     
   }
 


/**************************************************/
    void Sendlouxian(void)             //直接打印显示楼层数
{  u8 *s;
   // SendString("楼层:");    
    kkk2=duqu();
    if(0<=kkk2&&kkk2<=55)
    {s=zifu[kkk2];
    SendString(s);
    //SendString("\r\n");
    }
    else 
    SendString("EE");
     
        
}
/********************************************************        状态显示  ***********************************************************/
state_sxzt(void)
{
  kezt=0;
 _nop_();
if(Y1)
     {kezt<<=1;
      kezt=(kezt|1);}
      else
      kezt<<=1;
    _nop_();
 if(Y2)
     {kezt<<=1;
      kezt=(kezt|1);}
      else
      kezt<<=1;
 _nop_();
 if(Y3)
     {kezt<<=1;
      kezt=(kezt|1);}
      else
      kezt<<=1;
 _nop_();


/****************上下*************************/

  keud=0;
 _nop_();
if(Y4)
     {keud<<=1;
      keud=(keud|1);}
      else
      keud<<=1;
    _nop_();
 if(Y5)
     {keud<<=1;
      keud=(keud|1);}
      else
      keud<<=1;
 _nop_();
 
 return kezt,keud;
}
/***********对pic解码处理***********************************************************************************/


//事实显示主要处理函数 (显示十六进制进制数值)
u16 duqu(void)
{
  kk=0;
 if(!CLKERROR())
 {kk=999;}                   //66     这里为假设值  (实际ef要测)  ef时钟故障      (31 4)
  else
 chuli();
SS=xianshi[kk];    

    
return (SS);
}


bit CLKERROR(void)//对上clk异常判断函数     //
{    u8 i;bit sss=0;
   for(i=0;i<25;i++)           //假设100ms没有反映,将输出无显示假=0  
  { 
       if((YDbclk==1)||(YDclk==1))
     { 
      sss=1;return 1;} 
    delay_ms(1);
   }
   if(sss==1)
   return 1;
   else
   return 0;
   
   }
//主要确定不误码        
chuli(void)
{
u16 k1,i1,k2;
bit cl;
k1=0;k2=0;cl=0;
 for(i1=0;i1<4;i1++)             //不用while  避免陷入死循环
 {kgao=0;
   kdi=0; 
  
   k1=gao();
   delay_ms(16);
   kgao=0;
   kdi=0;
   
   k2=gao();
  if(k1==k2)
   {kk=k1;cl=1; return kk;}
  }
 if(cl==0)
 {kk=998;return kk;}
 return kk;                     //这里为假设   ee     ee为读取故障        (31,5)
}

u16 gao(void) 
{    u8 i,i3;
bit cl2f=0; 
bit clf=0;
for(i=0;i<10;i++)                    //不陷入死循环
{delay_ms(3);
if(!YDclk)                            //高5位输入
{
 kgao=0;
 _nop_();
if(YD1)
     {kgao<<=1;
      kgao=(kgao|1);}
      else
      kgao<<=1;
    _nop_();
 if(YD2)
     {kgao<<=1;
      kgao=(kgao|1);}
      else
      kgao<<=1;
 _nop_();
 if(YD3)
     {kgao<<=1;
      kgao=(kgao|1);}
      else
      kgao<<=1;
 _nop_();
 if(YD4)
     {kgao<<=1;
      kgao=(kgao|1);}
      else
      kgao<<=1;
 _nop_();
 if(YD5)
     {kgao<<=1;
      kgao=(kgao|1);}
      else
      kgao<<=1;
 _nop_();
 cl2f=1;break;
 }
if(cl2f==0)
kgao=0;                       //指定33位  错误位    指向ff
}

kdi=kgao;
for(i3=0;i3<10;i3++)                    //不陷入死循环
{delay_ms(3);
if(YDbclk)                                //低5位输入
 {
if(YD1)
     {kdi<<=1;
      kdi=(kdi|1);}
      else
      kdi<<=1;
 
if(YD2)
     {kdi<<=1;
      kdi=(kdi|1);}
      else
      kdi<<=1;
 
if(YD3)
     {kdi<<=1;
      kdi=(kdi|1);}
      else
      kdi<<=1;
 
if(YD4)
     {kdi<<=1;
      kdi=(kdi|1);}
      else
      kdi<<=1;
 
if(YD5)
     {kdi<<=1;
      kdi=(kdi|1);}
      else
      kdi<<=1;
 
 clf=1;
 return kdi;
 } }
if(clf==0)
kdi=1;return kdi;                           //指定33位  错误位    指向ff
}         
/******************************************************************************************************************/
三菱代码.c

 

#ifndef __SL_XIANSHI_H
#define __SL_XIANSHI_H//__sl_xianshi_H
#include    "unstc15.h"
void    GPIOxianshi(void);//初始化io口
bit tingyong(void);//只有显示停用显1,其他全部正常显0  ;
bit yichang(void);//只要不是自动,全变1
bit bianhua(void);//当显示有变化时,显1(包括停用)    ;做实时监控时使用
void ztsx_sxzt(void); //先状态,后上下;代码含义看程序     直接两位代码
void Sendlouxian(void);//显示楼层 直接显示楼层
#endif
V三菱外呼.h代码

 

posted on 2018-05-13 03:36  爱学习的蝈蝈  阅读(2518)  评论(0编辑  收藏  举报

导航