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

laba9 / LAB9

.C
Скачиваний:
5
Добавлен:
29.02.2016
Размер:
4.18 Кб
Скачать
#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&15; //15=00001111b
   DSI2=DSI&240; //240=11110000b
   DSI2=DSI2/16; //сдвиг на 4 разряда вправо
   mjki_write_byte (DSI1*DSI2); //Вывод на CСИ 
 }
}  



















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