Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Djangirov1 / Vfrc2

.doc
Скачиваний:
16
Добавлен:
15.02.2015
Размер:
1.55 Mб
Скачать

Тема: Вывод информации на различные устройства отображения

Цель работы: научиться осуществлять вывод на различные устройства отображения с помощью микроконтроллера.

Вариант 13

Задание №1

Реализовать вывод фамилии, имени, отчества (транслитом) на виртуальный терминал Proteus VSM.

Код:

#include <avr/io.h>

#include <stdio.h>

#include <string.h>

#define FOSC 11059200 // частота кварца

#define BAUD 9600 // скорость передачи данных

#define USART_UBBR_VALUE (FOSC/16/BAUD)-1 // значение, которое необходимо записать

//в UBRR чтобы получить требуемую скорость передачи

void USART_Init(void);

uint8_t USART_vReceiveByte(FILE *stream);

void USART_vSendByte(uint8_t u8Data, FILE *stream);

// Создаем поток для ввода/вывода на/с UART для использования стандартных

// функции ввод/вывода

FILE uart_file=FDEV_SETUP_STREAM(USART_vSendByte, USART_vReceiveByte,_FDEV_SETUP_RW); // поток доступен для чтения и записи

void USART_Init(void)

{ // установить скорость передачи данных

UBRRH=(uint8_t)((USART_UBBR_VALUE)>>8);

UBRRL=(uint8_t)(USART_UBBR_VALUE);

// Установить формат кадра - 8 бит, нет проверки четности, 1 стоп бит

UCSRC = (1<<URSEL)|(0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);

// Включить передатчик и приемник

UCSRB = (1<<RXEN)|(1<<TXEN);

UBRRH=(uint8_t)((USART_UBBR_VALUE)>>8);

}

void USART_vSendByte(uint8_t u8Data, FILE *stream)

{

// подождать пока передастся прошлый бит

while((UCSRA&(1<<UDRE)) == 0);

// передать данные

UDR = u8Data;

}

uint8_t USART_vReceiveByte(FILE *stream)

{

// Подождать пока осуществиться прием байта

while((UCSRA&(1<<RXC)) == 0);

// возвратить принятые данные

return UDR;

}

int main( void )

{

stdout=stdin=&uart_file; // указываем, что стандартные потоки должны ссылаться на //созданный

//поток

uint8_t i=0; // счетчик цикла

DDRD=0b11111110; // устанавливаем первый вывод порта D на ввод, остальные на вывод

//(первый вывод служит для приема данных с USART, второй – для передачи)

char str[]="Kromykh Vladislav"; // выводимая строка

USART_Init(); // инициализация USART

while(1){

for (i=0;i<=strlen(str);i++)

{

printf("%s\n\r", str);

}}

;

return 0;

}

Скриншот работы в Proteus:

Задание №2

Реализовать вывод на два семисегментных индикатора информации согласно варианту в таблице по нажатию кнопки, подключенной к нулевому выводу порта А. Если значение нельзя отобразить на индикаторе, то начать с начального. Проверить работу программы в Proteus VSM.

Код:

//#include <delay.h>

//#include <mega16.h>

#include<avr/io.h>

#include<util/delay.h>

#include<string.h>

#include<stdio.h>

unsigned char number[] =

{

0x3f, //0

0x06, //1

0x5b, //2

0x4f, //3

0x66, //4

0x6d, //5

0x7d, //6

0x07, //7

0x7f, //8

0x6f //9

};

unsigned char count1 = 8;

unsigned char count2 = 5;

void funct(int x) //функция вычитает значение-параметр из числа отображённого на индикаторах

{

if((count2-x)<0)

{

count2=count2+10-x;

if(count1==0)

{

count1=8;

count2=5;

PORTB=number[count1];

PORTD=number[count2];

}

else

{

count1--;

PORTB=number[count1];

PORTD=number[count2];

}

}

else

{

count2-=x;

PORTD=number[count2];

}

_delay_ms(100); //

}

void init()

{

PORTB = 0x7f;//начальная 8 на одном индикаторе

DDRB = 0xff;//порт на вывод

PORTD = 0x6d;//начальная 5 на втором

DDRD = 0xff;

PORTA = 0x00;//обнуление регистра с кнопкой

DDRA = 0x00; //порт на ввод

}

void main( void )

{

init();

while(1)

{

int temp = PINA; //опрос порта А

if(temp == 1)//если кнопка нажата

{

funct(1);

}

else

{

funct(3);

}

}

}

Скриншот работы в Proteus:

Задание №3

Реализовать вывод фамилии, имени, отчества (транслитом) на жидкокристаллическийдисплей в программе Proteus VSM.

Код:

#include <avr/delay.h>

#include<avr/io.h>

#include "lcd_lib.h"

void main(void)

{

DDRA=0b11110111;

DDRB=0xFF;

while(1)

{

unsigned char line1[]="Yavkin Aleksandr";

LCDinit();

LCDclr();

LCDcursorOFF();

LCDGotoXY(0,0);

LCDstring(line1, sizeof(line1)-1);

_delay_ms(1);

}

}

Скриншот работы в Proteus:

Задание №4

Реализовать на микроконтроллере программу вывода на светодиодную матрицу следующих символов и знаков (знакоместо 8Ч5 ):

Вариант №13 Буквы Б, B, Г.

Код:

#include <avr/io.h>

#include <stdio.h>

#include <string.h>

#include <util/delay.h>

int text[] ={0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b00000000,0b01110110,0b01110110,0b01110110,0b01111001,0b11111111,0b11111111,0b11111111,0b00000000,0b01110110,0b01110110,0b01110110,0b10011001,0b11111111,0b11111111,0b11111111,0b11111111,0b00000000,0b01111111,0b01111111,0b01111111,0b00111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111};

void Output(int *letter,int *counter)

{

int i,j=1;

for (i=0;i<8;i++)

{

PORTA=j;

PORTB=letter[i+*counter];

j*=2;

_delay_ms (1);

}

}

int main( void )

{

DDRA = 0xFF;

DDRB = 0xFF;

int t = 0;

int delay = 50;

int counter=0;

while(1)

{

if (counter>27) {counter=0;}

for (t=0;t<delay;t++)

{

Output(text,&counter);

}

counter++;

}

return 0;

}

Скриншот работы в Proteus:

Вывод: на этой лабораторной работе я научился осуществлять вывод информации с МК на различные устройства отображения информации

Соседние файлы в папке Djangirov1