SHOW:
|
|
- or go back to the newest paste.
| 1 | char disp[4]; // Буфер дисплея | |
| 2 | char disp_c; // Индекс символа, отображаемого в данный момент | |
| 3 | char disp_p[4] = {0x01, 0x02, 0x40, 0x80}; // Битовые маски разрядов
| |
| 4 | ||
| 5 | - | // ================================ main() ================================ |
| 5 | + | void main(void) {
|
| 6 | // Инициализация периферии | |
| 7 | // skipped | |
| 8 | DDRA = 0xFF; // PORTA -> OUT | |
| 9 | DDRC = 0xFF; // PORTC -> OUT | |
| 10 | for(;;) {
| |
| 11 | wdt_reset(); | |
| 12 | usbPoll(); | |
| 13 | sk++; | |
| 14 | if (sk >= 50) { // Порты контроллера очень быстрые, и задержка тут необходиа
| |
| 15 | disp_c = (disp_c + 1) % 4; | |
| 16 | PORTA = ~disp[disp_c]; // Переместить "~" на строку ниже для дисплея с общ. катодом | |
| 17 | PORTC = disp_p[disp_c]; | |
| 18 | - | // ================================ процедура приема ======================= |
| 18 | + | |
| 19 | } | |
| 20 | } | |
| 21 | } | |
| 22 | ||
| 23 | uchar usbFunctionWrite(uchar *data, uchar len) // onHostWrite | |
| 24 | {
| |
| 25 | disp[0] = data[1]; disp[1] = data[2]; | |
| 26 | disp[2] = data[3]; disp[3] = data[4]; | |
| 27 | if (data[0] & 0x01) DESELECT(); else SELECT(); | |
| 28 | return 1; /* обязательно */ | |
| 29 | } |