Operácie

Projekt fmradio.c

Z SensorWiki

<source lang="c">

  1. include <avr/interrupt.h>
  2. include <stdlib.h>
  3. include <avr/io.h>
  4. include <util/delay.h>
  5. include <util/twi.h>
  6. include <stdio.h>
  1. include "lcd.h"
  1. include "i2cmaster.h"

FILE mystdout = FDEV_SETUP_STREAM(lcdDataWrite, NULL, _FDEV_SETUP_WRITE); // Printf pre LCD


int main(void) {

unsigned int CHAN=0b11001110, DATA;						// Predvolena frekvencia radio EXPRES

unsigned char VOLUME=0b0011,DATAH,DATAL, TUNE=0b010000, BUTTONS;

lcdInit4();  	                   

stdout = &mystdout; // Odteraz funguje printf();


i2c_init();

for(;;){

BUTTONS=ReadButtons();

if(BUTTONS&0x01 && VOLUME<0b1111 && !(BUTTONS&0x04) && !( BUTTONS&0x08)) // Test tlacidla 1. { VOLUME++; }

if(BUTTONS&0x02 && VOLUME>0) //Test tlacidla 2. { VOLUME--; }

if(BUTTONS&0x04 && CHAN<210) // Test tlacidla 3. a dosiahnutia max. frekvencie { if(BUTTONS&0x01&& CHAN<201) // Uz nemoze pripocitat 1 Mhz, len menej CHAN+=10; // Pripocita frerkvenciu po 1 MHZ-och else CHAN++; // Pripocita frekvenciu po 0.1 MHZ-och TUNE=0b010000; // Poziadavka na zmenu frekvencie /1-aktivna }


if(BUTTONS&0x08 && CHAN>9) // Test tlacidla 4. (znizovanie frekv.) { if(BUTTONS&0x01) // Zniz. po 1 MHz CHAN-=10; else CHAN--; // Zniz. po 0.1 MHz TUNE=0b010000; // Poziadavka na zmenu frekvencie /1-aktivna }


DATA=TUNE+CHAN*0b1000000; // Vypocet 16 bitoveho riadiaceho slova DATAH=DATA/256; // Rozdelenie - horne bity(8) DATAL=DATA%256; // Rozdelenie - dolne bity(8)

i2c_start_wait(0b00100000+I2C_WRITE); // HLAVICKA PRENOSOVEHO RAMCA // (nastavenie adresy a typu operacie)

       i2c_write(0b11000000);            				        // Zapis data na adresu 02- Horny Byte                
       i2c_write(0b00000001);            					// Zapis data na adresu 02- Dolny Byte 

i2c_write(DATAH/*0b00110011*/); // Zapis data na adresu 03- Horny Byte

       i2c_write(DATAL/*0b10010000*/);               				// Zapis data na adresu 03- Dolny Byte 

i2c_write(0b00000000); // Zapis data na adresu 04- Horny Byte

       i2c_write(0b00000000);                        				// Zapis data na adresu 04- Dolny Byte 

i2c_write(0b10001000); // Zapis data na adresu 05- Horny Byte

       i2c_write(0b10100000+VOLUME);                        			// Zapis data na adresu 05- Dolny Byte

i2c_write(0b00000100); // Zapis data na adresu 0A- Horny Byte

       i2c_write(0b00000000);                        				// Zapis data na adresu 0A- Dolny Byte

i2c_write(0b00000000); // Zapis data na adresu 0B- Horny Byte

       i2c_write(0b00000000);                        				// Zapis data na adresu 0B- Dolny Byte

i2c_stop(); // Ukoncenie prenosoveho ramca

lcdControlWrite(0x02);								// Kurzor na zaciatok DISP

printf("%d.%dMHz ",(870+CHAN)/10,(870+CHAN)%10); // Vypis frekvencie lcdControlWrite(0xC0); // Druhy riadok printf("Vol=%d ",((int)VOLUME*100)/0b1111); // Vypis hlasitosti


  TUNE=0b000000;								// Zastavenie poziadavky na zmenu frekvencie
  _delay_ms(500);}

}