#include <avr/interrupt.h>
#include "lcd.h"
#include "serial.h"
+#include "delay.h"
#define DATA_OUT PORTD2
#define CLOCK PIND3
volatile uint8_t rx_fill = 0xFF;
volatile uint8_t input[128] = { 0 };
volatile uint8_t latch[128] = { 0 };
-uint8_t log_pos = 0;
+uint8_t log_row = 0;
+uint8_t log_col = 0;
int main()
{
uint8_t bits = 0;
uint8_t n_bits = 8;
uint8_t offset = 0;
+ uint8_t i;
- DDRD = 0x06; // 00000110
- PIND = 0xC0; // 11000000
- DDRB = 0x20; // 00100000
- PINB = 0x1F; // 00011111
+ DDRD = 0x06; // 00000110
+ PORTD = 0xC0; // 11000000
+ DDRB = 0x20; // 00100000
+ PORTB = 0x1F; // 00011111
serial_init(9600);
- serial_set_callback(receive);
lcd_init();
- lcd_on();
- lcd_clear();
sei();
+ lcd_clear();
+ for(i=0; i<20; ++i)
+ lcd_write('0');
+
while(1)
{
uint8_t d_pins;
input[j/2] = (input[j/2]&~(0xF<<shift)) | (bits<<shift);
latch[j/2] = input[j/2];
}
- }
- lcd_gotoxy(0, 0);
- for(i=10; i--;)
- {
- lcd_write(hexdigit(input[i]>>4));
- lcd_write(hexdigit(input[i]));
+ lcd_gotoxy(19-offset-nibbles, 0);
+ for(i=0; i<=nibbles; ++i)
+ lcd_write(rx_buf[3+i]);
}
}
rx_fill = 0xFF;
rx_fill = 0xFF;
}
- lcd_gotoxy(log_pos%20, 1+log_pos/20);
+ lcd_gotoxy(log_col, 1+log_row);
lcd_write(c);
- ++log_pos;
- if(log_pos>=60)
- log_pos = 0;
- lcd_gotoxy(log_pos%20, 1+log_pos/20);
+ ++log_col;
+ if(log_col>=20)
+ {
+ log_col = 0;
+ ++log_row;
+ if(log_row>=3)
+ log_row = 0;
+ lcd_gotoxy(log_col, 1+log_row);
+ }
lcd_write(255);
}
+SERIAL_SET_CALLBACK(receive)
+
uint8_t hexdigit(uint8_t n)
{
n &= 0xF;