Добрый вечер! Подниму эту старую тему, т.к. сам начинающий и столкнулся со следующей проблемой. Вот кусок программы, в котором значение переменной i увеличивается от 1 до 7 и всякий раз оно выводится на дисплей:
Код
#include <avr/io.h> //подключаем библиотеки
#include <avr/delay.h>
#include <stdio.h>
#include <lcd_lib.h>
#define delay _delay_ms(20)
#define button_0 (bit_is_clear(PIND,0)) //макрос - нажата кнопка 0
//итд
char i=-1;
int p=0;
unsigned char array[10];
int main(void)
{
LCDinit();
LCDclr();
LCDcursorOFF();
sprintf(array,"%u",i);
LCDstring(array, 10); //10 - взял с запасом
while(1) //БЕСКОНЕЧНЫЙ ЦИКЛ ОПРОСА КНОПОК
{
if(button_0 && p==0) //проверяем нажатие кнопки 0, если нажата и p=0, продолжаем
{
delay; //антидребезговая задержка
if(button_0 && p==0) //повторно проверяем, нажата ли кнопка. Если да, то
{
if(i<7) //если еще не сдвинуто 7 раз, то продолжить
{
i++; //увеличить i (номер бита)
}
else //иначе установить значение бита = 7
{
i = 7;
}
PORTB = (1<<i); //сдвигаем 1 в порте влево на 1 бит (i-номер бита)
LCDstring(array, 10);
}
else continue; //если кнопка не была нажата, то ПРОДОЛЖАТЬ ДАЛЬШЕ ОПРАШИВАТЬ КНОПКИ
}
//и так далее на разные вариации с переменной i и выводом ее в порт по нажатию кнопки
}
Компилятор выдает предупреждение pointer targets in passing argument 1 of 'sprintf' differ in signedness.
На экране дисплея: 0 и далее в строке разные символы.
Работаю в связке WinAVR + AVRStudio4.
Прошу заранее не пинать...
Сообщение отредактировал Sergey529 - Jan 13 2012, 19:45