三菱电梯外呼小板研究(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 測試80x00,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, //10xff,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 //180xff,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 //10xff,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 //340xff,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, //50xff,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 //1b0xff,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, //70xff,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=-20x22,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, //90xff,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 //100xff,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 //1d0xff,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 //160xff,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, //130xff,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 //1e0xff,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, //150xff,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 //210x11,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, //170xff,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 //290xff,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, //190xff,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 //250xff,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, //210xff,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 //2c0xff,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, //230xff,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 //030x33,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, //250xff,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 //a0xff,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, //270xff,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 //70xff,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, //290xff,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 //f0xff,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 //9970xff,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(); //讀取停用值 keztif(kezt==5)return 0;elsereturn 1; } bit tingyong(void) { //bit key;//key由接受指令控制(這里因為沒有加入處理占時自定義) state_sxzt(); //讀取停用值 keztif(kezt==4)return 1;elsereturn 0; }bit bianhua(void) //啟動網絡發送標志位,一旦樓顯數據變化。發送 { state_sxzt(); //讀取kezt keudp1zt=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);}elsekezt<<=1;_nop_();if(Y2){kezt<<=1;kezt=(kezt|1);}elsekezt<<=1;_nop_();if(Y3){kezt<<=1;kezt=(kezt|1);}elsekezt<<=1;_nop_();/****************上下*************************/keud=0;_nop_(); if(Y4){keud<<=1;keud=(keud|1);}elsekeud<<=1;_nop_();if(Y5){keud<<=1;keud=(keud|1);}elsekeud<<=1;_nop_();return kezt,keud; } /***********對pic解碼處理***********************************************************************************///事實顯示主要處理函數 (顯示十六進制進制數值) u16 duqu(void) {kk=0;if(!CLKERROR()){kk=999;} //66 這里為假設值 (實際ef要測) ef時鐘故障 (31 4)elsechuli(); 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;elsereturn 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);}elsekgao<<=1;_nop_();if(YD2){kgao<<=1;kgao=(kgao|1);}elsekgao<<=1;_nop_();if(YD3){kgao<<=1;kgao=(kgao|1);}elsekgao<<=1;_nop_();if(YD4){kgao<<=1;kgao=(kgao|1);}elsekgao<<=1;_nop_();if(YD5){kgao<<=1;kgao=(kgao|1);}elsekgao<<=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);}elsekdi<<=1;if(YD2){kdi<<=1;kdi=(kdi|1);}elsekdi<<=1;if(YD3){kdi<<=1;kdi=(kdi|1);}elsekdi<<=1;if(YD4){kdi<<=1;kdi=(kdi|1);}elsekdi<<=1;if(YD5){kdi<<=1;kdi=(kdi|1);}elsekdi<<=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代碼?
轉載于:https://www.cnblogs.com/chenfeiguoguo/p/9030859.html
總結
以上是生活随笔為你收集整理的三菱电梯外呼小板研究(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【俗话编程】什么是对象?
- 下一篇: MySql 查询比其中某一位讲师工资少的