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: