2014-11-28 2 views
0

У меня есть встроенный системный проект, система контроля автомобиля, мы работаем на языке c на программе microC.Автомобильный монитор встроенный проект

Я решил написать часть детали, а затем проверить ее, моя идея - когда я нажимаю и отпускаю (switch0), автомобиль будет работать, и на экране ЖК-дисплея появится «питание», после чего я должен нажать переключатель1 для ремня безопасности.

Если переключатель1 = 1, то на нем будет отображаться «BF», иначе он перевернет «BO». Когда мы входим в switch0, он отключит POWER AND BO, потому что мы не нажимаем переключатель1. Однако даже когда я нажимаю переключатель1, он не будет отображаться BF, если я не нажму кнопку switch0 и switch1 вместе !!

Это мой код:

sbit LCD_RS at RA1_bit; 
sbit LCD_RW at RA2_bit; 
sbit LCD_EN at RA3_bit; 


sbit LCD_D4 at RD4_bit; 
sbit LCD_D5 at RD5_bit; 
sbit LCD_D6 at RD6_bit; 
sbit LCD_D7 at RD7_bit; 

sbit LCD_RS_Direction at TRISA1_bit; 
sbit LCD_RW_Direction at TRISA2_bit; 
sbit LCD_EN_Direction at TRISA3_bit; 
sbit LCD_D4_Direction at TRISD4_bit; 
sbit LCD_D5_Direction at TRISD5_bit; 
sbit LCD_D6_Direction at TRISD6_bit; 
sbit LCD_D7_Direction at TRISD7_bit; 

sbit LED0 at RC0_bit; 
sbit LED1 at RC1_bit; 
sbit Switch0 at RB0_bit; 
sbit Switch1 at RB1_bit; 
sbit Switch2 at RB2_bit; 
sbit Switch3 at RB3_bit; 
int Num; 


void main() { 

ADCON1 = 0X07;    //a port as ordinary i/o. 
TRISA = 0X00;    //a port as output. 
TRISD = 0X00;    //d port as output. 
TRISC = 0X00; 
TRISB = 0X0F; 
PORTC = 0b00000001; 


Lcd_Init();      // Initialize LCD 
Delay_ms(200); 
Lcd_Cmd(_LCD_CLEAR);    // Clear display 
Lcd_Cmd(_LCD_CURSOR_OFF); 

LED0 = 0; 
LED1= 0; 

do {  
    if (Switch0) // if switch (RB1) is pressed 
    { 
     Delay_ms(20); // pause 20 mS 
     while(Switch0); // Wait for release of the button 
     Delay_ms(10); 

     Lcd_Out(1, 7, "power"); 

     if (Switch1) 
     { 
      Delay_ms(10); // pause 20 mS 
      while (Switch1); // Wait for release of the butto 
      Delay_ms(10); 
      Lcd_Out(2, 6, "BF"); 
      LED0 = 0; 
     } 
     else 
     { 
      Delay_ms(20); 
      Lcd_Cmd(_LCD_CLEAR); 
      Lcd_Out(2,1,"BO"); 
      LED0 = ~LED0;  
     } 
    } 
} while(1); 

} 
+0

Вы должны правильно отформатировать свой код и особенно уважать уровни вычета. Это наиболее важно для удобства чтения. Я сделал это для тебя. Сравните с вашим исходным кодом. –

ответ

0

Это потому, что ваше второе условие (проверка switch1) лежит внутри первого условия (switch0), поэтому состояние ремня не может быть проверен, пока кнопка питания не будет нажата. Вы должны создать переменную для сохранения состояния мощности автомобиля и изменить его в первом состоянии. Второе условие должно быть независимым от первого и использовать вашу переменную для проверки состояния питания автомобиля. Например:

bool bPowerState; 
//... 
    do { 
     if (Switch0) // if switch (RB1) is pressed 
     { 
      bPowerState = !bPowerState; 
      Delay_ms(20); // pause 20 mS 
      while(Switch0); // Wait for release of the button 
      Delay_ms(10); 

     if(bPowerState) 
     Lcd_Out(1,7,"power"); 
     } 

     if (Switch1 && bPowerState) 
     { 
     Delay_ms(10); // pause 20 mS 
     while (Switch1); // Wait for release of the butto 
     Delay_ms(10); 
     Lcd_Out(2,6,"BF"); 
     LED0=0; 
     }else{ 
     Delay_ms(20); 
     Lcd_Cmd(_LCD_CLEAR); 
     Lcd_Out(2,1,"BO"); 
     LED0=~LED0; 
     } 
    }while(1); 
+0

Спасибо, но он только покажет BO Прежде, чем мы нажмем switch0, чтобы немного изменить его, но он не работал – student

+0

, он будет работать только, и мы вернемся к той же проблеме. Bpowestate не изменит ничего, что на самом деле не работает. – student

Смежные вопросы