Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Контрольная работа по "Программированию"

Автор:   •  Апрель 18, 2021  •  Контрольная работа  •  2,075 Слов (9 Страниц)  •  261 Просмотры

Страница 1 из 9

ОПИСАНИЕ

В данной работе был необходимо при помощи модуля периферийных устройств считывать сигналы посылаемые клавиатурой и определить какая из клавиш была нажата. Номер бригады второй, соответственно реализовано чтение второй строки клавиатуры(от знака «тильда» до клавиши backspace).

Клавиатура подключается по интерфейсу PS/2. Он имеет два рабочих контакта, это CLK и DATA. Клавиатура как управляемое устройство формирует бит на шине DATA в момент, когда CLK находится в падении. Следовательно в момент падения на CLK можно считать бит. Количество бит передаваемых от символа к символу может отличаться, но первые 8 однозначно определяют все клавиши имеющие 8 бит в своём значении.

[pic 1]

РАБОТА ПРОГРАММЫ

Настроено прерывание по спадающему сигналу (подключение к шине CLK). В этот момент считывается значение с шины DATA. В алгоритме описан случай, если на шине находится 0, в противном случае бит выставляется в 1. Так как бит может быть разное количество, а нужно только первые 8, то существует условие и после того как придет 8, они перестанут записываться. Запись происходит в переменную temp типа char побитово.

Контроллер понимает о том что символ передался, если в течении определенной задержки не приходит новых прерываний. В этот момент и начинается обработка пришедшего символа. Обработка символа является свитчем с заранее заданными значениями.

Для вывода используется LCD дисплей WH1604, используемый ранее в лабораторной работе.


#define F_CPU 8000000UL

#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>

#include <stdlib.h>

#include <avr/pgmspace.h>

#include <inttypes.h>

#define LCD_RS 0

#define LCD_RW 1

#define LCD_E 2

#define LCD_CLR 0

#define LCD_DDRAM 7

#define LCD_LINE0_DDRAMADDR 0x00

#define LCD_LINE1_DDRAMADDR 0x40

#define LCD_LINE2_DDRAMADDR 0x14

#define LCD_LINE3_DDRAMADDR 0x50

unsigned char name1[] = {'P', 'a', 'c', 'c', 0xBA, 'a', 0xB7, 'o', 0xB3,'A', 'p', 0xBF, 0xA2, 0xBC, 'o', 0xB3};

unsigned char name2[] = {'K', 'o', 0xBB, 'e', 'c', 0xBD, 'u',0xBA, 'o', 0xB3};;

char temp, clock = 1, i = 0;

void lcd_dat(uint8_t ch) //????? ??????? ?? ?????

{

        PORTA=(ch&0b11110000);

        PORTA|= 1<<LCD_RS;

        PORTA|=1<<LCD_E;

        _delay_ms(1);

        PORTA&=~(1<<LCD_E);

        PORTA&=~(1<<LCD_RS);

        _delay_ms(1);

        PORTA=((ch<<4)&0b11110000);

        PORTA|=1<<LCD_RS;

        PORTA|=1<<LCD_E;

        _delay_ms(1);

        PORTA&=~(1<<LCD_E);

        PORTA&=~(1<<LCD_RS);

        _delay_ms(1);

}

void lcd_com(uint8_t cmd) //???????? ??????? ?? ???????

{

        PORTA=(cmd&0b11110000);

        PORTA|=1<<LCD_E;

        _delay_ms(1);

        PORTA&=~(1<<LCD_E);

        _delay_ms(1);

        PORTA=((cmd<<4)&0b11110000);

        PORTA|=1<<LCD_E;

        _delay_ms(1);

        PORTA&=~(1<<LCD_E);

        _delay_ms(1);

}

void lcd_init(void) //????????????? ???????

{

        _delay_ms(15);

        PORTA=0x00;

        DDRA|=0b11110000;

        DDRA|=1<<LCD_E|1<<LCD_RW|1<<LCD_RS;

        PORTA=0b00110000;

        PORTA|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;

        

        _delay_ms(1);

        PORTA&=~(1<<LCD_E);

        

        _delay_ms(1);

        PORTA=0b00110000;

        PORTA|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;

        _delay_ms(1);

        PORTA&=~(1<<LCD_E);

        

        _delay_ms(1);

        PORTA=0b00100000;

        PORTA|=1<<LCD_E|0<<LCD_RW|0<<LCD_RS;

        

        _delay_ms(1);

        PORTA&=~(1<<LCD_E);

        

        _delay_ms(1);

        

        lcd_com(0x28);

        lcd_com(0x0C);

        lcd_com(0x04);

        

}

void lcd_gotoxy(uint8_t x, uint8_t y)

{

        register uint8_t DDRAMAddr;

        switch(y)

        {

                case 1: DDRAMAddr=LCD_LINE1_DDRAMADDR+x; break;

                case 2: DDRAMAddr=LCD_LINE2_DDRAMADDR+x; break;

...

Скачать:   txt (7.8 Kb)   pdf (119.1 Kb)   docx (34.7 Kb)  
Продолжить читать еще 8 страниц(ы) »
Доступно только на Essays.club