SPI,PT6961 и Обугленный мозг
- Войдите на сайт для отправки комментариев
Сб, 20/12/2014 - 13:03
День добрый форумчане.Начну сразу с дела.Имеется семисигментный индикатор на pt6961.Написал я для него скетч
#include <SPI.h> //числовое значение int val=9; ///////////////// //разряд в котором выведется число //0 в первом разряде //2 во втором //6 в третьем //14 четвертом //30 в пятом //62 в шестом //126 в седьмом byte val1=0; ///////////////// //0xca-dvd-1 //0xcb-repl-1 //0xc8-pbc-1 //0xc0-play-1 //0xc2-vcd-1 //0xc4-mp3-1 //0xc6-pause-1 //0xc9-dolby-1 //0xc1-dts-1 //0xcc-средние горизонтальные деления-байт от 1 до 255 //0xca-верхние горизонтальные 1-255 //0xc8-нижние горизонтальные 1-255 //0xc6-верхние левые деления 1-255 //0xc0-нижние левые деления 1-255 //0xc2-верхние правые деления 1-255 //0xc4-нижние правые деления 1-255 //0xc3-первое двоеточие-1-255 //0xc5-второе двоеточие 1-255 const int myArray[8]= {0x00,0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc}; const int myArray1[23][8]={ {0,14,4,4,14,14,4,0}, //LOL {0,0,2,2,0,0,0,0},//1-1 digit {0,2,2,0,0,2,2,2},//2-1 digit {0,0,2,2,0,2,2,2},//3-1 digit {0,0,2,2,2,0,0,2},//4-1 digit {0,0,0,2,2,2,2,2},//5-1 digit {0,2,0,2,2,2,2,2},//6-1 digit {0,0,2,2,0,0,2,0},//7-1 digit {0,2,2,2,2,2,2,2},//8-1 digit {0,0,2,2,2,2,2,2},//9-1 digit {0,4,6,6,4,4,4,0},//10-1-2 digit {0,0,6,6,0,0,0,0}, {0,4,6,2,0,4,4,4}, {0,0,6,6,0,4,4,4}, {0,0,6,6,4,0,0,4}, {0,0,2,6,4,4,4,4}, {0,4,2,6,4,4,4,4}, {0,0,6,6,0,0,4,0}, {0,4,6,6,4,4,4,4}, {0,0,6,6,4,4,4,4}, {0,6,6,4,4,6,6,2}, {0,2,6,4,0,2,2,2}, {0,6,6,0,0,6,6,6}, }; const int SSPin = 10; void setup() { pinMode (A0, INPUT); pinMode (SSPin, OUTPUT); SPI.begin(); delay(200); SPI.setBitOrder(LSBFIRST); SPI.setDataMode(SPI_MODE0); } void loop() { digitalWrite(SSPin,LOW); SPI.transfer(0b00000011); //command 1 digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); SPI.transfer(0b01000000); //command 2 digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); SPI.transfer(0xC0); //command 3 for(int i=0; i<=13; i++){ SPI.transfer(0x00); } digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); //command 4 SPI.transfer(0x8F); digitalWrite(SSPin,HIGH); for(int j=1;j<8; j++){ digitalWrite(SSPin,LOW); SPI.transfer(myArray[1]); if(myArray1[val][1]!=0) { SPI.transfer(myArray1[val][1]+val1); }else{ SPI.transfer(myArray1[val][1]); } digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); SPI.transfer(myArray[2]); if(myArray1[val][2]!=0) { SPI.transfer(myArray1[val][2]+val1); }else{ SPI.transfer(myArray1[val][2]); } digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); SPI.transfer(myArray[3]); if(myArray1[val][3]!=0) { SPI.transfer(myArray1[val][3]+val1); }else{ SPI.transfer(myArray1[val][3]); } digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); SPI.transfer(myArray[4]); if(myArray1[val][4]!=0) { SPI.transfer(myArray1[val][4]+val1); }else{ SPI.transfer(myArray1[val][4]); } digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); SPI.transfer(myArray[5]); if(myArray1[val][5]!=0) { SPI.transfer(myArray1[val][5]+val1); }else{ SPI.transfer(myArray1[val][5]); } digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); SPI.transfer(myArray[6]); if(myArray1[val][6]!=0) { SPI.transfer(myArray1[val][6]+val1); }else{ SPI.transfer(myArray1[val][6]); } digitalWrite(SSPin,HIGH); digitalWrite(SSPin,LOW); SPI.transfer(myArray[7]); if(myArray1[val][7]!=0) { SPI.transfer(myArray1[val][7]+val1); }else{ SPI.transfer(myArray1[val][7]); } digitalWrite(SSPin,HIGH); delay(20); } }
Суть скетча такова,он выводит число со значения val в первый разряд.от 1 до 9.(на остальные не обращайте внимания,это тестовые.).Но если val1 выставлять по коментариям то это число на дисплее будет менять разряд.
Так вот задача- дано чило 982(значение может быть любым); мне нужно разобрать на три отдельных числа и как то указать коду что 9 надо вывести в первом разряде,8 во втором и 2 в третьем.Значений может быть 9999999 (ибо цифр ибо разрядов 7); Как можно это осуществить?
Я так догадываюсь рыть нужно в сторону цикла..Но так как знаний пока маловато то не пойму как.
вот для примера. если разберешься то сделаешь то что хочешь
здесь разбивка числа и передача его на дисплей. твой случай в принципе
Спасибо огромное!)Прийду домой буду все тем же тыком рыть)
балин...чутка не подходит...короче выходит так что если четырех значное передавать,то выведет на дисплей четырех значное число...Но если допустим передать один то выведет 0001...
да выведет. но в чем проблема поставить условие если равно нулю то не выводить для первых 3 цифр. и получишь на дисплее 1
дак дело в том что нужно что значение 0 тоже выводило.там же в нулевой ячейке массива значение цифры 0
нифига не понял. нарисуй картинку
Я говорю не выводить 0 я тоже не могу!Потому что если переменная равна нулю то выводит ноль.А если я поставлю то условие то ноль в числах например 100 не будет выводить...
нужно так чтоб не ноль а совсем переменная не создавалась если нет...
так сделай условие сложнее. провека если при этом разряд выше не навен нулю и тд
все гениальное просто.как посчитать можно количество знаков в числе?
точняк))Сенкс!)Буду разбираться)
мог бы и сам догадаться)
Да блин после php этот язык для меня не выносим пока)))Только учусь)