1. Список говнокодов пользователя Azerhud

    Всего: 2

  2. Си / Говнокод #19697

    −54

    1. 1
    2. 2
    3. 3
    С миру по нитки собрал счётчик, но что то он мне не нравиться.
     Может кто посоветует как этот код заставить работать на четыре индикатора, ну что б считал до 9999.
     И сам код переделать, посоветуйте... а то тут ножек на avr уже не хватает. Вот сам код:

    #include <inttypes.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/sleep.h>
    #include <util/delay.h>

    void port_int(){
    DDRA=0xFF; PORTA=0x3F; //Все порты как выход 0x3F для отображения начального нуля.
    DDRB=0xFF; PORTB=0x00; //Все порты как выход
    DDRC=0xFF; PORTC=0x00; //Все порты как выход
    DDRD=0xFB; PORTD=0x04; //Порт PD2/INT0 как вход с кнопки, поднят внутренний подтягиваюўий резистор
    }

    void init_interp(void){ //объявили переменную init_interp
    MCUCR |=(1<<ISC01); //Выбор режима внешнего прерывания INT0 и INT1 // MCUCR общий регистр управления прерываниями
    GICR |=(1<<INT0); //запрет/разрешение прерываний по сигналам на входах INT0, INT1
    }

    volatile unsigned char i=0;
    volatile unsigned char a=0;
    ISR(INT0_vect){ //Обработчик прерываний (хз что это...)
    i+=1;
    switch (i){
    case 0x01: PORTA=0x06;break; //подставляем свои значения для индикатора
    case 0x02: PORTA=0x5B;break;
    case 0x03: PORTA=0x4F;break;
    case 0x04: PORTA=0x66;break;
    case 0x05: PORTA=0x6D;break;
    case 0x06: PORTA=0x7D;break;
    case 0x07: PORTA=0x07;break;
    case 0x08: PORTA=0x7F;break;
    case 0x09: PORTA=0x6F;break;
    case 0x0A: PORTA=0x3F;break;
    case 0x0B: PORTA=0x80;break;
    }
    }

    int main(){
    port_int(); // хз
    init_interp(); // что
    sei(); // это
    volatile unsigned char a=0;
    while (1){
    _delay_ms(50); //задержка
    PORTB=i;
    if(i==0x0A){
    a+=1;
    switch (a){
    case 1: PORTC=0x06;break; //подставляем свои значения для индикатора
    case 2: PORTC=0x5B;break;
    case 3: PORTC=0x4F;break;
    case 0x04: PORTC=0x66;break;
    case 0x05: PORTC=0x6D;break;
    case 0x06: PORTC=0x7D;break;
    case 0x07: PORTC=0x07;break;
    case 0x08: PORTC=0x7F;break;
    case 0x09: PORTC=0x6F;break;
    case 0x0A: PORTC=0x3F;break;
    case 0x0B: PORTC=0x80;break;
    }
    }
    if(a==0x0A){a=0;
    }
    if(i==0x0A) i=0;
    }
    _delay_ms(50); ;
    return 0;
    }

    Azerhud, 25 Марта 2016

    Комментарии (50)
  3. Си / Говнокод #19695

    −20

    1. 1
    Нужно что б выводила данные из switch на семисигментный дисплей, ни черта не работает

    Нужно что б выводила данные из switch на семисигментный дисплей, ни черта не работает... :( Компилятор пишет: warning: statement with no effect


    #include <inttypes.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <avr/sleep.h>
    #include <util/delay.h>

    void port_int(){
    DDRA=0xFF; PORTA=0x00;
    DDRB=0xFF; PORTB=0x00;
    DDRC=0x00; PORTC=0xFF;
    DDRD=0x00; PORTD=0xFF;
    }

    void init_interp(void){
    MCUCR |=(1<<ISC01);
    GICR |=(1<<INT0); //INT0 PD2 кнопка
    }

    char i=0;
    ISR(INT0_vect){
    i+=1;
    switch (i){
    case 0x01: 0x06;
    break;
    case 0x02: 0x5B;
    break;
    case 0x03: 0x4F;
    break;
    case 0x04: 0x66;
    break;
    case 0x05: 0x6D;
    break;
    case 0x06: 0x7D;
    break;
    case 0x07: 0x07;
    break;
    case 0x08: 0x7F;
    break;
    case 0x09: 0x6F;
    break;
    case 0x0A: 0x3F;
    break;
    case 0x0B: 0x80;
    break;
    //default 0x3F;
    }
    PORTB=i;
    }
    int main()
    {
    port_int();
    init_interp();
    sei();
    // Write your code here

    while (1){
    _delay_ms(50);

    PORTA=PINB;

    _delay_ms(50);
    }
    ;
    return 0;
    }

    Azerhud, 25 Марта 2016

    Комментарии (20)