//Function to Write Data on LCD void lcd_wr_char(char letter) { char temp; temp = letter; temp = (temp & 0xF0); lcd_port &= 0x0F; lcd_port |= temp; sbit(lcd_port,RS); cbit(lcd_port,RW); sbit(lcd_port,EN); _delay_ms(5); cbit(lcd_port,EN); letter = letter & 0x0F; letter = letter<<4; lcd_port &= 0x0F; lcd_port |= letter; sbit(lcd_port,RS); cbit(lcd_port,RW); sbit(lcd_port,EN); _delay_ms(5); cbit(lcd_port,EN); }
// Write 32 bits to display register and latch void writeDisplayData(uint32_t data) { // shift out data for (uint8_t i = 0; i < 4; i++) { // send byte over SPI SPDR = data >> (8 * (3 - i)); // wait for transmission complete while(!(SPSR & (1 << SPIF))); } // latch register data sbit(OUTPORT(DISP_LATCH_PORT), DISP_LATCH_BIT); _delay_us(10); cbit(OUTPORT(DISP_LATCH_PORT), DISP_LATCH_BIT); }
void Reed_Solomon::encode(const bvec &uncoded_bits, bvec &coded_bits) { int i, j, iterations = floor_i(static_cast<double>(uncoded_bits.length()) / (k * m)); GFX mx(q, k), cx(q, n); GFX r(n + 1, n - k); GFX uncoded_shifted(n + 1, n); GF mpow; bvec mbit(k * m), cbit(m); coded_bits.set_size(iterations * n * m, false); if (systematic) for (i = 0; i < n - k; i++) uncoded_shifted[i] = GF(n + 1, -1); for (i = 0; i < iterations; i++) { //Fix the message polynom m(x). for (j = 0; j < k; j++) { mpow.set(q, uncoded_bits.mid((i * m * k) + (j * m), m)); mx[j] = mpow; if (systematic) { cx[j] = mx[j]; uncoded_shifted[j + n - k] = mx[j]; } } //Fix the outputbits cbit. if (systematic) { r = modgfx(uncoded_shifted, g); for (j = k; j < n; j++) { cx[j] = r[j - k]; } } else { cx = g * mx; } for (j = 0; j < n; j++) { cbit = cx[j].get_vectorspace(); coded_bits.replace_mid((i * n * m) + (j * m), cbit); } } }
//Function to Write Command on LCD void lcd_wr_command(unsigned char cmd) { unsigned char temp; temp = cmd; temp = temp & 0xF0; lcd_port &= 0x0F; lcd_port |= temp; cbit(lcd_port,RS); cbit(lcd_port,RW); sbit(lcd_port,EN); _delay_ms(5); cbit(lcd_port,EN); cmd = cmd & 0x0F; cmd = cmd<<4; lcd_port &= 0x0F; lcd_port |= cmd; cbit(lcd_port,RS); cbit(lcd_port,RW); sbit(lcd_port,EN); _delay_ms(5); cbit(lcd_port,EN); }
//Function to Reset LCD void lcd_set_4bit() { _delay_ms(1); cbit(lcd_port,RS); //RS=0 --- Command Input cbit(lcd_port,RW); //RW=0 --- Writing to LCD lcd_port = 0x30; //Sending 3 sbit(lcd_port,EN); //Set Enable Pin _delay_ms(5); //Delay cbit(lcd_port,EN); //Clear Enable Pin _delay_ms(1); cbit(lcd_port,RS); //RS=0 --- Command Input cbit(lcd_port,RW); //RW=0 --- Writing to LCD lcd_port = 0x30; //Sending 3 sbit(lcd_port,EN); //Set Enable Pin _delay_ms(5); //Delay cbit(lcd_port,EN); //Clear Enable Pin _delay_ms(1); cbit(lcd_port,RS); //RS=0 --- Command Input cbit(lcd_port,RW); //RW=0 --- Writing to LCD lcd_port = 0x30; //Sending 3 sbit(lcd_port,EN); //Set Enable Pin _delay_ms(5); //Delay cbit(lcd_port,EN); //Clear Enable Pin _delay_ms(1); cbit(lcd_port,RS); //RS=0 --- Command Input cbit(lcd_port,RW); //RW=0 --- Writing to LCD lcd_port = 0x20; //Sending 2 to initialise LCD 4-bit mode sbit(lcd_port,EN); //Set Enable Pin _delay_ms(5); //Delay cbit(lcd_port,EN); //Clear Enable Pin }
int main(void) { // init hardware setup init(); // setup temperature resolution // write temperature register pointer i2c_start(TEMPSENS_ADDRESS, I2C_WRITE); i2c_write(0x01); i2c_write(0b01100000); i2c_stop(); while(1) { // change mode by pressed button if (button1Pressed()) { mode = MODE_1; } else if (button2Pressed()) { mode = MODE_2; } else if (button3Pressed()) { mode = MODE_3; } // mode1 if (mode == MODE_1) { // read analog value from potentiometer uint32_t pot = readAnalog(POT_CHANNEL); pot *= 4888; pot += 500; pot /= 1000; if (++mydelay >= 10) { writeDisplayNumber(pot, 0); mydelay = 0; } // led1 on sbit(OUTPORT(LED1_PORT), LED1_BIT); } else { // led1 off cbit(OUTPORT(LED1_PORT), LED1_BIT); } // mode2 if (mode == MODE_2) { int16_t temp = readTemperature(); writeDisplayTemp(temp, 2); // led2 on sbit(OUTPORT(LED2_PORT), LED2_BIT); } else { // led2 off cbit(OUTPORT(LED2_PORT), LED2_BIT); } // show potentiometer value if (mode == MODE_3) { // led3 on sbit(OUTPORT(LED3_PORT), LED3_BIT); mode3(); /* if (mydelay < 12) { // turn-on buzzer // frequency 2kHz ICR1 = 2000; OCR1A = 1000; // write to display writeDisplayData(convertBcd(DIGIT_MINUS, DIGIT_MINUS, DIGIT_BLANK, DIGIT_BLANK, 255)); } else { // turn-on buzzer // frequency 2kHz ICR1 = 4000; OCR1A = 2000; // write to display writeDisplayData(convertBcd(DIGIT_BLANK, DIGIT_BLANK, DIGIT_MINUS, DIGIT_MINUS, 255)); } if (++mydelay >= 25) mydelay = 0; */ } else { // turn-off buzzer ICR1 = 0; // led3 off cbit(OUTPORT(LED3_PORT), LED3_BIT); } // wait until all mode buttons are released while (button1Pressed() || button2Pressed() || button3Pressed()); _delay_ms(20); } }