Botão do aplicativo CC2530 para controlar as alterações do estado da luz

Crie de forma independente um novo projeto e escreva e compile código para realizar a alteração do estado intermitente da luz de controle de botão e alcançar os seguintes requisitos de tarefa:
[1] O programa começa a ser executado: a luz D4 pisca e as luzes D3, D5, D6 se apagam.
[2] Depois de pressionar o botão SW1 no módulo para liberar, as luzes D5 e D6 piscarão alternadamente.
[3] Pressione o botão SW1 novamente, D5, D6 acende.
[4] Repita os dois passos acima.
Esta pergunta precisa definir uma bandeira para o estado da luz. Existem três estados através do bit da bandeira do botão.
Estado 1: a luz D4 pisca, as luzes D3, D5 e D6 apagam-se.
Estado 2: as luzes D5 e D6 piscam por sua vez.
Estado 3: As luzes D5 e D6 estão apagadas.

 

 

1 #include " ioCC2530.h " 
2  
3  #define D3 P1_0
 4  #define D4 P1_1
 5  #define D5 P1_3
 6  #define D6 P1_4
 7  #define SW1 P1_2
 8  
9 não assinado char stat = 0 ;    // sinalizador de status leve 
10  
11  / * ======================= Função de atraso simples ======================= === * / 
12  atraso nulo (não assinado int t)
 13  {
 14    enquanto (t--);
 15  }
 16  / * ======================= Função de inicialização da porta =================== ======= * / 
17  void Init_Port ()
 18  {
 19    P1SEL & = ~ 0x1b ;        // Configure P1_0, P1_1, P1_3, P1_4 na porta de E / S geral   
20    P1DIR | = 0x1b ;         // Configure P1_0 , P1_1, P1_3, P1_4 são configurados para a direção de saída 
21    P1 & = ~ 0x1b ;           // Desligue 4 luzes LED 
22    
23    P1SEL & = ~ 0x04 ;        // Defina P1_2 para a porta de E / S geral 
24    P1DIR & = ~ 0x04 ;       // Defina P1_2 na direção de entrada 
25    P1INP & = ~ 0x04 ;        // Defina P1_2 para puxar para cima / baixo 
26    P2INP & = ~ 0x40 ;        // Defina P1_2 para puxar para cima 
27  }
 28  
29  / * ==== ================= Função D4 piscando a luz ====================== * / 
30  vazio D4_Flicker ()
 31  {
 32    D4 = 1 ;
 33    Atraso ( 60000 );
 34    D4 = 0 ;
 35    Atraso ( 60000 );
 36  }
 37  
38 / * ===================== Função intermitente D5D6 ====================== * / 
39  void D5D6_Flicker ()
 40  {
 41    D3 = 0 ;
 42    D4 = 0 ;
 43    D5 = 1 ;
 44    Atraso ( 60000 );
 45    D5 = 0 ;
 46    Atraso ( 60000 );
 47    D6 = 1 ;
 48    Atraso ( 60000 ) ;
 49    D6 = 0 ;
 50    Atraso ( 60000 );
51  }
 52  
53  / * ======================= Função de verificação das teclas ================== ======= * / 
54  void Scan_Keys ()
 55  {
 56    if (SW1 == 0 )             // Sinal do botão SW1 
57  encontrado 57   {
 58      Atraso ( 100 );            // Atraso por um momento, rebote 
59      se (SW1 == 0 )           // Confirme como sinal da chave SW1 
60      {
 61        if (stat == 0 )
 62        {
 63          stat =1 ;
 64        }
 65         else  if (stat == 1 )   // Repita 
66        {
 67          stat = 2 ;
 68        }
 69        else  if (stat == 2 )
 70        {
 71          stat = 1 ;
 72        }
 73        
74      }
 75    }       
 76  }
 77  
78  / * ========================== Função principal ================== ========== * / 
79 void main ()
 80  {
 81    Init_Port ();             // Inicialização da porta 
82    enquanto ( 1 )
 83    {
 84      Scan_Keys ();           // Chave de verificação 
85      switch (stat)
 86      {
 87        case  0 :              // Estado de 
inicialização , D4 pisca 88          D4_Flicker ();     
 89        interrupção ;
 90        caso  1 :              // Status da execução 1: D5 e D6 piscam 
91          D5D6_Flicker ();
 92        interrupção;
 93        case  2 :              // O estado de execução 2: D5 e D6 estão desativados 
94          D5 = 0 ;
 95          D6 = 0 ;
 96        break ;
 97      }
 98    }
 99 }
Ver Código

 

Acho que você gosta

Origin www.cnblogs.com/yuling520/p/12691326.html
Recomendado
Clasificación