三菱電梯外呼小板研究(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代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM