久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1630|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

AVR M16 樓宇對講主機(jī)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:371859 發(fā)表于 2018-7-15 11:03 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
#include <iom16v.h>
#include <avrdef.h>
#define  uchar unsigned char
#define  uint unsigned int
#define fosc 6000000
#define baud 1200
#define dat164 PB1
#define scl164 PB2
#define ledpow PB0
#define keypow PB3
#define unlock PB4

#pragma data:code
const unsigned char tabopen[]={0xff,0XC8,0X86,0X8C,0XC0};
const unsigned char tabbyby[]={0xff,0x7f,0x7f,0x91,0x83};
const unsigned char tabcall[]={0xff,0xc7,0xc7,0x88,0xC6};
const unsigned char tab1[]={0xff,0xf7,0xfb,0xfd,0xfe,0Xf0,0xf0,0xf1,0xf3,0xf7,0xfF,0X00};
const unsigned char tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x7F,0xc7,0xbf};
const unsigned char tabsp[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8c,0x92};
const unsigned char tabpk[]={0xff,0x86,0xa1,0xa3,0xc6};
const unsigned char tabset[]={0xff,0x7f,0xce,0x86,0x92};
const unsigned char taberr[]={0xff,0x7F,0xAF,0xAF,0x86};
const unsigned char tabcenter[]={0xff,0x7f,0xc8,0x86,0xc6};
const unsigned char tabof1[]={0xff,0XC0,0x7f,0x0E,0XC0};
const unsigned char tabon1[]={0xff,0xF9,0x7f,0X48,0XC0};
const unsigned char tabnew[]={0xff,0x7f,0xc1,0X86,0XC8};
const unsigned char tabagai[]={0xff,0x4f,0x88,0xC2,0x88};
const unsigned char tabssof[]={0xff,0x8e,0XC0,0x92,0x92};
const unsigned char tabsson[]={0xff,0XC8,0XC0,0x92,0x92};
const unsigned char tabgood[]={0xff,0xa1,0xc0,0xc0,0x90};
#pragma data:data

unsigned char spdisplay[6];  //對講倒計時
unsigned char display1[6];  //待機(jī)顯示
unsigned char display[6];  //顯示緩存
unsigned char tabdat[8];   //標(biāo)串口發(fā)送數(shù)據(jù)
unsigned char rxdat[8];   //標(biāo)串口接收數(shù)據(jù)
unsigned char keynum[10];  //鍵值
unsigned char zhujima[8]; //主機(jī)地址碼

unsigned char key,key1,s60b=60,timeout,d=0,spesc,syspkey,roomp,s8556;

unsigned int k,f,j,sb;                                       //f:待機(jī)顯示累加 k:按鍵數(shù)量

/*********************************模擬串口定義***********************************************/

#define GET_RX() (PIND & (1<<PIND3))     /* 接收電平值 */
#define SET_TX() (PORTD |= (1<<PORTD4))  /* 發(fā)送高電平 */
#define CLR_TX() (PORTD &= ~(1<<PORTD4)) /* 發(fā)送低電平 */

unsigned char rx_fifo[10]; /* 仿串口接收數(shù)據(jù) */
unsigned char tx_fifo[10]; /* 仿串口發(fā)送數(shù)據(jù) */
unsigned char rx_pos;           /* 隊(duì)列中最后接收數(shù)據(jù)位置 */
unsigned char read_pos;         /* 隊(duì)列中最后讀取數(shù)據(jù)位置 */
unsigned char tx_pos;           /* 隊(duì)列中最后發(fā)送數(shù)據(jù)位置 */
unsigned char write_pos;        /* 隊(duì)列中最后寫入數(shù)據(jù)位置 */
unsigned char rx_buf;           /* 接收字節(jié)緩沖 */
unsigned char tx_buf;           /* 發(fā)送字節(jié)緩沖 */
unsigned char rx_bit;  /* 接收幀位計數(shù) */
unsigned char tx_bit;  /* 發(fā)送幀位計數(shù)volatile */
unsigned char turn;

/* 數(shù)據(jù)幀結(jié)構(gòu) frame */
flash enum xx_bit {BIT_0 = 0,BIT_1,BIT_2,BIT_3,BIT_4,BIT_5,BIT_6,BIT_7,BIT_STOP,BIT_IDLE,BIT_START,};

/**********************************模擬串口程序*********************************************/

/* 變量初始化 */
void var_init(void)
{
    rx_pos = 0;
    read_pos = 0;
    tx_pos = 0;
    write_pos = 0;
    rx_bit = BIT_IDLE;  /* 定義初始收發(fā)位為空閑位 */
    tx_bit = BIT_IDLE;
    turn = 0;
}

/* 配置定時器 */
void timer0_init(void)
{
    TCCR0 = ((1<<CS00)|(1<<CS01)|(1<<WGM01)); /*//64分頻  CTC模式 */
    TIMSK = (1<<OCIE0);               /* 比較匹配中斷使能 */
    OCR0 = 78; /* 比較值77、78,104,103(8M),定時器頻率: 6.0MHz/((78+1)*64) =1186.7 Hz */
    TCNT0 = 0;
}


/* 從接收隊(duì)列讀1字節(jié) */
unsigned char rx_byte(void)
{      
           if(rx_pos!=0){return;}
         if (++read_pos == 10)
            read_pos = 0;
                        return rx_fifo[read_pos];
}


/* 向發(fā)送隊(duì)列寫1字節(jié) */
void tx_byte(void)//(unsigned char data)
{
    if (++write_pos == 10)
        write_pos = 0;
    tx_fifo[write_pos];// = data;
}



/* 定時器讀周期處理函數(shù) */
void rx_turn_isr(void)
{  
    switch (rx_bit) {           /* 根據(jù)當(dāng)前幀位執(zhí)行相應(yīng)操作 */
    case BIT_IDLE:
        if (!GET_RX())          /* 檢測起始位, 以判斷是否有數(shù)據(jù)待收 */
            rx_bit = BIT_0;
        break;
    case BIT_0:                 /* 開始接收數(shù)據(jù) */
    case BIT_1:
    case BIT_2:
    case BIT_3:
    case BIT_4:
    case BIT_5:
    case BIT_6:
    case BIT_7:
        if (GET_RX())           /* 根據(jù)端口電平, 寫接收緩沖相應(yīng)位 */
            rx_buf |= (1 << rx_bit);
        else
            rx_buf &= ~(1 << rx_bit);
        rx_bit++;
        break;
    case BIT_STOP:
        if (GET_RX()) { /* 檢測停止位, 出現(xiàn)幀錯誤則丟棄數(shù)據(jù), 否則寫入接收隊(duì)列 */
            if (++rx_pos == 10)
                                rx_pos = 0;
            rx_fifo[rx_pos] = rx_buf;
        }
        rx_bit = BIT_IDLE;
               
        break;
    }
}


/* 定時器寫周期處理函數(shù) */
void tx_turn_isr(void)
{
    switch (tx_bit) {           /* 根據(jù)當(dāng)前幀位執(zhí)行相應(yīng)操作 */
    case BIT_START:
        CLR_TX();               /* 輸出起始位 */
        tx_bit = BIT_0;
        break;
    case BIT_0:                 /* 開始發(fā)送數(shù)據(jù) */
    case BIT_1:
    case BIT_2:
    case BIT_3:
    case BIT_4:
    case BIT_5:
    case BIT_6:
    case BIT_7:
        if (tx_buf & (1 << tx_bit)) /* 根據(jù)待發(fā)數(shù)據(jù)位信息, 控制發(fā)送端電平 */
            SET_TX();
        else
            CLR_TX();
        tx_bit++;
        break;
    case BIT_STOP:
    case BIT_IDLE:
        SET_TX();
        if (tx_pos != write_pos) { /* 檢測是否有待發(fā)數(shù)據(jù), 無則發(fā)送空閑位 */
            if (++tx_pos == 10)
               tx_pos = 0;
                 //tx_buf = tx_fifo[tx_pos];
                // tx_bit = BIT_START;
                                // turn=0;
                                // delay1(10);
                                // break;}
                    tx_buf = tx_fifo[tx_pos];
            tx_bit = BIT_START;
        } else {
            tx_bit = BIT_IDLE;
        }
               
        break;
    }
}

/* 定時器中斷處理函數(shù) */
#pragma interrupt_handler timer0_isr:20
void timer0_isr(void)
{

    switch (turn) {
   case 0:               ///* 讀周期 */
        rx_turn_isr();
        break;
    case 1:               /* 寫周期 */
        tx_turn_isr();
        break;
    }
}

/***********************************標(biāo)串口配置****************************************/

void USART_Init(void)  //串口初始化
{
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允許收發(fā),打開接收中斷
UBRRL=(fosc/16/(baud+1))%256;   //設(shè)置波特率寄存器0xa0 ;
UBRRH=(fosc/16/(baud+1))/256;    //0x01 ;
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位數(shù)據(jù)+1位STOP
}

void USART_Tx(uchar data) //發(fā)送采用查詢方式
{TIMSK = ~(1<<OCIE0);
  while(!(UCSRA&(1<<UDRE)));//上次發(fā)送有沒有完成
  UDR=data;                       //發(fā)送數(shù)據(jù)
  NOP();
UCSRA |= (1<<6);
TIMSK = (1<<OCIE0);
}

#pragma interrupt_handler uart0_rx:12
void uart0_rx(void)
{ uint y;
TIMSK = ~(1<<OCIE0);
   for(y=0;y<200;y++)
   {
    if(UCSRA&(1<<RXC))//有沒有接收到數(shù)據(jù)
    {
    rxdat[d]=UDR;   
    d++;
    if(rxdat[0]==0){d=0;}
    if(d==8)
      {d=0;
       if(rxdat[0]+rxdat[1]+rxdat[2]+rxdat[3]+rxdat[4]+rxdat[5]+rxdat[6]!=rxdat[7])
       {d=0;datrest();}
      }
     }
           NOP();
       NOP();
       NOP();
  }
  d=0;
  TIMSK = (1<<OCIE0);
}

/*************************************寫內(nèi)部eeprom配置************************************/

void write_eeprom(uint add,uchar dat)
{
  while(EECR&(1<<EEWE));                      //等待上一次寫操作結(jié)束
  EEAR=add;
  EEDR=dat;                                   //設(shè)置地址和數(shù)據(jù)寄存器
  EECR|=(1<<EEMWE);                           //置位EEWME,硬件清零
  EECR|=(1<<EEWE);                            //置位EEWE用來啟動寫操作,硬件清零
}

uchar read_eeprom(uint add)
{
  while(EECR&(1<<EEWE));                      //等待上一次寫操作結(jié)束
  EEAR=add;
  EECR|=(1<<EERE);                            //置位EERE來啟動讀操作
  return(EEDR);
}


/*********************************端口初始化**********************************************/

void port_init(void)
{
  DDRA=0X00;              //顯示
  PORTA=0X0F;
  DDRB=0X1F;              //164\ledpow\keypow\unlock
  PORTB=0X07;
  DDRD|=BIT(5);           //蜂鳴器
  PORTD&=~BIT(5);

  DDRD &= ~BIT(3);         /* PD3輸入 仿串口 */
  DDRD |= BIT(4);          /* PD4輸出 仿串口 */
  PORTD |= (1<<PORTD4);

  DDRB|=BIT(5)|BIT(4)|BIT(3);
  DDRD|=BIT(7)|BIT(6);
  PORTB&=~BIT(5)|BIT(4)|BIT(3);
  PORTD&=~BIT(7)|BIT(6);

}

//**********************仿串延時約2MS********************************************

void delay1(uint ms)      
{ uint i,jj;
for(i=0;i<ms;i++)
{for(jj=0;jj<12000;jj++);}
}

//**********************仿串延時約2MS********************************************

void delay2(uint ms)      
{ uint i,jj;
for(i=0;i<ms;i++)
{for(jj=0;jj<10;jj++)
   {xinshi();}}
}

void delay(uint ms)      
{
uint i,jj;
for(i=0;i<ms;i++)
{for(jj=0;jj<750;jj++);}
}

//*************************************************164發(fā)送顯示數(shù)據(jù)

void sendbyte(uchar displaybyte)               
{ uchar i;
  for(i=0;i<8;i++)
  {
    if(displaybyte&0x80)
      {PORTB|=BIT(dat164);}
    else
      {PORTB&=~BIT(dat164);}
       displaybyte <<= 1;
       PORTB&=~BIT(scl164);
       NOP();
       NOP();
       NOP();
       PORTB|=BIT(scl164);
       NOP();
       NOP();
       NOP();
  }
}


//****************************************************串口接收緩沖初始化
void datrest(void)
{
   uchar i;
   for(i=0;i<8;i++)
   {rxdat[i]=0;}
    d=0;
}

//***************************************************仿串口接收緩沖初始化
void datrest1(void)
{ uchar i;
  TIMSK=~(1<<OCIE0);           
  timer0_init();
  var_init();
  TIMSK = (1<<OCIE0);
  for(i=0;i<10;i++)
  {rx_fifo[i]=0x00;}
}

//****************************************************倒計時顯示緩沖
void spyiwei(void)   
{
spdisplay[4]=tabsp[11];
spdisplay[3]=tabsp[10];
spdisplay[2]=tabsp[s60b/10];
spdisplay[1]=tabsp[s60b%10];
}


//****************************************************待機(jī)顯示
void xinshiw(void)  
{
    f++;
        if(f<1000)
        {
        sendbyte(tab[16]);
        sendbyte(tab[16]);
        sendbyte(tab[16]);
        sendbyte(tab[16]);
        PORTB&=~BIT(ledpow);
        delay(1);
        PORTB|=BIT(ledpow);
        }
        else
         {if(f>999&&f<2000)
            {       
             PORTB|=BIT(ledpow);
             delay(1);
             }
                else
                 {
                  f=0;
                  }
          }
}

//******************************************************輸入操作顯示
void xinshi(void)   
{     uchar x;
          for(x=4;x>0;x--)
          {
           sendbyte(display[x]);}
           PORTB&=~BIT(ledpow);
           delay(1);
           PORTB|=BIT(ledpow);
}

//—————————————————————————特定符號操作顯示
void xinshi1(void)   
{     uchar x;
          for(x=4;x>0;x--)
          {
           sendbyte(display1[x]);}
           PORTB&=~BIT(ledpow);
           delay(1);
           PORTB|=BIT(ledpow);
}

//*************************************************call字符顯示數(shù)據(jù)發(fā)送
void call(void)
{
  unsigned char x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabcall[x]);
   }
   PORTB&=~BIT(ledpow);
   delay(1);
   PORTB|=BIT(ledpow);
}          

//**************************************************  60秒對講倒計時顯示數(shù)據(jù)發(fā)送
void sp60(void)
{  uchar x;
  sb++;
   for(x=4;x>0;x--)
     {
      spyiwei();
      sendbyte(spdisplay[x]);
          }
      PORTB&=~BIT(ledpow);  
      delay(1);
      PORTB|=BIT(ledpow);
  if(sb==500)
    {sb=0;
     s60b--;
         if(s60b==0){s60b=60;timeout=1;}
         }              
}

//******************************************************開鎖顯示數(shù)據(jù)發(fā)送
void open(void)   
{ uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabopen[x]);
   }
   PORTB|=BIT(4);
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

//*********************************************************結(jié)束顯示數(shù)據(jù)發(fā)送
void byby(void)   
{ uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabbyby[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

//**********************************************************顯示鍵值與數(shù)據(jù)移位  
void xinshiyiwei(void)   
{   
    display[4]=display[3];
    display[3]=display[2];
        display[2]=display[1];
        display[1]=tab[key];
               
        keynum[9]=keynum[8];
        keynum[8]=keynum[7];
    keynum[7]=keynum[6];
        keynum[6]=keynum[5];
    keynum[5]=keynum[4];
    keynum[4]=keynum[3];
        keynum[3]=keynum[2];
    keynum[2]=keynum[1];
    keynum[1]=keynum[0];
    keynum[0]=key;
       
        k++;        //按鍵數(shù)
        j=0;    //時間累加清零
}

//********************************************************顯示“————”與數(shù)據(jù)移位
void xinshiyiwei1(uchar tb)   
{   
    display1[4]=display1[3];
    display1[3]=display1[2];
        display1[2]=display1[1];
        display1[1]=tab[tb];
       
}

//************************************************出錯"ERR"顯示字符數(shù)據(jù)發(fā)送
void pkeyerr(void)
{
  uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(taberr[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

//**********************************************CEN顯示字條數(shù)據(jù)發(fā)送
void center(void)
{
  uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabcenter[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

//************************************************出錯"on.1"顯示字符數(shù)據(jù)發(fā)送
void ON1(void)
{
  uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabon1[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

//************************************************出錯"of.1"顯示字符數(shù)據(jù)發(fā)送
void OF0(void)
{
  uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabof1[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

void new(void)
{
  uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabnew[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

void agai(void)
{
  uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabagai[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

void ssof(void)
{
  uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabssof[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

void sson(void)
{
  uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabsson[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}

void good(void)
{
uchar x;
  for(x=4;x>0;x--)
  {
   sendbyte(tabgood[x]);
   }
  PORTB&=~BIT(ledpow);  
  delay(1);
  PORTB|=BIT(ledpow);
}
//***********************************************************顯示緩沖初始化
void xinshiint(void)  
{
  display[1]=0x7f;
  display[2]=0x7f;
  display[3]=0x7f;
  display[4]=0x7f;
}

//***********************************************************鍵盤掃描

uchar anjianon(void)  //按鍵有無按下
{ uchar temp;
    DDRA=0XFF;
    PORTA=0X0f;
        DDRA=0Xf0;
    temp=PINA;
        if(temp!=0x0f)
        delay(1);
        temp=PINA;
        if(temp!=0x0f){DDRA=0XFF;return 1;}
        else{DDRA=0XFF;return 0;}
}

void anjian(void)          //鍵值查找
{   uchar temp,i=0Xf7,a;

        if(anjianon())
        {PORTD|=BIT(5);
         delay(5);
         PORTD&=~BIT(5);
         if(anjianon())
          {
            do{
                        i=(i<<1|i>>7);
                        PORTA=i;
                        DDRA=0Xf0;
                        temp=PINA;
                        a=temp&0x0f;
                        }
                while(a==0x0f);
               
                switch(temp)
                {
                         case(0X77):key=15;break;//f
                         case(0X7b):key=14;break;//e
                         case(0X7d):key=13;break;//d密碼
                         case(0X7e):key=12;break;//c

                         case(0Xb7):key=11;break;//b#確認(rèn)
                         case(0Xbb):key=9;break;//9
                         case(0Xbd):key=6;break;//6
                         case(0Xbe):key=3;break;//3

                         case(0Xd7):key=0;break;//0
                         case(0Xdb):key=8;break;//8
                         case(0Xdd):key=5;break;//5
                         case(0Xde):key=2;break;//2

                         case(0Xe7):key=10;break;//a取消
                         case(0Xeb):key=7;break;//7
                         case(0Xed):key=4;break;//4
                         case(0Xee):key=1;break;//1
                        }                       
               }
                   while(anjianon())
                   {delay(100);}
                        xinshiyiwei();
                        xinshiyiwei1(18);
                 }
        }
               
void anjian1(void)          //鍵值查找
{   uchar temp,i=0Xf7,a;

        if(anjianon())
        {PORTD|=BIT(5);
         delay(5);
         PORTD&=~BIT(5);
         if(anjianon())
          {
            do{
                        i=(i<<1|i>>7);
                        PORTA=i;
                        DDRA=0Xf0;
                        temp=PINA;
                        a=temp&0x0f;
                        }
                while(a==0x0f);
                switch(temp)
                   {
                    case(0Xe7):key1=10;break;//取消
                        case(0X7e):key1=12;break;//c
                        case(0Xb7):key1=11;break;//b
                        default: ; break;
                   }                       
           }
     }
  }

//****************************************************************標(biāo)串發(fā)送數(shù)據(jù)

void senddata(void)   
{  uchar i,temp;
     for(i=0;i<8;i++)
         {temp=tabdat[i];
          USART_Tx(temp);               
          }
}
       
//*******************************************************************發(fā)送仿串?dāng)?shù)據(jù)
void senddata1(void)   
{  uchar i;
     turn=1;
         delay1(5);
         for(i=10;i>0;i--)
         {tx_byte();
         delay1(1);}
}

//*****************************************************************呼叫管理中心數(shù)據(jù)格式  
void  sendcenter(uchar odd)
{     uchar i;
      for(i=0;i<6;i++)
          {read_eeprom(i+100);
           zhujima[i]=EEDR;
           }
           tx_fifo[1]=odd;//呼叫碼
           tx_fifo[2]=0x00;
           tx_fifo[3]=0x00;
           tx_fifo[4]=0x00;
           tx_fifo[5]=0x00;
           tx_fifo[6]=zhujima[5]<<4|zhujima[4];
           tx_fifo[7]=zhujima[3]<<4|zhujima[2];
           tx_fifo[8]=zhujima[1]<<4|zhujima[0];
           tx_fifo[9]=0x00;//zhujima[1]<<4|zhujima[0];
           tx_fifo[0]=0xff&(tx_fifo[9]+tx_fifo[1]+tx_fifo[2]+tx_fifo[3]+tx_fifo[4]+tx_fifo[5]+tx_fifo[6]+tx_fifo[7]+tx_fifo[8]) ;
          
}

//*************************************************************************主機(jī)編碼數(shù)據(jù)格式
//發(fā):88 樓棟 單元 主副 00 00 00 00 00 加和 回:88 樓棟 單元 00 04 04 04 00 00 加和  
void  setmaster(void)
{  
           tx_fifo[1]=0x88;   //命令碼
           tx_fifo[2]=keynum[5]<<4|keynum[4];
           tx_fifo[3]=keynum[3]<<4|keynum[2];
           tx_fifo[4]=keynum[1]<<4|keynum[0];
           tx_fifo[5]=0x00;
           tx_fifo[6]=0x00;
           tx_fifo[7]=0x00;
           tx_fifo[8]=0x00;
           tx_fifo[9]=0x00;
           tx_fifo[0]=0xff&(tx_fifo[9]+tx_fifo[1]+tx_fifo[2]+tx_fifo[3]+tx_fifo[4]+tx_fifo[5]+tx_fifo[6]+tx_fifo[7]+tx_fifo[8]) ;
         
}

//***********************************************************************樓外到樓內(nèi)數(shù)據(jù)轉(zhuǎn)換長度
void od_to_id(void)
{
    tabdat[0]=tx_fifo[1];
        tabdat[1]=tx_fifo[2];
        tabdat[2]=tx_fifo[3];
    tabdat[3]=tx_fifo[4];
        tabdat[4]=tx_fifo[5];
    tabdat[5]=tx_fifo[6];
    tabdat[6]=tx_fifo[7];
    tabdat[7]=0xff&(tabdat[0]+tabdat[1]+tabdat[2]+tabdat[3]+tabdat[4]+tabdat[5]+tabdat[6]);

}

//***********************************************************************樓內(nèi)到樓外數(shù)據(jù)轉(zhuǎn)換長度
void id_to_od(void)
{
       tx_fifo[1]=tabdat[0];   //命令碼
           tx_fifo[2]=tabdat[1];
           tx_fifo[3]=tabdat[2];
           tx_fifo[4]=tabdat[3];
           tx_fifo[5]=0x00;             //互通時有不同
           tx_fifo[6]=zhujima[5]<<4|zhujima[4];
           tx_fifo[7]=zhujima[3]<<4|zhujima[2];
           tx_fifo[8]=tabdat[5];
           tx_fifo[9]=tabdat[6];
           tx_fifo[0]=0xff&(tx_fifo[9]+tx_fifo[1]+tx_fifo[2]+tx_fifo[3]+tx_fifo[4]+tx_fifo[5]+tx_fifo[6]+tx_fifo[7]+tx_fifo[8]) ;
          
}

//***********************************************************呼叫分機(jī)數(shù)據(jù)格式
void sendcall(uchar oda)  
{     uchar i;
      for(i=0;i<6;i++)
          {read_eeprom(i+100);
           zhujima[i]=EEDR;
           }
          tabdat[0]=oda;
          tabdat[1]=tabdat[4];
          tabdat[2]=keynum[3]<<4|keynum[2];
      tabdat[3]=keynum[1]<<4|keynum[0];
          tabdat[4]=zhujima[5]<<4|zhujima[4];
      tabdat[5]=0x00;//zhujima[3]<<4|zhujima[2];
      tabdat[6]=zhujima[1]<<4|zhujima[0];
      tabdat[7]=0xff&(tabdat[0]+tabdat[1]+tabdat[2]+tabdat[3]+tabdat[4]+tabdat[5]+tabdat[6]);
}

// *********************樓內(nèi)通用送格式  命令碼(??)+樓棟號+00+00+樓棟號+00+主副號+累加和
void sendclr(void)  
{     uchar i;
      for(i=0;i<6;i++)
          {read_eeprom(i+100); //eeprom 地址100-105為主機(jī)地址碼
           zhujima[i]=EEDR;
           }
          tabdat[1]=tabdat[4];
          tabdat[2]=0x00;
      tabdat[3]=0x00;
          tabdat[4]=zhujima[5]<<4|zhujima[4];
      tabdat[5]=0x00;//zhujima[3]<<4|zhujima[2];
      tabdat[6]=zhujima[1]<<4|zhujima[0];
      tabdat[7]=0xff&(tabdat[0]+tabdat[1]+tabdat[2]+tabdat[3]+tabdat[4]+tabdat[5]+tabdat[6]);
}

//**********************************************************分機(jī)密碼開鎖數(shù)據(jù)格式
void roompass(void)   
{     uchar i;
      for(i=0;i<6;i++)
          {read_eeprom(i+100);
           zhujima[i]=EEDR;
           }
          tabdat[0]=0x19;
          tabdat[1]=zhujima[5]<<4|zhujima[4];
          tabdat[2]=keynum[7]<<4|keynum[6];
      tabdat[3]=keynum[5]<<4|keynum[4];
          tabdat[4]=keynum[3]<<4|keynum[2];
      tabdat[5]=keynum[1]<<4|keynum[0];
      tabdat[6]=0x00;
      tabdat[7]=0xff&(tabdat[0]+tabdat[1]+tabdat[2]+tabdat[3]+tabdat[4]+tabdat[5]+tabdat[6]);
}

//***************************************************************8031門禁格式化數(shù)據(jù)格式
void car8031(void)
{ uchar i;
      for(i=0;i<6;i++)
          {read_eeprom(i+100);
           zhujima[i]=EEDR;
           }
      tabdat[0]=0x48;                          //8031         
          tabdat[1]=zhujima[5]<<4|zhujima[4];
          tabdat[2]=zhujima[3]<<4|zhujima[2];//keynum[7]<<4|keynum[6];
      tabdat[3]=0x00;
          tabdat[4]=keynum[5]<<4|keynum[4];
      tabdat[5]=keynum[3]<<4|keynum[2];
      tabdat[6]=keynum[1]<<4|keynum[0];
      tabdat[7]=0xff&(tabdat[0]+tabdat[1]+tabdat[2]+tabdat[3]+tabdat[4]+tabdat[5]+tabdat[6]);

}

//***********************************************************************8054門禁批量注冊數(shù)據(jù)格式
void car8054(void)
{

     // tabdat[0]=0x46;                          //4a      
          tabdat[1]=0x00;
          tabdat[2]=0x00;
      tabdat[3]=0x00;
          tabdat[4]=0x00;
     // tabdat[5]=0x00;                         //01         
      tabdat[6]=0x00;
      tabdat[7]=0xff&(tabdat[0]+tabdat[1]+tabdat[2]+tabdat[3]+tabdat[4]+tabdat[5]+tabdat[6]);

}

//***********************************************************************8051門禁單個注冊數(shù)據(jù)格式
void car8051(void)
{
     uchar i;
      for(i=0;i<6;i++)
          {read_eeprom(i+100);
           zhujima[i]=EEDR;
           }
     // tabdat[0]=0x46;                          //8031         
          tabdat[1]=zhujima[5]<<4|zhujima[4];
          tabdat[2]=keynum[5]<<4|keynum[4];
      tabdat[3]=keynum[3]<<4|keynum[2];
          tabdat[4]=keynum[1]<<4|keynum[0];
      //tabdat[5]=0x00;
      tabdat[6]=0x00;
      tabdat[7]=0xff&(tabdat[0]+tabdat[1]+tabdat[2]+tabdat[3]+tabdat[4]+tabdat[5]+tabdat[6]);

}

//************************************************************************8051送卡號數(shù)據(jù)格式
void carnuber(void)
{
      //tabdat[0]=0x46;                          //8031         
          //tabdat[1]=zhujima[5]<<4|zhujima[4];
          tabdat[2]=keynum[9]<<4|keynum[8];
      tabdat[3]=keynum[7]<<4|keynum[6];
          tabdat[4]=keynum[5]<<4|keynum[4];
      tabdat[5]=keynum[3]<<4|keynum[2];
      tabdat[6]=keynum[1]<<4|keynum[0];
      tabdat[7]=0xff&(tabdat[0]+tabdat[1]+tabdat[2]+tabdat[3]+tabdat[4]+tabdat[5]+tabdat[6]);

}


//**************************************分機(jī)*******************主機(jī)呼叫分機(jī)處理程序
void callroom(void)
{  uint w,t,m,mm;
     {k=0;
          //tabdat[0]=0x11;    //呼叫命令
          //tx_fifo[1]=0x11;    //呼叫命令
      sendcenter(0x11);
      senddata1();        //呼叫
          delay1(20);
      sendcall(0x11);
      senddata();        //呼叫
      PORTB|=BIT(5);
          PORTD|=BIT(6);
         for(t=0;t<22;t++)
           {
             w=0;
             do
                 {
                  w++;
                  if(t%2){call();}
                  else{xinshi();}
                  anjian1();
                  if(rxdat[0]==0x0a)                                                       //解碼?
                  {
                   delay1(20);
                    for(mm=0;mm<30000;mm++)
                  {
                           PORTD|=BIT(7);
                   sp60();   //60s倒計算
                           if(timeout==1){s60b=60;return;}  
               if(rxdat[0]==0x22)
                           {rxdat[0]=0xff;for(m=0;m<1000;m++){open();if(rxdat[0]==0x06){for(m=0;m<500;m++){byby();}timeout=1;return;}}PORTB&=~BIT(4);}            //開鎖       
               if(rxdat[0]==0x06){for(m=0;m<500;m++){byby();}timeout=1;return;} //掛機(jī)datrest();
                            anjian();
                           if(key==12||key==10||key==11){key=0;sendcall(0x15);senddata();delay1(20); timeout=1;return;}
                  }
                          }
                   if(key1==12||key1==10||key1==11){key1=0;sendcall(0x15);senddata();delay1(20);timeout=1; return;}            //取消退出
                 }
         while(w!=1100);
            }
                timeout=1; return;
          }
   }

//*************************************管理機(jī)********************主機(jī)呼叫管理機(jī)處理程序
void callcenter(void)
{  uint w,t,m,mm,i;
     k=0;
          //tx_fifo[1]=0x11;    //呼叫命令
      sendcenter(0x11);
      senddata1();        //呼叫
          delay1(40);
          turn=0;
          w=0;
          PORTB|=BIT(5);
          PORTD|=BIT(6);
         for(t=0;t<22;t++)
           {
            do
                 {
                  w++;          
                  if(t%2){call();}
                  else{center();}
                  anjian1();
                 // delay(2);                        
                  for(i=0;i<10;i++)
                  {rx_byte();}                             //模擬串口收數(shù)
                  //if(rx_fifo[0]==rx_fifo[1]+rx_fifo[2]+rx_fifo[3]+rx_fifo[4]+rx_fifo[5]+rx_fifo[6]+rx_fifo[7]+rx_fifo[8]+rx_fifo[9])
                  //{
                    if(rx_fifo[1]==0x0a)                                                       //解碼?
                     { delay1(40);
                       for(mm=0;mm<30000;mm++)
                     {
                               
                                  PORTD|=BIT(7);
                      sp60();                                                             //60s倒計算
                  if(timeout==1){s60b=60;return;}  
                  if(rx_fifo[1]==0x22)
                                  {rx_fifo[1]=0x0a;for(m=0;m<1000;m++){open(); if(rx_fifo[1]==0x06){for(m=0;m<500;m++){byby();}timeout=1;return;}}PORTB&=~BIT(4);}            //開鎖       
                  if(rx_fifo[1]==0x06){for(m=0;m<500;m++){byby();}timeout=1;return;} //掛機(jī)datrest();
                                  anjian1();
                                  if(key1==12||key1==10||key1==11){key1=0;sendcenter(0x15);senddata1();delay1(40);datrest1();timeout=1;return;}            //取消退出
                     }
                      }
                  // }
                   if(key1==12||key1==10||key1==11){key1=0;sendcenter(0x15);senddata1();delay1(40);datrest1(); timeout=1;;return;}            //取消退出
                 }
         while(w!=1000);
                 w=0;
            }
          }

//******************************************************樓內(nèi)外數(shù)據(jù)空閑相互轉(zhuǎn)發(fā)處理程序
void changdata(void)
{ uchar i;
  turn=0;
  delay1(40);
  for(i=0;i<10;i++)
     {rx_byte();}                             //模擬串口收數(shù)
         if(rx_fifo[0]==rx_fifo[1]+rx_fifo[2]+rx_fifo[3]+rx_fifo[4]+rx_fifo[5]+rx_fifo[6]+rx_fifo[7]+rx_fifo[8]+rx_fifo[9])
           {
            if(rx_fifo[1]==0xff||rx_fifo[1]==0x00){;}         //監(jiān)視主機(jī)
                else{od_to_id();senddata();delay1(40);}
                  }
   if((tabdat[7])==(tabdat[0]+tabdat[1]+tabdat[2]+tabdat[3]+tabdat[4]+tabdat[5]+tabdat[6]))
   if(tabdat[0]==0xff||rx_fifo[1]==0x00){;}      //監(jiān)視主機(jī)     
   else{id_to_od();senddata1();delay1(40);}

}



//******************************************************************密碼開鎖處理程序
void pkeyopen(void)
{ uint w,t,x,i,y;
  uchar roompkey=0;
  key=0;
  k=0;
  for(x=4;x>0;x--)
  {
    display1[x]=tabpk[x];
   }
   for(i=0;i<4;i++)
          {read_eeprom(i+110);    //EEPROM地址110-113儲存公共密碼
           zhujima[i]=EEDR;
           read_eeprom(i+120);    //EEPROM地址110-113儲存公共密碼
           zhujima[i+4]=EEDR;
           }

  for(w=0;w<10000;w++)         //約10秒內(nèi)輸入密碼
  {  
         xinshi1();
     anjian();
         if(key==10||key==11||key==12){xinshiint();return;}          //取消退出
        if(key==14)     //********************************************系統(tǒng)密碼設(shè)置系統(tǒng)開/關(guān)
         {k=0;
           for(x=4;x>0;x--) {display1[x]=tabpk[x];}
         do
            {y++;
                 xinshi1();
                 anjian();
         if((zhujima[4]==0xff)&&(zhujima[5]==0xff)&&(zhujima[6]==0xff)&&(zhujima[7]==0xff))//自動判定是否初始密碼
             {for(t=0;t<10;t++)
                {w=0;
                  do
                   {w++;
                    if(t%2){ON1();}
                        else{OF0();}
                    anjian();
                                delay(1);
                    if(key==10||key==12){return;}
                    if(key==1){s8556=1;for(t=0;t<1000;t++){sson();}timeout=1;return;}
                    if(key==0){s8556=0;for(t=0;t<1000;t++){ssof();}timeout=1;return;}
                   }
                           while(w!=600);
                          }
                         timeout=1;return;
                  }
                  //for(x=4;x>0;x--){display1[x]=tabpk[x];  }//************************輸入設(shè)置的系統(tǒng)密碼
          if(k==4)
                  {
                   if((zhujima[4]==keynum[0])&&(zhujima[5]==keynum[1])&&(zhujima[6]==keynum[2])&&(zhujima[7]==keynum[3]))
                    { key=0xff;              //清鍵值//
                for(t=0;t<10;t++)
                  {w=0;
                   do
                    {w++;
                    if(t%2){ON1();}
                        else{OF0();}
                    anjian();
                                delay(1);
                    if(key==10||key==12){return;}
                    if(key==1){s8556=1;for(t=0;t<1000;t++){sson();}timeout=1;return;}
                    if(key==0){s8556=0;for(t=0;t<1000;t++){ssof();}timeout=1;return;}
                   }
                           while(w!=600);
                          }
                         timeout=1;return;
                  }
                   if((zhujima[4]!=keynum[0])||(zhujima[5]!=keynum[1])||(zhujima[6]!=keynum[2])||(zhujima[7]!=keynum[3]))
                   {for(t=0;t<1000;t++)        {pkeyerr();}timeout=1;return;}
                  }
                }
           while(y<5000);
         timeout=1;return;
         }

         
     if(k==4)   //******************************************************公共密碼開鎖            
         {
          do
            {y++;
                 xinshi1();
                 anjian();
         if((zhujima[0]==keynum[0])&&(zhujima[1]==keynum[1])&&(zhujima[2]==keynum[2])&&(zhujima[3]==keynum[3]))
             {for(t=0;t<1000;t++){open();}timeout=1; return;}
            }
           while(k==4&&y<3000);
           if(k==4){for(t=0;t<1000;t++){pkeyerr();}timeout=1;return;}
           }
         if((k==8)&&(roomp==1))//************************************************個人密碼開鎖
           {roompass();
            senddata();
                xinshiyiwei1(16);
                t=0;
                do
                {
                 t++;
                 if(t==1000){xinshiyiwei1(16);}
                 if(t==2000){xinshiyiwei1(16);}
                 if(t==3000){xinshiyiwei1(16);}
                 xinshi1();                 
                 if(rxdat[0]==0x1a){for(t=0;t<1000;t++){open();}timeout=1; return;}
                }
                while(t!=4000);
                for(t=0;t<1000;t++)
                {pkeyerr();}
                timeout=1;
                return;
        }
         if((k==8)&&(roomp==0)){for(t=0;t<1000;t++)        {pkeyerr();}timeout=1;return;}
        }
  timeout=1;
}

//**************************************************************************系統(tǒng)功能設(shè)置程序

void systemset(void)
{uint w,x,t,i,ww,temp;
  for(x=4;x>0;x--)
   {
    display1[x]=tabset[x];
   }
   k=0;
  for(w=0;w<10000;w++)
   {
    xinshi1();
        anjian();
        if(key==10||key==11||key==12){return;}          //取消退出
//***********************************************************************************主機(jī)編碼


        if((k==4)&&(keynum[0]==0)&&(keynum[1]==5)&&(keynum[2]==5)&&(keynum[3]==8))  //8550
        {
         k=0;
         TIMSK=~(1<<OCIE0);
         for(x=4;x>0;x--)
       {
        display[x]=tabset[x];
        }
         for(w=0;w<10000;w++)
         {
          anjian();
          if(key==10||key==12){return;}
          xinshi();
         // delay(2);
          if((k==6)&&(keynum[0]+keynum[1]+keynum[2]+keynum[3]+keynum[4]+keynum[5]!=0))
          {for(i=0;i<6;i++){write_eeprom(i+100,keynum[i]);}
              turn=1;
                  TIMSK=(1<<OCIE0);
              delay1(5);
              setmaster();
              senddata1();
                  TIMSK=~(1<<OCIE0);
                  //datrest1();
                  turn=0;
                  ww=0;
                  delay1(1);
        do{
           ww++;
           turn=0;
           TIMSK=(1<<OCIE0);
           anjian();
           //delay2(8);
           xinshi();
           if(key==10||key==12){return;}
           for(i=0;i<10;i++)
                  {rx_byte();} //模擬串口收數(shù)  
               if(rx_fifo[1]==0x04||rx_fifo[2]==0x04||rx_fifo[3]==0x04||rx_fifo[5]==0x04||rx_fifo[6]==0x04||rx_fifo[7]==0x04){for(t=0;t<1000;t++){byby();}datrest1();timeout=1;return;}
                  // datrest1();
                }
          while(ww!=3000&&rx_fifo[6]!=0x04);
             // turn=1;
                 // TIMSK=(1<<OCIE0);
             // delay1(5);
             // tx_fifo[1]=rx_fifo[1];
             // tx_fifo[2]=rx_fifo[2];
             // tx_fifo[3]=rx_fifo[3];
             // tx_fifo[4]=rx_fifo[4];
             // tx_fifo[5]=rx_fifo[5];
             // tx_fifo[6]=rx_fifo[6];
             // tx_fifo[7]=rx_fifo[7];
             // tx_fifo[8]=rx_fifo[8];
             // tx_fifo[9]=rx_fifo[8];
             // tx_fifo[0]=0xff&(tx_fifo[9]+tx_fifo[1]+tx_fifo[2]+tx_fifo[3]+tx_fifo[4]+tx_fifo[5]+tx_fifo[6]+tx_fifo[7]+tx_fifo[8]) ;
              //senddata1();
           for(t=0;t<1000;t++){pkeyerr();}
           timeout=1;
           return;
           }
         }
          timeout=1;
           return;
   }
//******************************************************************************公共密碼設(shè)置
           if((k==4)&&(keynum[0]==5)&&(keynum[1]==5)&&(keynum[2]==5)&&(keynum[3]==8))  //8555
        {
         k=0;
         for(x=4;x>0;x--)
       {
        display[x]=tabset[x];
        }
         for(w=0;w<10000;w++)
         {
          anjian();
          if(key==10||key==12){return;}
          xinshi();
         // delay(5);
          if(k==4)
          {for(i=0;i<4;i++){write_eeprom(i+110,keynum[i]); }
           for(t=0;t<1000;t++){good();}
           timeout=1;
           return;
           }
         }
           timeout=1;
           return;
   }

//*****************************************************************************門禁格式化
   if((k==4)&&(keynum[0]==1)&&(keynum[1]==3)&&(keynum[2]==0)&&(keynum[3]==8))  //8031
        {
         k=0;
         for(x=4;x>0;x--)
       {
        display[x]=tabset[x];
        }
         for(w=0;w<10000;w++)
         {
          anjian();
          if(key==10||key==12){return;}
          xinshi();
         // delay(5);
          if(k==6)
          {car8031();
           senddata();
           for(t=0;t<1000;t++){good();}
           timeout=1;
           return;
           }
         }
         timeout=1;
           return;
   }

   //*****************************************************************************門禁格式化
if((k==4)&&(keynum[0]==1)&&(keynum[1]==5)&&(keynum[2]==0)&&(keynum[3]==8))  //8051
        {
         k=0;
         for(x=4;x>0;x--)
       {
        display[x]=tabset[x];
        }
         for(w=0;w<10000;w++)
         {
          anjian();
          if(key==10||key==12){return;}
          xinshi();
          //delay(5);
         // x=1;
          if(k==6)
          {  k=0;
         tabdat[0]=0x46;                             //送卡位置
             tabdat[1]=zhujima[5]<<4|zhujima[4];
                 tabdat[5]=0x00;
                 car8051();
             senddata();
                 CLI();
                 delay1(20);
                 SEI();
                 tabdat[0]=0x4a;
             tabdat[1]=zhujima[5]<<4|zhujima[4];
                 tabdat[5]=0x01;
                 car8051();
             //senddata();
                 anjian();
             if(key==10||key==12){return;}
             for(w=0;w<12000;w++)
               {
                xinshi();
                        anjian();
                        if(key==10||key==12){return;}
                       if(k==10)
                  {k=0;
                           tabdat[0]=0x44;                         //送卡號                          
                   tabdat[1]=zhujima[5]<<4|zhujima[4];
                           carnuber();
                   senddata();
                       CLI();
                       delay1(20);
                       SEI();
                           tabdat[0]=0x4a;                                 
                   //tabdat[1]=0x00;
                           carnuber();
                   //senddata();
                   for(t=0;t<1000;t++){good();}
                           timeout=1;
                   return;
                           }
                           }
                           }
                 }
                   timeout=1;
               return;
              }

//*****************************************************************************門禁批量注冊
   if((k==4)&&(keynum[0]==4)&&(keynum[1]==5)&&(keynum[2]==0)&&(keynum[3]==8))  //8054
        {
         k=0;
         for(x=4;x>0;x--)
       {
        display[x]=tabset[x];
        }
         for(w=0;w<1000;w++)
         {
          anjian();
          if(key==10||key==12){return;}
          xinshi();
          //delay1(5);
          tabdat[0]=0x46;
          tabdat[5]=0x00;
          car8054();
          senddata();
          delay1(20);
          tabdat[0]=0x4a;
          tabdat[5]=0x01;
          car8054();
          //senddata();
          for(t=0;t<1000;t++){good();}
          timeout=1;
          return;
           }
         }

//*****************************************************************************系統(tǒng)密碼設(shè)置
    if((k==4)&&(keynum[0]==6)&&(keynum[1]==5)&&(keynum[2]==5)&&(keynum[3]==8))  //8556
        {
         k=0;
          for(i=0;i<4;i++)
          {read_eeprom(i+120);    //EEPROM地址120-123儲存系統(tǒng)密碼
           zhujima[i]=EEDR;
           }
           for(w=0;w<10000;w++)
            {
         if((zhujima[0]==0xff)&&(zhujima[1]==0xff)&&(zhujima[2]==0xff)&&(zhujima[3]==0xff))
             {
                  for(x=4;x>0;x--){display[x]=tabnew[x];}
                  //xinshi();
                  //for(t=0;t<800;t++){new();}
                  //xinshiyiwei1(16);
              for(w=0;w<10000;w++)
                {
                 anjian();
                 if(key==10||key==12){return;}
                 xinshi();
                       if(k==4)
                          {for(x=4;x>0;x--){display[x]=tabagai[x];}
                           k=0;
                       for(w=0;w<10000;w++)
                   {
                    anjian();
                    if(key==10||key==12){return;}
                    xinshi();
                //for(x=4;x>0;x--){display[x]=tabset[x];}
                          if(k==4)
                              {if((keynum[0]==keynum[4])&&(keynum[0]==keynum[4])&&(keynum[0]==keynum[4])&&(keynum[0]==keynum[4]))         
                        {for(i=0;i<4;i++){write_eeprom(i+120,keynum[i]);}
                         for(t=0;t<1000;t++){good();}
                         timeout=1;
                          return;}
                        }
                       }
                        }
                      }
                  }
                  }
                if((zhujima[0]!=0xff)&&(zhujima[1]!=0xff)&&(zhujima[2]!=0xff)&&(zhujima[3]!=0xff))
             {k=0;
                  for(x=4;x>0;x--) {display1[x]=tabpk[x];}
              for(w=0;w<10000;w++)
                {
                 anjian();
                 xinshi1();
                 if(key==10||key==11||key==12){xinshiint();return;}          //取消退出
             if(k==4)
                          {
               if((zhujima[0]==keynum[0])&&(zhujima[1]==keynum[1])&&(zhujima[2]==keynum[2])&&(zhujima[3]==keynum[3]))
                     {k=0;
                                  for(x=4;x>0;x--){display[x]=tabnew[x];}
                      for(w=0;w<10000;w++)
                        {
                         anjian();
                         if(key==10||key==12){return;}
                         xinshi();
                               if(k==4)
                                          {for(x=4;x>0;x--){display[x]=tabagai[x];}
                                            k=0;
                               for(w=0;w<10000;w++)
                             {
                              anjian();
                              if(key==10||key==12){return;}
                              xinshi();
                                    if(k==4)
                                        {if((keynum[0]==keynum[4])&&(keynum[0]==keynum[4])&&(keynum[0]==keynum[4])&&(keynum[0]==keynum[4]))         
                                  {for(i=0;i<4;i++){write_eeprom(i+120,keynum[i]); }
                                   for(t=0;t<1000;t++){good();}
                                   timeout=1;
                                   return;
                                                         }
                                                         if((keynum[0]!=keynum[4])||(keynum[0]!=keynum[4])||(keynum[0]!=keynum[4])||(keynum[0]!=keynum[4]))         
                                                         {for(t=0;t<1000;t++){pkeyerr();}timeout=1;return;}
                             }
                         }
                         }
              }
             }
                 if((zhujima[4]!=keynum[0])||(zhujima[5]!=keynum[1])||(zhujima[6]!=keynum[2])||(zhujima[7]!=keynum[3]))
                   {for(t=0;t<1000;t++)        {pkeyerr();}timeout=1;return;}
                }
           }
           }
           }
   if(k>4){for(t=0;t<1000;t++)        {pkeyerr();}timeout=1;return;}
   if((k==4)&&(keynum[0]==5)&&(keynum[1]==8)&&(keynum[2]==1)&&(keynum[3]==9))  //8054
        {
         k=0;
         for(t=0;t<10;t++)
         {w=0;
          do
           {w++;
            if(t%2){ON1();}
                else{OF0();}
            anjian();
            if(key==10||key==12){return;}
            if(key==1){roomp=1;for(t=0;t<1000;t++){good();}timeout=1;return;}
            if(key==0){roomp=0;for(t=0;t<1000;t++){good();}timeout=1;return;}
           }
       while(w!=1000);
           }
                   timeout=1;
            return;
        }
       


/**************************************************************************************/
   timeout=1;
}
}

//***************************************************************************按鍵處理程序

void anjiancunli(void)        
{  uint t;
  //xinshiint();
  while(k!=0&&j<12000)        
   {
     j++;
     anjian();
         if(key==14)                                                                       //呼叫管理中心
         {callcenter();
         if(timeout=1)
         {timeout=0;s60b=60;PORTB&=~BIT(4);PORTB&=~BIT(5);PORTD&=~BIT(6)|BIT(7);return;}}                                                      
         
     if(key==10||key==11||key==12){tabdat[0]=0x15;sendclr();senddata();return;}        //取消退出
         
         if(key==13){pkeyopen();if(timeout==1){timeout=0;return;}}                         //密碼開鎖
         
         if((k==4)&&((keynum[0]+keynum[1]+keynum[2]+keynum[3])!=0))                        //呼叫分機(jī)
         {callroom();
         if(timeout=1)
         {timeout=0;s60b=60;PORTB&=~BIT(4);PORTB&=~BIT(5);PORTD&=~BIT(6)|BIT(7);return;}}      
         
         if((k==4)&&((keynum[0]+keynum[1]+keynum[2]+keynum[3])==0))                        //系統(tǒng)設(shè)置
         {if(s8556==1){systemset();if(timeout==1){timeout=0;return;}}else{for(t=0;t<1000;t++){ssof();}return;}}
          
         
       
         xinshi();
   }

}
         
         


void main(void)
{ uint t;
  port_init();
  USART_Init();               
  timer0_init();              /* 配置定時器 */
  var_init();                 /* 仿串口初始化變量 */
  //UCSRB = 0x00;             //禁止串口中斷
// TIMSK=~(1<<OCIE0);        //禁止定時器0中斷TIMSK = (1<<OCIE0)
  SEI();
  while(1)
   {
    j=0;
        k=0;
        xinshiint();
    xinshiw();
    anjian();
        anjiancunli();
        if(rxdat[0]==0x44){for(t=0;t<1000;t++){open();}}
        //changdata();
   }
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-7-15 16:47 | 只看該作者
此貼補(bǔ)全原理圖后可獲得積分
回復(fù)

使用道具 舉報

板凳
ID:559423 發(fā)表于 2019-6-16 11:25 來自觸屏版 | 只看該作者
怎么聯(lián)系你
回復(fù)

使用道具 舉報

地板
ID:552794 發(fā)表于 2019-6-19 08:55 | 只看該作者
工程不小,F(xiàn)在是否都采用tcp/ip通訊協(xié)議。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本精品久久久久久久 | 欧美影院久久 | 亚洲一区二区三区在线视频 | 亚洲国产成人精品久久 | 欧美日韩精品一区二区三区四区 | 国产精品久久久久久久久久久新郎 | 国产成人精品在线播放 | 成人在线视频网址 | 国产成人一区二 | 一区二区不卡视频 | 伊人啪啪网 | 日韩久久久久 | 欧美激情在线播放 | 精品日韩在线 | 国产精品视频一区二区三区 | 中文字幕久久精品 | 91精品国产综合久久久久久 | 久久三区| 国产一区二区三区视频在线观看 | 日操操夜操操 | 精品视频一区二区 | 天天干.com | 欧美一区二区三区视频 | 99精品欧美一区二区三区综合在线 | 国产一区久久精品 | 欧美精品网站 | 国产精品国产自产拍高清 | 九九免费观看视频 | 人人澡人人射 | 中文字幕在线精品 | 美女天堂在线 | www.久久久久久久久久久久 | 日韩精品亚洲专区在线观看 | 毛片视频网站 | 欧美一区二区视频 | 亚洲精品电影在线观看 | 日本人爽p大片免费看 | 亚洲欧美日韩电影 | 欧美一区二区在线免费观看 | 国产在线资源 | 色天天综合|