Mikroupravljači- Programski zadatak 4 Šoštar, Koritić, Pervan
Dependencies: mbed
main.cpp
- Committer:
- rsostar
- Date:
- 2016-12-06
- Revision:
- 0:26c38aa08a35
File content as of revision 0:26c38aa08a35:
#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; }