Примеры CodeVisionAVR - Счетчик & ЖКИ

Автор: Internet. Posted in Початківцям з CV AVR

Зміст статті

 

Выводим информацию на ЖКИ в виде счетчика нажатий кнопки.
Вывод на экран  функцией putchar .
Code
/*****************************************************
Project : Ver. 1.0.0
Version : счетчик 0000
Date : 24.10.2011 
Company : c2.at.ua 
Chip type : ATmega8
Program type : Application
Clock frequency : 4,000000 MHz
*****************************************************/ 
#include                          // библиотека ввода вывода микроконтроллера
#asm
 .equ __lcd_port=0x12 ;PORTD           // сообщаем куда подключен экран
#endasm
#include                               // библиотека для LCD
#include                           // библиотека задержки
int cnt=0;
void main(void) 

PORTB=0xFF; 
DDRB=0x00; 
PORTC=0x01; 
DDRC=0x00; 
PORTD=0x00; 
DDRD=0x00; 
ACSR=0x80; 
lcd_init(16); 
while (1) 

 lcd_gotoxy(0,0); 
lcd_putsf("Cnt="); 
lcd_putchar((cnt/1000)%10+0x30); 
lcd_putchar((cnt/100)%10+0x30); 
lcd_putchar((cnt/10)%10+0x30); 
lcd_putchar(cnt%10+0x30); 
if(PINB.2==0) { 
while(PINB.2==0); 
cnt=cnt+1; 

}

Теперь тоже самое, но вывод на экран  функцией  sprintf.
Code
/*****************************************************
Project : Ver. 1.0.0
Version : счетчик 0000
Date : 24.10.2011 
Company : c2.at.ua 
Chip type : ATmega8
Program type : Application
Clock frequency : 4,000000 MHz
*****************************************************/ 
 #include                          // библиотека ввода вывода микроконтроллера
#asm
 .equ __lcd_port=0x12 ;PORTD            // сообщаем куда подключен экран
#endasm
 #include                              // библиотека для LCD
 #include                          // библиотека задержки                    
 #include                           // стандартная библиотека вывода символов на экран 
unsigned char lcd_buffer[16]; 
int cnt=0;
void main(void) 

PORTB=0xFF; 
DDRB=0x00; 
PORTC=0x01; 
DDRC=0x00; 
PORTD=0x00; 
DDRD=0x00; 
ACSR=0x80; 
lcd_init(16); 
while (1) 

 sprintf(lcd_buffer,"Cnt=%i",cnt);    // записуем в масив показания на экран 
 lcd_clear();                                  // чистим дисплей перед выводом
 lcd_puts(lcd_buffer);                    // выводим масив на LCD
delay_ms(50); 
 if(PINB.2==0) {                           //
while(PINB.2==0); 
cnt=cnt+1; 

}

Функция  itoa.
Code
/*****************************************************
Project : Ver. 1.0.0
Version : счетчик 0000
Date : 24.10.2011 
Company : c2.at.ua 
Chip type : ATmega8
Program type : Application
Clock frequency : 4,000000 MHz
*****************************************************/ 
#include <mega8.h> // библиотека ввода вывода микроконтроллера
#asm
.equ __lcd_port=0x12 ;PORTD // сообщаем куда подключен экран
#endasm
#include <lcd.h> // библиотека для LCD
#include // библиотека задержки 
#include // стандартная библиотека вывода символов на экран 
char str_LCD [4]; //зарезервируерм 4 байта для строковой переменной
int cnt=0;
void main(void) 

PORTB=0xFF; 
DDRB=0x00; 
PORTC=0x02; 
DDRC=0x00; 
PORTD=0x00; 
DDRD=0x00; 
ACSR=0x80; 
lcd_init(16); 
while (1) 

lcd_gotoxy(0,0); //Куда выводить: позиция, строка 
lcd_clear(); // чистим дисплей перед выводом 
lcd_putsf("Cnt=");
itoa(cnt, str_LCD); //перевод числа в строку 

lcd_puts(str_LCD); //Вывод на ЖКИ 
delay_ms(50); 
if(PINB.2==0) { //
while(PINB.2==0); 
cnt=cnt+1; 

if(PINB.3==0) { //
while(PINB.3==0); 
cnt=cnt-1; 

}
}

Итог практически одинаков, но размеры скомплимированых хеков различаются значительно.
Скачать  proteus.