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.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }