Выбрать главу

TIMSK=2;

#asm("sei")

}

main() {

unsigned k;

init_keypad();

lcd_init(16);

lcd_putsf("CVAVR Keypad");

// Читать состояние клавиш и индицировать код клавиши

while (1)

     {

     lcd_gotoxy(0,1);

     if (k=inkey())

        {

        sprintf(buf,“Key code=%Xh“,k);

        lcd_puts(buf);

        }

     else lcd_putsf("NO KEY ");

     delay_ms(500);

  }

}

Работа с алфавитно-цифровым ЖК-индикатором 2x16

Материал взят из демонстрационной версии компилятора CodeVisionAVR С Compiler, автором которого является Pavel Haiduc, HP InfoTech S.R.L.

Использован ЖК-индикатор со встроенным контроллером, подсоединенный к порту PORTC следующим образом:

Текст программы:

// ЖК-индикатор подсоединен к выходам порта P0RTC

// смотри файл lcd.h в директории..\inc

#asm

.equ __lcd_port=0x15;PORTC

#endasm

// Включить в состав программы описания и процедуры для работы с ЖК-индикатором

#include <lcd.h>

void main(void)

{

// Инициализировать ЖК-индикатор для работы

// с 2 строками по 16 символов

lcd_init(16);

// Перейти на 2-ю строку ЖК-индикатора

lcd_gotoxy(0,1);

// Отобразить сообщение

lcd_putsf("Hello world'');

// Остановиться (бесконечный цикл)

while (1);

}

Использование определенных пользователем символов при работе с ЖК-индикатором со встроенным контроллером

Материал взят из демонстрационной версии компилятора CodeVisionAVR С Compiler, автором которого является Pavel Haiduc, HP InfoTech S.R.L.

Использован алфавитно-цифровой ЖК-индикатор. Соединения между ЖК-индикатором и платой со схемой должны быть как можно короче.

Текст программы:

// Включить в программу определения и процедуры для работы со ЖК-индикатором

// в плате STK200/300

#include <lcdstk.h>

typedef unsigned char byte;

// Таблица для определенного пользователем символа

// стрелка, указывающая на верхний правый угол

flash byte char0[8]={

0b0000000,

0Ь0001111,

0b0000011,

0b0000101,

0b0001001,

0b0010000,

0b0100000,

0b1000000};

// Функция, использованная для определения заданного пользователем символа

void define_char(byte flash *рс. 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)

{

// Инициализация ЖКИ для работы

// с 2 строками по 16 символов в строке

lcd_init(16);

// Определить символ 0

define_char(char0,0);

// Переключиться в режим записи в память отображения (Display RAM)

lcd_gotoxy(0,0);

// Отобразить определенный пользователем символ

lcd_putsf("User defined\nchar 0:");

// Отобразить определенный пользователем символ 0

lcd_putchar(0);

// Стоп (бесконечный цикл)

while (1);

}

Бегущий огонь на светодиодах

Материал взят из демонстрационной версии компилятора CodeVisionAVR С Compiler, автором которого является Pavel Haiduc, HP InfoTech S.R.L.

8 светодиодов соединены с выходами порта PORTB и +5 В через резисторы сопротивлением 270 Ом, ограничивающие гок. Аноды светодиодов соединены с линией +5 В.

Текст программы:

// Определение регистров ввода-вывода для ATS0S8515

#include <90sS815.h>

// Частота кварцевого резонатора [Гц]

#define xtal 4000000

// Частота переключения светодиодов [Гц]

#define fmove 2

// Включить светодиод на линии 0 порта P0RTB

unsigned char led_status=0xfe;

// Процедура обработки прерывания по переполнению таймера TIMER1

// вызывается каждые 0,5с

interrupt [TIM1_OVF] void timer1_overflow(void)

{

// preset again TIMER1

TCNT1=0x10000-(xtal/1024/fmove);

// move the LEO

led_status<<=1;

led_status|=1;

if (led_status==0xff) led_status=0xfe;

// turn on the LED

P0RTB=led_status: