09.11.2006, 01:39
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Сообщение от Calima
|
Для форматирования в вашем случае необходимо написать sprintf(lcd_buffer," temperature %u",g); - это для типа преобразуемой переменной usigned int (этого типа дожна быть переменная g, принимающая в данном случае значение больше 255, но меньше 65535).
|
Zemlyanov
Вчитайся вниматель тебе человек дело советует.
А если не понял почитай Кернигана и Ричи.
|
|
|
|
09.11.2006, 01:44
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Код:
|
void main() {
BYTE start;
int_count=INTS_PER_SECOND;
set_timer0(0);
setup_counters( RTCC_INTERNAL, RTCC_DIV_16);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
do {
If(flag.sec)
{
printf("%u
",seconds);
flag.sec=0;
}
} while (TRUE);
} |
вот пример вывода числа .
|
|
|
|
09.11.2006, 01:55
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Цитата:
|
7.3. Форматный вывод - функция PRINTF
Две функции: PRINTF для вывода и SCANF для ввода (следу-
ющий раздел) позволяют преобразовывать численные величины в
символьное представлEние и обратно. Они также позволяют ге-
нерировать и интерпретировать форматные строки. Мы уже всюду
в предыдущих главах неформально использовали функцию PRINTF;
здесь приводится более полное и точное описание. Функция
PRINTF(CONTROL, ARG1, ARG2, ...)
преобразует, определяет формат и печатает свои аргументы в
стандартный вывод под управлением строки CONTROL. Управляю-
щая строка содержит два типа объектов: обычные символы, ко-
торые просто копируются в выходной поток, и спецификации
преобразований, каждая из которых вызывает преобразование и
печать очередного аргумента PRINTF.
Каждая спецификация преобразования начинается с символа
% и заканчивается символом преобразования. Между % и симво-
лом преобразования могут находиться:
- знак минус, который указывает о выравнивании преобразован-
ного аргумента по левому краю его поля.
- Строка цифр, задающая минимальную ширину поля. Преобразо-
ванное число будет напечатано в поле по крайней мере этой
ширины, а если необходимо, то и в более широком. Если пре-
образованный аргумент имеет меньше символов, чем указанная
ширина поля, то он будет дополнен слева (или справа, если
было указано выравнивание по левому краю)заполняющими сим-
волами до этой ширины. Заполняющим символом обычно являет-
ся пробел, а если ширина поля указывается с лидирующим ну-
лем, то этим символом будет нуль (лидирующий нуль в данном
случае не означает восьмеричной ширины поля).
- Точка, которая отделяет ширину поля от следующей строки
цифр.
- Строка цифр (точность), которая указывает максимальное
число символов строки, которые должны быть напечатаны, или
число печатаемых справа от десятичной точки цифр для пере-
менных типа FLOAT или DOUBLE.
- Модификатор длины L, который указывает, что соответствую-
щий элемент данных имеет тип LONG, а не INT.
Ниже приводятся символы преобразования и их смысл:
D - аргумент преобразуется к десятичному виду.
O - Аргумент преобразуется в беззнаковую восьмеричную форму
(без лидирующего нуля).
X - Аргумент преобразуется в беззнаковую шестнадцатеричную
форму (без лидирующих 0X).
U - Аргумент преобразуется в беззнаковую десятичную форму.
C - Аргумент рассматривается как отдельный символ.
S - Аргумент является строкой: символы строки печатаются до
тех пор, пока не будет достигнут нулевой символ или не бу-
дет напечатано количество символов, указанное в специфика-
ции точности.
E - Аргумент, рассматриваемый как переменная типа FLOAT или
DOUBLE, преобразуется в десятичную форму в виде
[-]M.NNNNNNE[+-]XX, где длина строки из N определяется
указанной точностью. Точность по умолчанию равна 6.
F - Аргумент, рассматриваемый как переменная типа FLOAT или
DOUBLE, преобразуется в десятичную форму в виде
[-]MMM.NNNNN, где длина строки из N определяется указанной
точностью. Точность по умолчанию равна 6. отметим, что эта
точность не определяет количество печатаемых в формате F
значащих цифр.
G - Используется или формат %E или %F, какой короче; незна-
чащие нули не печатаются.
Если идущий за % символ не является символом преобразования,
то печатается сам этот символ; следовательно,символ % можно
напечатать, указав %%.
Большинство из форматных преобразований очевидно и было
проиллюстрировано в предыдущих главах. Единственным исключе-
нием является то, как точность взаимодействует со строками.
Следующая таблица демонстрирует влияние задания различных
спецификаций на печать "HELLO, WORLD" (12 символов). Мы по-
местили двоеточия вокруг каждого поля для того, чтобы вы
могли видеть его протяженность.
:%10S: :HELLO, WORLD:
:%10-S: :HELLO, WORLD:
:%20S: : HELLO, WORLD:
:%-20S: :HELLO, WORLD :
:%20.10S: : HELLO, WOR:
:%-20.10S: :HELLO, WOR :
:%.10S: :HELLO, WOR:
Предостережение: PRINTF использует свой первый аргумент
для определения числа последующих аргументов и их типов. Ес-
ли количество аргументов окажется недостаточным или они бу-
дут иметь несоответственные типы, то возникнет путаница и вы
получите бессмысленные результаты.
|
|
|
|
|
10.11.2006, 13:33
|
|
Прохожий
Регистрация: 28.02.2005
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Относительно printf, sprintf и stdout - почитайте хелп к используемому Вами компиллятору. Чем пользуетесь?
Относительно вывода русских символов на жки:
static const char perecod[64] = {
'A' , 0xA0, 'B' , 0xA1, 0xE0, 'E' , 0xA3, 0xA4, 0xA5, 0xA6, 'K' , 0xA7, 'M' , 'H' , 'O' , 0xA8,
'P' , 'C' , 'T' , 0xA9, 0xAA, 'X' , 0xE1, 0xAB, 0xAC, 0xE2, 0xAD, 0xAE, 'b' , 0xAF, 0xB0, 0xB1,
'a' , 0xB2, 0xB3, 0xB4, 0xE3, 'e' , 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 'o' , 0xBE,
'p' , 'c' , 0xBF, 'y' , 0xE4, 'x' , 0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7 };
int putchar(int char_print)
{
if(char_print ›= 0xC0)
char_print = perecod[char_print - 0xC0];
else
{
if(char_print ›= 0x80)
char_print += 0x40;
}
return char_print;
}
// формируем целую строку
void wr_lcd_string(char posit,const char *massiv_LCD)
{
pos((posit-1)*64); // вычисляем строку для вывода, 1- первая, 2 - вторая, функция pos(x) - установка начального адреса для вывода
for(char i=0;i‹16;i++)
wrdata(putchar(*massiv_LCD++));
}
|
|
|
|
11.11.2006, 11:02
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Как добавить библиотеки в Proteus
|
|
|
|
11.11.2006, 11:06
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Обычно копированием в папки LIBRARY и MODELS.
А так же добавляя пути SYSTEM-› SET PATHs.
|
|
|
|
11.11.2006, 11:19
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Сообщение от Calima
|
std out почитайте хелп к используемому Вами компиллятору. Чем пользуетесь?
|
Пользуюсь CodeVisionAVR.В его хелпе про stdout нет ни слова.У меня есть вот такой масив(руский текст)
flash unsigned char Mes1[]={129,164,101,188,187,199,189,111,179,32,66,97,227 ,184,188,0};
Массив я могу выводить побайтно на ЛСД при помощи lcd_putchar(Mes1[0]) а как его можно вывести сразу весь чтобы было типа lcd_putchar(Mes1[])?Если я так пишу то компилятор просит указать номер байта [?]в массиве.Что делать?
|
|
|
|
11.11.2006, 11:37
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Дайте кто нибудь CVAVR 1.25 .
Не хочу старый ставить.
Уверен что в хелпе описано как строки выводить!
|
|
|
|
11.11.2006, 12:01
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Сообщение от dosikus
|
Дайте кто нибудь CVAVR 1.25 .
Не хочу старый ставить.
Уверен что в хелпе описано как строки выводить!
|
The LCD Functions are intended for easy interfacing between C programs and alphanumeric LCD modules built with the Hitachi HD44780 chip or equivalent.
The prototypes for these functions are placed in the file lcd.h, located in the ..INC subdirectory. This file must be #include -ed before using the functions.
Prior to #include -ing the lcd.h file, you must declare which microcontroller port is used for communication with the LCD module.
The following LCD formats are supported in lcd.h: 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 and 2x40 characters.
Example:
/* the LCD module is connected to PORTC */
#asm
.equ __lcd_port=0x15
#endasm
/* now you can include the LCD Functions */
#include ‹lcd.h›
The LCD module must be connected to the port bits as follows:
[LCD] [AVR Port]
RS (pin4) ------ bit 0
RD (pin 5) ------ bit 1
EN (pin 6) ------ bit 2
DB4 (pin 11) --- bit 4
DB5 (pin 12) --- bit 5
DB6 (pin 13) --- bit 6
DB7 (pin 14) --- bit 7
You must also connect the LCD power supply and contrast control voltage, according to the data sheet.
The low level LCD Functions are:
void _lcd_ready(void)
waits until the LCD module is ready to receive data.
This function must be called prior to writing data to the LCD with the _lcd_write_data function.
void _lcd_write_data(unsigned char data)
writes the byte data to the LCD instruction register.
This function may be used for modifying the LCD configuration.
Example:
/* enables the displaying of the cursor */
_lcd_ready();
_lcd_write_data(0xe);
void lcd_write_byte(unsigned char addr, unsigned char data);
writes a byte to the LCD character generator or display RAM.
Example:
/* LCD user defined characters
Chip: AT90S8515
Memory Model: SMALL
Data Stack Size: 128 bytes
Use an 2x16 alphanumeric LCD connected
to the STK200+ PORTC header as follows:
[LCD] [STK200+ PORTC HEADER]
1 GND- 9 GND
2 +5V- 10 VCC
3 VLC- LCD HEADER Vo
4 RS - 1 PC0
5 RD - 2 PC1
6 EN - 3 PC2
11 D4 - 5 PC4
12 D5 - 6 PC5
13 D6 - 7 PC6
14 D7 - 8 PC7 */
/* the LCD is connected to PORTC outputs */
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
/* include the LCD driver routines */
#include ‹lcd.h›
typedef unsigned char byte;
/* table for the user defined character
arrow that points to the top right corner */
flash byte char0[8]={
0b0000000,
0b0001111,
0b0000011,
0b0000101,
0b0001001,
0b0010000,
0b0100000,
0b1000000};
/* function used to define user characters */
void define_char(byte flash *pc,byte char_code)
{
byte i,a;
a=(char_code‹‹3) | 0x40;
for (i=0; i‹8; i++) lcd_write_byte(a++,*pc++);
}
void main(void)
{
/* initialize the LCD for 2 lines & 16 columns */
lcd_init(16);
/* define user character 0 */
define_char(char0,0);
/* switch to writing in Display RAM */
lcd_gotoxy(0,0);
lcd_putsf("User char 0:");
/* display used defined char 0 */
lcd_putchar(0);
while (1); /* loop forever */
}
unsigned char lcd_read_byte(unsigned char addr);
reads a byte from the LCD character generator or display RAM.
The high level LCD Functions are:
unsigned char lcd_init(unsigned char lcd_columns)
initializes the LCD module, clears the display and sets the printing character position at row 0 and column 0. The numbers of columns of the LCD must be specified (e.g. 16). No cursor is displayed.
The function returns 1 if the LCD module is detected and 0 if it is not.
This is the first function that must be called before using the other high level LCD Functions.
void lcd_clear(void)
clears the LCD and sets the printing character position at row 0 and column 0.
void lcd_gotoxy(unsigned char x, unsigned char y)
sets the current display position at column x and row y. The row and column numbering starts from 0.
void lcd_putchar(char c)
displays the character c at the current display position.
void lcd_puts(char *str)
displays at the current display position the string str, located in SRAM.
void lcd_putsf(char flash *str)
displays at the current display position the string str, located in FLASH.
|
|
|
|
11.11.2006, 12:03
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
нужна модель памяти на протеус DataFlash AT45
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:21.
|
|