Триггер сделать очень просто. Заводите переменную и после каждого нажатия кнопки меняете её состояние.
Вот, собственно, и весь алгоритм
тут, предпоследнее сообщение.sphincs писал(а):где можно взять библиотеку для работы с LCD на HD44780 через I2C расширитель PCF8574 для CV AVR?
Во вложении смотритеsphincs писал(а):Rtmip, там есть библиотека для LCD, но нет для PCF8574.
этот регистр простой, даАlex писал(а):Какой кошмар, уже для регистров библиотеки ищут...
Спасибо, разобрался.Аlex писал(а):Кнопку, судя по всему, Вы опрашивать уже умеете. Тогда сделайте обычный программный триггер, а по его состоянию развилочку (условие) на два куска программы.
Триггер сделать очень просто. Заводите переменную и после каждого нажатия кнопки меняете её состояние.
Вот, собственно, и весь алгоритм
Код: Выделить всё
#define CONCAT(x,y) x ## y
#define DDR(x) CONCAT(DDR,x)
#define PORT(x) CONCAT(PORT,x)
#define PIN(x) CONCAT(PIN,x)
#define MY_PORT B
#define MY_DDR DDR(MY_PORT)
#define MY_PRT PORT(MY_PORT)
void main(void)
{
MY_PRT=0x0F;
MY_DDR=0xFF;
Наткнулся только что на статью, почитайте - http://we.easyelectronics.ru/part/i2c-r ... f8574.html Возможно, поможет.sphincs писал(а):где можно взять библиотеку для работы с LCD на HD44780 через I2C расширитель PCF8574 для CV AVR? желательно с пояснениями по ней
Код: Выделить всё
#define SS_PIN_UP SS_PORT |=(1<<SS_PIN)
#define SS_PIN_DN SS_PORT &=(~(1<<SS_PIN))
#define SS_STROBE SS_PIN_UP;SS_PIN_DN;
Код: Выделить всё
void spi_led7_convert(unsigned char data, unsigned char pos, unsigned char led_nr) {
typedef union {
unsigned int B;
struct {
unsigned char B1; //nijnii bait idet v buffer 1
unsigned char B0; //verhnii bait idet v buffer 0
};
} SEG;
SEG disp;
char i=0;
disp.B=INI_DISP;
while(i<8){
disp.B|=(data&1)<<(SEG_POS[i]);
data=data>>1;
i++;
}
disp.B&=~(1<<SEG_LED_POS[pos]);
spi_led_buf[0][pos][led_nr]=disp.B1;
spi_led_buf[1][pos][led_nr]=disp.B0;
}
Код: Выделить всё
void spi_led7_convert2(unsigned char data, unsigned char pos, unsigned char led_nr) {
unsigned int disp;
char i=0;
disp=INI_DISP;
while(i<8){
disp|=(data&1)<<(SEG_POS[i]);
data=data>>1;
i++;
}
disp&=~(1<<SEG_LED_POS[pos]);
spi_led_buf[0][pos][led_nr]=(disp&0x00FF);
spi_led_buf[1][pos][led_nr]=(disp>>8);
}