Я кодирую дисплей SSD, используя 2 каскадных сдвиговых регистра. Я использую компилятор mikroC для PIC. Я могу отображать статическую последовательность чисел до 4 цифр с помощью моего кода Статическое отображение 4 чисел
#define SHIFT_CLOCK PORTB.F1 //Clock Connection of 74HC595 SSD Driver
#define SHIFT_LATCH PORTB.F3 //Latch Connection of 74HC595 SSD Driver
#define SHIFT_DATA PORTB.F2 //Data Connection of 74HC595 SSD Driver
char array4[4] = {6, 91, 79, 102}; //Display 1234 on SSD
char digit[4] = {0xFE, 0xFD, 0xFB, 0xF7}; //Switch on the SSD digits one by one
char i,j,temp,flag1,flag2;
void InitTimer0()
{
OPTION_REG = 0x86;
TMR0 = 6;
INTCON = 0xA0;
}
void latch595()
{
SHIFT_LATCH = 1;
Delay_us(1);
SHIFT_LATCH = 0;
}
void shiftdata595(unsigned char _shiftdata)
{
int i;
unsigned char temp;
temp = _shiftdata;
i=8;
while (i>0)
{
if (temp.F7==0)
{
SHIFT_DATA = 0;
}
else
{
SHIFT_DATA = 1;
}
temp = temp<<1;
SHIFT_CLOCK = 1;
SHIFT_CLOCK = 0;
i--;
}
}
void Interrupt()
{
if (TMR0IF_bit)
{
TMR0IF_bit = 0;
TMR0 = 6;
flag1 = 1;
flag2 = 1;
}
}
void main()
{
TRISB = 0;
TRISC.F1 = 1;
InitTimer0();
while (1)
{
if (PORTC.F1==0)
{
if (flag2==1)
{
shiftdata595(digit[i]);
i++;
if(i==4)
{
i=0;
}
if (flag1==1)
{
shiftdata595(array4[j]);
latch595();
j++;
if (j==4)
{
j=0;
}
}
}
}
else if(PORTC.F1==1)
{
shiftdata595(0);
shiftdata595(0);
latch595();
}
}
}
Если я добавлю больше цифр в массив4[], скажем, до 9, мне нужно будет последовательно прокручивать цифры влево. Я попытался сдвинуть массив на
temp = array4[0];
for (n=1; n<8; n++)
{
array4[j-1] = array[j];
}
array[9] = temp;
Я надеялся, что этот код сдвинет массив влево, а дисплей будет прокручиваться, но все, что я получаю, — это беспорядочное отображение. Если я добавлю задержку, я увижу, что числа отображаются, но без прокрутки.
Является ли базовый алгоритм неверным или его можно использовать, изменив код?
nв качестве переменной цикла, аjдля индексацииarray4[]? Кроме того, вы индексируете массив из 9 элементов за пределами диапазона с помощьюarray[9] = temp;Наконец,array4- это опечатка? - вы используете какarray, так иarray4. - person Weather Vane   schedule 25.07.2017array4[8]? - person Weather Vane   schedule 25.07.2017array4[10]места. Это вне пределов. - person Weather Vane   schedule 25.07.2017jдля чего-то еще в этой функции, вы должны были просто использоватьnво всем цикле. И не используйте глобальные поля в качестве переменных цикла, это очень плохая идея. - person Groo   schedule 27.07.2017