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

📄 common_data.c

📁 一整套电梯控制器源程序
💻 C
字号:
#include <AT89X52.H>
#include <absacc.h>
#include <intrins.h>
#include <stdio.h>

#define EXTERN extern
#define uchar unsigned char
#define uint unsigned int


#define TIMER_FUNC_NUM          60      //功能切换间隔计数               3s
#define TIMER_SUBFUNC_NUM       4       //子功能切换间隔计数             200ms
#define TIMER_FILTER_NUM        2       //开入点滤波计数                 100ms
#define TIMER_SUBTOPAR_NUM      60      //"子功能切换"转为"功能切换"计数 3s
#define TIMER_ONELINE_NUM		1		//滚动时一行的保留时间			 100ms
#define TIMER_NOCANDATA_NUM     4       //无CAN数据计数                  200ms
#define TIMER_REPORT_NUM        80      //报站持续时间                   4s
#define FUNC_NUM                7       //功能数

#define PA377  XBYTE[((P2&0x60)|0x9e)*256+P2]
#define PB377  XBYTE[((P2&0x60)|0x9d)*256+P2]
#define PC377  XBYTE[((P2&0x60)|0x9b)*256+P2]
#define PD377  XBYTE[((P2&0x60)|0x97)*256+P2]
#define PE377  XBYTE[((P2&0x40)|0x9F)*256+P2]
#define PF377  XBYTE[((P2&0x20)|0x9F)*256+P2]

#define FLOOR_DISP_BYTENUM   15  // 显示楼层缓冲区对应字节数
#define DIRECT_DISP_BYTENUM  15  // 显示方向缓冲区对应字节数

//----------------------------------显示用----------------------------------//
uchar       m_cSrcDirect;       //方向行缓冲区
uchar       m_cAsciiHigh;       //显示楼层的高字符
uchar       m_cAsciiLow;        //显示楼层的低字符
uchar       m_cSrcFloorHigh;    //楼层高字符行缓冲区
uchar       m_cSrcFloorLow;     //楼层低字符行缓冲区
uchar       m_cLineIdx;         //行索引(自上而下0-14)
uchar       m_c15_16singledoubleFlg;                  //0:单字 1:双字
/*
uchar code PR[13][15]={ {0xFF,0x83,0x01,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x01,0x83,0xFF}, // '0'
                        {0xFF,0xE7,0xE3,0xE1,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xFF}, // '1'
                        {0xFF,0x83,0x01,0x39,0x3F,0x3F,0x9F,0xCF,0xE7,0xF3,0xF9,0xF9,0x01,0x01,0xFF}, // '2'
                        {0xFF,0x83,0x01,0x39,0x3F,0x3F,0x8F,0x8F,0x3F,0x3F,0x3F,0x39,0x01,0x83,0xFF}, // '3'
                        {0xFF,0x9F,0x8F,0x87,0x93,0x99,0x99,0x01,0x01,0x9F,0x9F,0x9F,0x9F,0x9F,0xFF}, // '4'
                        {0xFF,0x01,0x01,0xF9,0xF9,0x81,0x01,0x3F,0x3F,0x3F,0x3F,0x39,0x01,0x83,0xFF}, // '5'
                        {0xFF,0x83,0x01,0x39,0xF9,0xF9,0x81,0x01,0x39,0x39,0x39,0x39,0x01,0x83,0xFF}, // '6'
                        {0xFF,0x01,0x01,0x3F,0x9F,0xCF,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xFF}, // '7'
                        {0xFF,0x83,0x01,0x39,0x39,0x39,0x83,0x83,0x39,0x39,0x39,0x39,0x01,0x83,0xFF}, // '8'
                        {0xFF,0x83,0x01,0x39,0x39,0x39,0x01,0x03,0x3F,0x3F,0x3F,0x39,0x01,0x83,0xFF}, // '9'
    //                  {0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 'A'  //暂时未用
                        {0xFF,0x81,0x01,0x39,0x39,0x39,0x81,0x81,0x39,0x39,0x39,0x39,0x01,0x81,0xFF}, // 'B'
    //                  {0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 'C'  //暂时未用
    //                  {0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 'D'  //暂时未用
    //                  {0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 'E'  //暂时未用
                        {0xFF,0x01,0x01,0xF9,0xF9,0xF9,0x81,0x81,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xFF}, // 'F'
                        {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, // '-'
                      };
//uchar code PRDUp[15]   = {0x1F,0x1F,0x1F,0x1B,0x11,0x0A,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1F,0x1F,0x1F};
//uchar code PRDDown[15] = {0x1F,0x1F,0x1F,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x0A,0x11,0x1B,0x1F,0x1F,0x1F};
uchar code PRDUp[15]   = {0x1F,0x1F,0x1F,0x1B,0x11,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x1F,0x1F};
uchar code PRDDown[15] = {0x1F,0x1F,0x1F,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x11,0x1B,0x1F,0x1F};
*/
uchar code PR[13][16]={ {0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF}, // '0'
                        {0xFF,0xFF,0xF7,0xF3,0xF5,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF}, // '1'
                        {0xFF,0xFF,0xC3,0xBD,0xBD,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFD,0xFD,0x81,0xFF,0xFF}, // '2'
                        {0xFF,0xFF,0xC3,0xBD,0xBD,0xBF,0xBF,0xC7,0xBF,0xBF,0xBF,0xBD,0xBD,0xC3,0xFF,0xFF}, // '3'
                        {0xFF,0xFF,0xEF,0xE7,0xE7,0xEB,0xED,0xEE,0xEE,0x80,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF}, // '4'
                        {0xFF,0xFF,0x83,0xFD,0xFD,0xFD,0xFD,0xC3,0xBF,0xBF,0xBF,0xBF,0xBD,0xC3,0xFF,0xFF}, // '5'
                        {0xFF,0xFF,0xC3,0xBD,0xFD,0xFD,0xFD,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF}, // '6'
                        {0xFF,0xFF,0x81,0xBF,0xBF,0xDF,0xEF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF}, // '7'
                        {0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xC3,0xBD,0xBD,0xBD,0xBD,0xBD,0xC3,0xFF,0xFF}, // '8'
                        {0xFF,0xFF,0xC3,0xBD,0xBD,0xBD,0xBD,0xC3,0xBF,0xBF,0xBF,0xBF,0xBD,0xC3,0xFF,0xFF}, // '9'
    //                  {0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 'A'  //暂时未用
                        {0xFF,0xFF,0xC1,0xBD,0xBD,0xBD,0xBD,0xC1,0xBD,0xBD,0xBD,0xBD,0xBD,0xC1,0xFF,0xFF}, // 'B'
    //                  {0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 'C'  //暂时未用
    //                  {0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 'D'  //暂时未用
    //                  {0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 'E'  //暂时未用
                        {0xFF,0xFF,0x81,0xFD,0xFD,0xFD,0xFD,0xC1,0xFD,0xFD,0xFD,0xFD,0xFD,0xFD,0xFF,0xFF}, // 'F'
                        {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}, // '-'
                      };
//uchar code PRDUp[15]   = {0x1F,0x1F,0x1F,0x1B,0x11,0x0A,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x1F,0x1F,0x1F};
//uchar code PRDDown[15] = {0x1F,0x1F,0x1F,0x1B,0x1B,0x1B,0x1B,0x1B,0x1B,0x0A,0x11,0x1B,0x1F,0x1F,0x1F};
uchar code PRDUp[16]   = {0xFF,0xFF,0xFF,0xF7,0xE3,0xD5,0xB6,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,0xFF};
uchar code PRDDown[16] = {0xFF,0xFF,0xFF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xB6,0xD5,0xE3,0xF7,0xFF,0xFF,0xFF};
uchar code PR_FIRE[15][2]={{0xE0,0x7F},{0xE0,0x7F},{0xF9,0xFF},{0xF9,0xFF},{0xE0,0x7F},{0xC0,0x3F},{0x80,0x19},{0x80,0x19},{0x80,0x01},{0x80,0x01},{0x80,0x19},{0xC0,0x19},{0xE0,0x3F},{0xC0,0x1F},{0xFF,0xFF}};
uchar code PR_REPAIRE[15][2]={{0xFF,0xFF},{0xFF,0xFF},{0xFF,0xFF},{0xFF,0xE3},{0xFF,0xC1},{0xFF,0x81},{0x80,0x1F},{0x80,0x1F},{0x80,0x1F},{0xFF,0x81},{0xFF,0xC1},{0xFF,0xE3},{0xFF,0xFF},{0xFF,0xFF},{0xFF,0xFF}};
uchar code PR_LOCK[15][2]={{0xFF,0xFF},{0xF8,0x1F},{0xF0,0x0F},{0xF3,0xCF},{0xF3,0xCF},{0xF3,0xCF},{0xC0,0x03},{0xC0,0x03},{0xC0,0x03},{0xC0,0x03},{0xC0,0x03},{0xC0,0x03},{0xC0,0x03},{0xC0,0x03},{0xFF,0xFF}};
uchar code PR_OVERLOAD[15][3]=
        {{0x1F,0xFF,0xFF},{0x1F,0xFF,0xFF},{0x1B,0xE1,0xD5},{0x1B,0x6B,0xB0},{0x00,0xEB,0xF5},
	    {0x1B,0x25,0x00},{0x10,0xFE,0xF6},{0x1B,0x21,0xB0},{0x02,0x6D,0xD5},{0x1A,0x6D,0xE8},
	    {0x1A,0xE1,0x6D},{0x18,0x3F,0x50},{0x06,0xE0,0x3D},{0x1F,0xFF,0xFF},{0x1F,0xFF,0xFF}};
//----------------------------------5045用----------------------------------------//
struct data5
{uchar cF0;//设定F0,设定控制器号(0~7), 显示(1-8)
 uchar cF1;//设定F1, 设定层楼数(0~47), 显示(1-48)
 uchar cF2;//设定F2, 设定显示方式(0~2), 显示(1-3)
 uchar cF3;//设定F3, 设定显示方式(0~1), 显示(0-1)
 uchar cF4;//设定F4, 设定显示方式(0~1), 显示(0-1)
 uchar cF5;//设定F5, 设定距地楼层数(-8~47), 显示(-8-47),报站专用
 uchar cF6;//设定F6, 设定始终居中显示(0~1),显示(0-1),1并非始终居中,0始终居中
 uchar cF7;//设定F7, 设定语音报站输出高有效/低有效(0~1),显示(0~1)  0--低有效 1--高有效
};
#define DATA5 struct data5 

DATA5 data5045;
//sbit SO=P3^4;   //5045输出
//sbit SI=P3^2;   //5045输入
//sbit SCK=P3^3;  //5045时钟
//sbit CS=P3^5;   //5045片选
uchar code WREN_INST=0X06;     // Write enable latch instruction (WREN)
uchar code WRDI_INST=0X04;     // Write disable latch instruction (WRDI)
uchar code WRSR_INST=0X01;     // Write status register instruction (WRSR)
uchar code RDSR_INST=0X05;     // Read status register instruction (RDSR)

//写入25045的先导字,应当为0000A010,其中的A为写入25045的高位地址
//将此WRITE_INST和写入高位地址相或后即为正确的写先导字
uchar code WRITE_INST=0X02;    // Write memory instruction (WRITE)

//读出25045的先导字,应当为0000A011,其中的A为读出25045的高位地址
//将此READ_INST和读出高位地址相或后即为正确的读先导字
uchar code READ_INST=0X03;     // Read memory instruction (READ)

uint code BYTE_ADDR=0X55;      // Memory address for byte mode operations
uchar code BYTE_DATA=0X11;     // Data byte for byte write operation
uint  code PAGE_ADDR=0X1F;     // Memory address for page mode operations 页面写入的其始地址
uchar code PAGE_DATA1=0X22;    // 1st data byte for page write operation
uchar code PAGE_DATA2=0X33;    // 2nd data byte for page write operation
uchar code PAGE_DATA3=0X44;    // 3rd data byte for page write operation

//这是状态寄存器的值,他的意义在于第5,第4位为WDI1,WDI0代表DOG的时间,00为1.4秒,01为600毫秒,10为200毫秒,00为disabled
//第3位和第2位为BL1,BL0,是写保护设置位,00为无保护,01为保护180-1FF,10为保护100-1FF,11为保护000-1FF.第1位为WEL,
//当他为1时代表已经"写使能"设置了,现在可以写了,只读位.第0位为WIP,当他为1时代表正在进行写操作,是只读
uchar code STATUS_REG=0x20;    // Status register,设置DOG时间设置为200毫秒,无写保护

uchar code  MAX_POLL=0x99;     // Maximum number of polls(最大写过程时间,确定25045的最大的写入过程的时间)
uchar code INIT_STATE=0x09;    // Initialization value for control ports
uint code SLIC=0x30;           // Address location of SLIC
uchar m_set5045flg;		 		 // 当设置位为1时,表示前面设置过,此时要重新的写入5045中。 如果没有,则不需要进行这个步骤。 

//----------------------------------can用----------------------------------//
uchar  cCtrlNum[8]={0x15,0x1a,0x13,0x1c,0x16,0x19,0x1b,0x1d};   //控制器号的转换
uchar  whacr0,whacr1;           //sja1000代码(接收标示符)
uchar  whid1,whid2;             //sja1000代码(发送标示符)  
struct rec_data{
uchar  cCurFloor;               //当前楼层数
uchar  cDirect;                 //当前方向(0:下   1:上  0xFF:无)
uchar  cMaxFloor;               //最大楼层数
};
#define REC_DATA struct rec_data 
REC_DATA m_RecData;      //can接收数据
bdata uchar abit;
sbit abit_0=abit^0;
sbit abit_1=abit^1;
sbit abit_2=abit^2;
sbit abit_3=abit^3;
sbit abit_4=abit^4;
sbit abit_5=abit^5;
sbit abit_6=abit^6;
sbit abit_7=abit^7;
/*
uchar time1_count;     //上呼计数
uchar time2_count;     //下呼计数
uchar time3_count;     //锁梯计数
uchar time4_count;     //消防计数
uchar time5_count;     //消防返回计数
uchar time1_flg;       //上呼计数到标记
uchar time2_flg;       //下呼计数到标记
uchar time3_flg;       //锁梯计数到标记
uchar time4_flg;       //消防计数到标记
uchar time5_flg;       //消防返回计数到标记
uchar m_existupcallflg;//上呼存在标记
uchar m_existdowncallflg;//下呼存在标记
*/
uchar time_nocan_count;       //无CAN数据计数(若200ms没有CAN数据则认为应该复位CAN)
uchar time_nocan_flg;         //无CAN数据标志
uchar time_nocan200ms_flg;    //无CAN数据计时到标志

uchar time_report_count;      //报站计数
uchar time_report_flg;        //报站标志
uchar time_report2s_flg;      //报站计时到标志
uchar m_cReportIdx;           //报站索引
//----------------------------------设置功能用----------------------------------//
uchar  m_cFuncCnt;                              //F0-F5标记计数(0-5)
uchar  m_cFuncTimer;                            //功能切换计数器(每2秒切换一次)
uchar  m_cSettingFuncFlg;                       //功能设置标记(标志当前处于F0-F4切换阶段)
uchar  m_cNewFuncFlg;
                                                //显示为(F0:1-8 F1:1-48 F2:1-3 F3:0-1 F4:0-1)
uchar  m_cSubFuncCnt;                           //各功能计数(F0:0-7 F1:0-47 F2:0-2 F3:0-1 F4:0-1)
uchar  m_cSubFuncTimer;                         //功能切换计数器(每500毫秒切换一次)
uchar  m_cSettingSubFuncFlg;                    //子功能设置标记(标志当前处于各功能的子功能设置阶段)
uchar  m_cNewSubFuncFlg;
uchar  m_cMaxSubNum;

uchar  m_cSubToParTimer;
uchar  m_cSubToParLess2sFlg;
//滚动专用
uchar  m_cWholeMoveOKFlg;						//整组移动完成标记(出现新楼层时,进行一组滚动,滚动完成后等待下一新楼层)
uchar  m_cMoveCnt;                              //滚动计数(0-6)
uchar  m_cMoveTimer;                            //滚动计数器(每150ms滚动一次)
uchar  m_cNewLineFlg;                           //新滚动行标记
//六状态
uchar  m_cFireFlg;                              //火警标记    
uchar  m_cRepairFlg;                            //检修标记    
uchar  m_cLockFlg;                              //锁梯标记    
uchar  m_cLockDarkFlg;                          //锁梯变暗标记
uchar  m_cOverloadFlg;                          //超载标记    
uchar  m_cReportFlg;                            //报站触发标记    
uchar  m_cReportingFlg;                         //报站过程标记 2005.03.01

uchar  m_cReportData;

⌨️ 快捷键说明

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