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

📄 main.c

📁 Firmware that controls a sliding door via a GSM modem (Open and Close the door)
💻 C
📖 第 1 页 / 共 2 页
字号:
        return 0;
        }
     if (message_buffer[57] != 'L')
        {
        return 0;
        }
     if (message_buffer[58] != 'O')
        {
        return 0;
        }
     if (message_buffer[59] != 'S')
        {
        return 0;
        }
     if (message_buffer[60] != 'E')
        {
        return 0;
        }
     if (message_buffer[61] != carriage_return)
        {
        return 0;
        }
     if (message_buffer[62] != line_feed)
        {
        return 0;
        }
     return 1;
     }

void get_imbedded_password()//ok
     {
     unsigned short address;
     address = 0xF8;
     byte_count1 = 0;
     while (byte_count1 < 6)
           {
           password[byte_count1] = EEprom_Read(address);
           byte_count1++;
           address++;
           }
     }

void save_password()//ok
     {
     unsigned short address;
     address = 0xF8;
     byte_count1 = 0;
     while (byte_count1 < 6)
           {
           EEprom_Write (address,password[byte_count1]);
           byte_count1++;
           address++;
           }
     }

void offset_message(short row, unsigned short location)//ok
     {
     unsigned column;
     column = 1;
     while (column < 17)
           {
           buffer = EEprom_Read(location);
           LCD_Chr(row,column,buffer);
           location++;
           column++;
           }
     }
//------------------------------door routines-----------------------------------

void motor_delay()
     {
     Delay_ms(15);
     }
     
void rotate2()
     {
     step_A = 1;
     motor_delay();
     step_A = 0;
     step_B = 1;
     motor_delay();
     step_B = 0;
     step_C = 1;
     motor_delay();
     step_C = 0;
     step_D = 1;
     motor_delay();
     step_D = 0;
     }

void rotate1()
     {
     step_D = 1;
     motor_delay();
     step_D = 0;
     step_C = 1;
     motor_delay();
     step_C = 0;
     step_B = 1;
     motor_delay();
     step_B = 0;
     step_A = 1;
     motor_delay();
     step_A = 0;
     }
     
void open_door()
     {
     unsigned short step_count;
     offset_message(1,0x40);
     solenoid = 1;
     delay1s();
     step_count = 25;
     while (step_count > 0)
          {
          rotate1();
          step_count--;

          }
     solenoid = 0;
     step_count = 150;
     while (step_count > 0)
          {
          rotate1();
          step_count--;
          }
     offset_message(1,0x60);
     Delay1s();
     Delay1s();
     Delay1s();
     }

void close_door()
     {
     unsigned short step_count;
     offset_message(1,0x50);
     step_count = 150;
     while (step_count > 0)
          {
          rotate2();
          step_count--;
          }
     solenoid = 1;
     step_count = 28;
     while (step_count > 0)
          {
          rotate2();
          step_count--;
          }
     solenoid = 0;
     offset_message(1,0x70);
     Delay1s();
     Delay1s();
     Delay1s();
     }
//---------------------------------main routine---------------------------------
void main()
     {
     TRISA = 0;
     TRISB = 0;
     TRISC = 0;
     TRISE = 0;
     TRISD = 0xf4;
     PORTA = 0;
     PORTB = 0;
     PORTC = 0;
     PORTD = 0;
     PORTE = 0;
     solenoid = 0;
     PIE1.RCIE = 1;
     Delay1s();
     Delay1s();
     Usart_Init(9600);
     LCD_Init(&PORTB);
     LCD_Cmd(LCD_CLEAR);
     LCD_Cmd(LCD_CURSOR_OFF);
     Delay1s();
     Delay1s();
     Delay1s();
     gsm_modem_init();
     offset_message(1,0);
     Delay1s();
     Delay1s();
     Delay1s();
     LCD_Cmd(LCD_CLEAR);
     door_stat = close ;
     while (1)
           {
           buffer = read_keypad(); // read the keypad if pressed
           if (buffer == '*')
              {
              offset_message(1,0x10);
              clear_code_locations();
              byte_count1 = 0;
              LCD_Chr(2,5,' ');
              while (byte_count1 < 6 && buffer != '#')
                    {
                    buffer = read_keypad();
                    if (buffer != '*' && buffer != '#' && buffer != 0)
                       {
                       temp_password[byte_count1] = buffer;
                       LCD_Chr_Cp('*');
                       byte_count1++;
                       }
                    }
              get_imbedded_password();
              buffer = compare_codes();
              if (buffer)
                 {
                 LCD_Cmd(LCD_CLEAR);
                 if (door_stat == close)
                    {
                    offset_message(1,0x30);
                    offset_message(2,0x80);
                    }
                 if (door_stat == open)
                    {
                    offset_message(1,0xd0);
                    offset_message(2,0x80);
                    }
                 while (buffer != '#')
                       {
                       buffer = read_keypad();
                       if (buffer == '0' && door_stat == close)
                          {
                          LCD_Cmd(LCD_CLEAR);
                          open_door();
                          door_stat = open;
                          goto exit1
                          }
                       if (buffer == '*')
                          {
                          LCD_Cmd(LCD_CLEAR);
                          offset_message(1,0x90);
                          byte_count1 = 0;
                          LCD_Chr(2,5,' ');
                          while (byte_count1 < 6 && buffer != '#')
                                {
                                buffer = read_keypad();
                                if (buffer != '*' && buffer != '#' && buffer != 0)
                                   {
                                   password[byte_count1] = buffer;
                                   LCD_Chr_Cp('*');
                                   byte_count1++;
                                   }
                                }
                          LCD_Cmd(LCD_CLEAR);
                          offset_message(1,0xa0);
                          byte_count1 = 0;
                          LCD_Chr(2,5,' ');
                          while (byte_count1 < 6 && buffer != '#')
                                {
                                buffer = read_keypad();
                                if (buffer != '*' && buffer != '#' && buffer != 0)
                                   {
                                   temp_password[byte_count1] = buffer;
                                   LCD_Chr_Cp('*');
                                   byte_count1++;
                                   }
                                }
                          buffer = compare_codes();
                          if (buffer)
                             {
                             LCD_Cmd(LCD_CLEAR);
                             offset_message(1,0xb0);
                             save_password();
                             Delay1s();
                             Delay1s();
                             goto exit1
                             }
                          if (!buffer)
                             {
                             LCD_Cmd(LCD_CLEAR);
                             offset_message(1,0xc0);
                             Delay1s();
                             Delay1s();
                             goto exit1
                             }
                          }
                       }
                 goto exit1
                 }
              if (!buffer)
                 {
                 offset_message(1,0x20);
                 Delay1s();
                 Delay1s();
                 Delay1s();
                 LCD_Cmd(LCD_CLEAR);
                 }
              clear_code_locations();
              exit1: LCD_Cmd(LCD_CLEAR);
              }
           if (buffer == '#' && door_stat == open)
              {
              close_door();
              door_stat = close;
              LCD_Cmd(LCD_CLEAR);
              }
           if (inside_switch && door_stat == open)
              {
              close_door();
              door_stat = close;
              LCD_Cmd(LCD_CLEAR);
              }
           if (inside_switch && door_stat == close)
              {
              open_door();
              door_stat = open;
              LCD_Cmd(LCD_CLEAR);
              }
          if (PIR1.RCIF)
             {
             clear_message_buffers();
             recieve_message(63);
             if (message_buffer[2] != 'R')// && message_buffer[62] == carriage_return)
                {
                LCD_Cmd(LCD_CLEAR);
                transfer_senders_number();
                transfer_sent_password();
                get_imbedded_password();
                buffer = compare_codes();
                if (buffer)
                   {
                   buffer = compare_with_open_command();
                   if (buffer)
                      {
                      if (!door_stat)
                         {
                         open_door();
                         door_stat = 1;
                         setup_reply_message();
                         send_open_message();
                         wait_acknowledgement();
                         goto exit2
                         }
                      if (door_stat)
                         {
                         setup_reply_message();
                         send_already_open_message();
                         wait_acknowledgement();
                         goto exit2
                         }
                      }
                   buffer = compare_with_close_command();
                   if (buffer)
                      {
                      if (door_stat)
                         {
                         close_door();
                         door_stat = 0;
                         setup_reply_message();
                         send_close_message();
                         wait_acknowledgement();
                         goto exit2
                         }
                      if (!door_stat)
                         {
                         setup_reply_message();
                         send_already_closed_message();
                         wait_acknowledgement();
                         }
                      }
                   }
                }
             exit2: LCD_Cmd(LCD_CLEAR);
             }
          }
     }

⌨️ 快捷键说明

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