Projekt fmradio.c
Zo stránky SensorWiki
<source lang="c">
- include <avr/interrupt.h>
- include <stdlib.h>
- include <avr/io.h>
- include <util/delay.h>
- include <util/twi.h>
- include <stdio.h>
- include "lcd.h"
- 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);}
}