Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* ATmega128: T2 - Controlo de parque de estacionamento de 9 lugares */
- /* Pretende-se simular o control do acesso a uma garagem com uma lotação máxima de 9 viaturas. A entrada de viaturas é detectada pelos sensores S1 e S2 respectivamente, simulados pelos interruptores SW1 e SW2. Sempre que a lotação atingir o máximo, deve ser baixada a cancela de acesso através de M1, simulando pelo LED D8. Enquanto houver lugares vagos, a cancela de acesso deve manter-se levantada através de M2, simulando pelo LED D7. O display mais à direita deve mostrar o nº de lugares vagos na garagem. */
- #include <avr/io.h>
- //#include "C:\Program Files\WinAVR-20080610\avr\include\avr\io.h"
- unsigned char the_counter = 9;
- unsigned char the_s1_status = 0;
- unsigned char the_s2_status = 0;
- unsigned char the_display[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
- void inic(void) {
- /* switch: simulam o sensor */
- PORTA = 0xC0; // 0b11000000
- DDRA = 0xC0; // 0b11000000
- /* leds */
- PORTF = 0x3F; // 0b00111111
- DDRF = 0xFF;
- /* display */
- PORTC = 0xFF;
- DDRC = 0xFF;
- }
- int main(void) {
- /* inicialização dos portos */
- inic();
- /* acende o led com o digito 9 */
- PORTC = the_display[the_counter];
- /* semaforo: parque livre */
- PORTF = 0xBF; // 0b10111111
- /* ciclo */
- while(1) {
- /* decrementa: 0b11111110 */
- if(PINA == 0xFE) {
- /* se nao foi premido entao continua */
- if(the_s1_status == 0) {
- the_s1_status = 1; // flag de controlo do premir do botao. evita contagens anomalas
- /* se for maior que zero entao decrementa por causa do display */
- if (the_counter > 0) {
- the_counter--;
- /* faz o output dos digitos */
- PORTC = the_display[the_counter];
- if(the_counter == 0) {
- /* semaforo: parque completo */
- PORTF = 0x7F; // 0b01111111
- }
- }
- }
- } else {
- /* reset s1 status se o input no PINA se alterar */
- the_s1_status = 0;
- }
- /* incrementa: 0b11111101 */
- if (PINA == 0xFD) {
- /* se nao foi premido entao continua */
- if(the_s2_status == 0) {
- the_s2_status = 1; // flag de controlo do premir do botao. evita contagens anomalas
- /* se for maior que 9 entao incrementa por causa do display */
- if (the_counter < 9) {
- the_counter++;
- /* faz o output dos digitos */
- PORTC = the_display[the_counter];
- if (the_counter < 9) {
- /* semaforo: parque livre */
- PORTF = 0xBF; // 0b10111111
- }
- }
- }
- } else {
- /* reset s2 status se o input no PINA se alterar */
- the_s2_status = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement