laba9 / laba9
.docМинистерство Образования Республики Беларусь
Белорусско-Российский университет
Кафедра «ЭП и АПУ»
Отчет по лабораторной работе №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
Схема электрическая принципиальная: