Как сделать сдвиг значения? У меня переменная Sifra
, и при нажатии на оду из двух клавиш, происходит перезапись значения (то есть нажал раз, у меня 1, и при нажатии на другую клавишу, нужно чтоб было 12, а не 2).
#include <avr/io.h>
#include <avr/delay.h>
#include <stdlib.h>
unsigned char buf = 0;
typedef unsigned char byte;
typedef unsigned long ulong;
ulong array[];
byte led_table[10] = {0b00000011, 0b10011111,
0b00100101, 0b00001101,
0b10011001, 0b01001001,
0b01000001, 0b00011111,
0b00000001, 0b00001001};
ulong show_data = 0; //Отображаемая цифра
ulong dig_data = 0;
byte dig_num = 0; //Отображаемый разряд
char led;
int i = 0, j = 0, y = 0;
char portState[4] = {0xEF, 0xDF, 0xBF, 0x7F};
char inputState[4] = {0x01, 0x02, 0x04, 0x08};
char mass2[4][3] = {{'1', '2', '3', '4'},
{'5', '6', '7', '8'},
{'9', '0', '*', '#'}
};
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 timer2()
{
for (i = 0; i < 4; i++)
{
PORTD = portState[i];
for (j = 0; j < 4; j++)
{
if (((PIND & inputState[j]) == 0))
{
while ((PIND & inputState[j]) != inputState[j]) {};
led = mass2[i][j];
}
}
}
}
void show_dig()
{
//SS=0; //Ни чего не кажем
PORTB &= ~(1 << 2);
if (dig_num == 0)
{
dig_data =
show_data; //Если показываем первую цифру обнавляем переменную
dig_num++;
}
spi_transfer(dig_num); //Отправляем байт для отображения разряда
spi_transfer(led_table[dig_data %
10]); //Получаем разряд из dig_data и отправляем байт с цифрой
dig_data /= 10;
dig_num <<= 1; //Смещаем бит для отображения следующего разряда
//SS=1; //Показываем разряд
PORTB |= (1 << 2); // включаем
//for(int i=0;i<10000;i++);
}
int main(void)
{
PORTB = 0;
DDRB = 0x2C; //Настраиваем порт для SPI
ACSR = 0x80; //Отключаем компаратор
//Включаем SPI
//Биты будем отправлять LSB-MSB, т.е. от младших к старшим
SPCR = 0x70;
SPSR = 0;
PORTD = 0xFF;
DDRD = 0xF0;
while (1)
{
timer2();
show_dig();
/*if(led == 0b110001)
{
int g=5000;
show_data =g;
while(1)
show_dig(show_data--);
g<<1;
}
*/
int Sifra;
switch (led)
{
case 49:
Sifra = 1;
break;
case 50:
Sifra = 2;
break;
}
show_data = Sifra;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Написал программу, которая бы разлагала любое целое число на множители
Не получается пройти тестовый вопросПодскажите пожалуйста:
Пытаюсь подключить в Qt проект на С++ (никакие собственные библиотеки Qt не используются) библиотеки ole32 и oleaut32 из набора windows SDK