Mikroupravljači- Programski zadatak 4 Šoštar, Koritić, Pervan
Dependencies: mbed
Diff: main.cpp
- Revision:
- 0:26c38aa08a35
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Dec 06 22:04:56 2016 +0000 @@ -0,0 +1,134 @@ +#include "mbed.h" + +Serial pc(USBTX,USBRX); +I2C msp430(p28,p27); + +const int adresa0 = 0x90; //i2c adresa prvog MSP430 mikroupravljaca - desetice +const int adresa1 = 0x92; //i2c adresa drugog MSP430 mikroupravljaca - jedinice +char byte_1[2]= {0xC2,0x00}; +char byte_2[2]= {0xC2,0x00}; +char temp_read[2]; //char varijabla u koju se spremaju podaci poslani sa MSP430 - dummy +char ispis(int x); //funkcija prima int broj i vraća hex vrijedost koja se salje u MSP430 kako bi se prikazao određeni broj +char temp_broj; +int broj_int=0; +char mod_temp; +void msp430_write(int); //ispis pojedinacne znamenke na 7-seg display preko i2c veze +void count(); //brojanje od 0-99 +int upute=1; +DigitalOut reset(p30); //reset msp430 nakon svake znamenke +DigitalOut led(p10); //ledica blinka nakon ispisa nove znamenke +Ticker timer; +void random(); //generiranje slucajnog broja u rasponu 0-99 +int main() +{ + while(1) { + if(upute<2) { + pc.printf("Unesi mod rada \r\n"); + pc.printf("Za brojanje od 0 do 99 unesi slovo 's' \r\n"); + pc.printf("Za ispis random broja unesi slovo 'r' \r\n"); + upute++; + reset=1; + } + + if(pc.readable()) { //ako postoji podatak na i2c sabirnici + mod_temp =pc.getc();} //spremi slovo u varijablu mod_temp + + switch (mod_temp) { + case 's': // slovo s pokreni brojanje 0-99 + timer.attach(&count,1); //pokreni ticker-timer u intervalu 1 sekunde,poziva funkciju count svake sekunde + break; + + case 'r': //slovo r ispis random broja + timer.detach(); + random(); + break; + + default: + + } + + } +} + +void random () +{ + int rand_num=rand()%100; + msp430_write(rand_num); +} + +void count() +{ + led=1; + if(broj_int<99) broj_int++; + else broj_int=0; + msp430_write(broj_int); + led=0; +} + +void msp430_write(int x) +{ + + int num_jedinica = x/10; //varijabla za pohranu vrijednosti jedinice + int num_desetica = x%10; //varijabla za pohranu vrijednosti desetice + char jedinica = ispis(num_jedinica); + char desetica = ispis(num_desetica); + byte_1[1]=desetica; + byte_2[1]=jedinica; + reset=0; + wait_us(200); + reset=1; + wait_ms(2); + msp430.write(adresa0,byte_1,2); + wait_us(20); + msp430.write(adresa1,byte_2,2); + wait_us(20); + msp430.read(adresa1, temp_read, 2); + wait_us(20); + msp430.read(adresa0, temp_read, 2); + wait_us(20); + + +} + +char ispis(int x) +{ + char num; + switch (x) { + + case 0: + num=0x3F; // '0' + break; + case 1: + num=0x06; // '1' + break; + case 2: + num=0x5B; // '2 + break; + case 3: + num=0x4F; // '3' + break; + case 4: + num=0x66; // '4' + break; + case 5: + num=0x6D; // '5' + break; + case 6: + num=0x7D; // '6' + break; + case 7: + num=0x07; // '7' + break; + case 8: + num=0x7F; // '8' + break; + case 9: + num=0x6F; // '9' + break; + default: + num=0x00; + } + return num; + +} +