Как подключить светодиодный дисплей shd0032?
- Войдите на сайт для отправки комментариев
Сб, 31/01/2015 - 23:20
Есть четырехразрядный дисплей SHD0032 - http://www.smartmodule.ru/0032.html
Обычно в сети рассказывают о том, что нужно просто подавать питание на каждый светодиод дисплея, но здесь все как то подругому.
Нигде в сети не могу найти информацию как правильно его подключить и вывести какие-нибудь данные.
использую arduino uno
По вашей же ссылке
"Контроллер дисплея представляет собой 32-разрядный сдвиговый регистр"
И временная диаграмма есть. Почитайте про подключение сдвиговых регистров, 74hc595 обычно подключают к ардуине.
да, я уже понял, что это так называется. К сожалению я не очень хорошо умею программировать и первый раз сталкиваюсь с подобным.
Я уже понял как правильно подключить экран, однако выводить осмысленную информацию пока не получается.
Скорее всего я разберусь и смогу сделать по образцу, если кто-нибудь подскажет что здесь не так и что поправить для вывода, например, числа 1000.
Я использую вот этот код:
#define DATAOUT 11 //MOSI #define DATAIN 12 //MISO #define SPICLOCK 13 //sck #define SLAVESELECT 10 //ss char spi_transfer(volatile char data) { SPDR = data; // Start the transmission while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission { }; return SPDR; // return the received byte } void setup() { byte clr; pinMode(DATAOUT, OUTPUT); pinMode(DATAIN, INPUT); pinMode(SPICLOCK, OUTPUT); pinMode(SLAVESELECT, OUTPUT); digitalWrite(SLAVESELECT, HIGH); //disable device //interrupt disabled,spi enabled,msb 1st,master,clk low when idle, //sample on leading edge of clk,system clock/64 SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1); clr=SPSR; clr=SPDR; delay(10); write_led_numbers(0x78,0x78,0x78,0x78); //Blank display write_led_decimals(0x00); // All decimal points off } void write_led_decimals(int value) { digitalWrite(SLAVESELECT, LOW); delay(10); spi_transfer(0x77); // Decimal Point OpCode spi_transfer(value); // Decimal Point Values digitalWrite(SLAVESELECT, HIGH); //release chip, signal end transfer } void write_led_numbers(int digit1, int digit2, int digit3, int digit4) { digitalWrite(SLAVESELECT, LOW); delay(10); spi_transfer(digit1); // Thousands Digit spi_transfer(digit2); // Hundreds Digit spi_transfer(digit3); // Tens Digit spi_transfer(digit4); // Ones Digit digitalWrite(SLAVESELECT, HIGH); //release chip, signal end transfer } void write_led(unsigned short num, unsigned short base, unsigned short pad) { unsigned short digit[4] = { 0, ' ', ' ', ' ' }; unsigned short place = 0; if ( (base<2) || (base>16) || (num>(base*base*base*base-1)) ) { write_led_numbers(' ', 0x00, 0x0f, ' '); // indicate overflow } else { while ( (num || pad) && (place<4) ) { if ( (num>0) || pad ) digit[place++] = num % base; num /= base; } write_led_numbers(digit[3], digit[2], digit[1], digit[0]); } } void loop() { //for (int i = 0; i < 9999; i++) { write_led (1000,10,0); delay(1); // } }