SHD0028 - примеры Сообщение ekits_sales » 26 мар 2013, 14:32 Предлагаем ознакомиться с простым примером кода для использования дисплеев со сдвиговым регистром SHD0028 Пример показывает бегущую строку из всех возможных символов справа налево (от последнего к первому разряду). Яркость циклически меняется от минимального к максимальному и обратно /***************************************************** Chip type : ATmega16 AVR Core Clock frequency: 8,000000 MHz *****************************************************/ #include #include #define IN PORTD.7 //Определение бита IN #define CLOCK PORTD.6 //Определение бита CLOCK #define LATCH PORTD.5 //Определение бита LATCH #define ENABLE PORTD.4 //Определение бита ENABLE #define BYTES 6 //Количество разрядов unsigned char chars[BYTES] ={0,0,0,0,0,0}; //Массив разрядов #define SYMBOLS_ARRAY_LENGTH 12 //Длина массива символов unsigned char symbols[SYMBOLS_ARRAY_LENGTH]={ // Массив символов индикатора 252, // 0 96, // 1 218, // 2 242, // 3 102, // 4 182, // 5 190, // 6 224, // 7 254, // 8 246, // 9 1, // . 2 // - }; #define MAX_BRIGHTNESS 32 //Максимальное значение яркости (0..MAX_BRIGHTNESS) unsigned char brightness = MAX_BRIGHTNESS; //Яркость unsigned char br_counter = 0; //Счетчик вызова прерывания для управления яркостью // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { if (br_counter <= brightness) ENABLE = 0; else ENABLE = 1; if (++br_counter > MAX_BRIGHTNESS) br_counter = 1; } void push_byte(unsigned char _byte){ //Отправить 1 байт в SERIAL_IN unsigned char j; for(j=0;j<8;j++){ CLOCK = 0; IN = 1 & _byte; _byte = _byte>>1; CLOCK = 1; } } void show(void) { //Показать текущие значения в массиве разрядов unsigned char i; for (i=0;i0; j--){ chars[j]=chars[j-1]; } chars[0] = symbols[i]; show(); if (brightness >= MAX_BRIGHTNESS) up=0; if (brightness <= 1) up=1; if (up) brightness++; else brightness--; delay_ms(25); } } }