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

laba9 / laba9

.doc
Скачиваний:
8
Добавлен:
29.02.2016
Размер:
111.1 Кб
Скачать

Министерство Образования Республики Беларусь

Белорусско-Российский университет

Кафедра «ЭП и АПУ»

Отчет по лабораторной работе №9

«Исследование устройства матричной жидкокристаллической индикации»

Выполнил: студент гр. ЭП-021

___________________

Проверил:

___________________

2006г.

Задание (вариант 3):

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

#include<reg51.h>

#include<lab9.h>

#include<vv55.h>

#include<dd.h>

#include<i2c.h>

#include<eeprom.h>

//Нуль-терминированная строка 'Состояние ДД3-10' в кодах МЖКИ

unsigned char data str [] = {0x43,0x6F,0x63,0xBF,0x6F,0xC7,0xBD,0xB8,0x65,0x20,0xE0,0xE0,0x33,0x2D,0x31,0x30,0};

unsigned char DSI, DSI1, DSI2;

//Номера выводов Enable и Register Select

#define mjki_pin_e ( 1 << 3 )

#define mjki_pin_reg_sel ( 1 << 1 )

void mjki_pause(void){ // Пауза не менее 0,7 мс

unsigned int tmp_1;

for( tmp_1=0; tmp_1 <350; tmp_1++);

}

void mjki_clear_pause(void){ // Пауза не менее 1,64 мс

unsigned int tmp_1;

for( tmp_1=0; tmp_1 <550; tmp_1++);

}

void mjki_write4bits_command (unsigned char command){//Запись 4-х битной команды

a_channel = command; //в регистр команд

a_channel = (command) | mjki_pin_e; //Формирование сигнала Enable

a_channel = command;

}

void mjki_write8bits_command (unsigned char command){ // Запись полной 8-битной команды

mjki_write4bits_command (command & 0xf0); // Выделение старшего полубайта

mjki_write4bits_command (command <<4); // Выделение младшего полубайта

mjki_pause();

}

void mjki_write_char(unsigned char char_code){ // Запись в регистр данных (символа).

mjki_write4bits_command ( (char_code & 0xf0 ) | mjki_pin_reg_sel );

mjki_write4bits_command ( (char_code << 4 ) | mjki_pin_reg_sel );

mjki_pause();

}

void mjki_write_str(unsigned char str[])// Вывод строки.

{

unsigned char i = 0;

while (str[i]!=0) //Строка должна заканчиваться 0. (Нуль-терминированные строки)

{

mjki_write_char(str[i]);

i++;

}

}

void mjki_clear (void){ // Очистка дисплея

mjki_write8bits_command(0x01);

mjki_clear_pause();

}

void mjki_return_cursor (void){ // Установка курсора в начальную позицию

mjki_write8bits_command(0x02);

mjki_clear_pause();

}

void mjki_write_byte (unsigned char b) //Вывод байта

{

unsigned char D, digit;

digit = b / 100; //Выделение сотен

D = digit;

if (digit == 0) {mjki_write_char(0x20);} //Если 0 то вывод пробела

else {mjki_write_char(digit+0x30);} //иначе вывод цифры на МЖКИ

digit = (b - D*100) / 10; //Выделение десятков

if ((digit == 0) && (D == 0)) {mjki_write_char(0x20);}//Если 0 товывод пробела

else {mjki_write_char(digit+0x30);} //иначе вывод цифры на МЖКИ

digit = (b - D*100 - digit*10); //Выделение единиц

mjki_write_char(digit+0x30); //Вывод цифры на МЖКИ

}

void mjki_gotoXY (unsigned char x, unsigned char y){ // Перевод курсора на позицию X,Y

// X = 0..15; Y = 0,1 , левая верхняя позиция индикатора имеет координаты (0;0)

if (x > 15 ) { x=15; } // Коррекция возможной ошибки входных параметров

if (y > 1 ) { y=1; }

if (y != 0 ) {

x = x+ 0x40;

}

x |= ( 1 << 7 );

mjki_write8bits_command(x);

}

void mjki_init(void){ //Инициализация МЖКИ

unsigned int temp_int_1;

set_channel_a_readmode(0);

for (temp_int_1 = 0; temp_int_1 < 7000; temp_int_1++); // Пауза 15 мс

mjki_write4bits_command(0x30);

for (temp_int_1 = 0; temp_int_1 < 2000; temp_int_1++); // Пауза 4.5 мс

mjki_write4bits_command(0x30);

for (temp_int_1 = 0; temp_int_1 < 50; temp_int_1++); // Пауза 100 мкс

mjki_write4bits_command(0x30);

mjki_write4bits_command(0x20);

mjki_pause();

mjki_write8bits_command(0x28);

mjki_write8bits_command(0x08);

mjki_write8bits_command(0x01);

mjki_write8bits_command(0x06);

mjki_write8bits_command(0x0C); // Курсор невидим

}

void main (void)

{

init_stend(); //Перед началом работы необходимо проинициализировать

//стенд СУ-51

init_vv55(); //Инициализация микросхемы КР580ВВ55

init_DD_3_10(); //Инициализация дискретных датчиков ДД3-ДД10

mjki_init (); //Инициализация МЖКИ

mjki_clear (); //Очистка дисплея

mjki_write_str(str); //

while (1)

{

mjki_gotoXY(0,1);

DSI=read_DD_3_10();

DSI1=DSI&15h; //15=00001111b

DSI2=DSI&240h; //240=11110000b

DSI2=DSI2/16; //сдвиг на 4 разряда вправо

mjki_write_byte (DSI1*DSI2); //Вывод на CСИ

}

}

Блок-схема алгоритма работы:

Очистка МЖКИ

Считать состояние датчиков в DSI

DSI1=DSI&15h

DSI2=DSI&240h

Вывод на МЖКИ DSI1*DSI2

Схема электрическая принципиальная:

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