#include "aduc812.h" #include "driver_lcd.h" #include "max.h" #include "driver_io.h" unsigned char data_ind; unsigned char c_ind; unsigned char bf_flag; unsigned char read_bf_lcd() { c_ind = 0x03; // RS = 0; R/W = 1 (read); E = 1 write_max(6, c_ind); // data_ind = read_max(1); // читаем содержимое DATA_IND; старший бит - BF bf_flag = data_ind >> 7; // получаем BF c_ind = 0x02; // Сброс: E = 0 write_max(6, c_ind); // return bf_flag; } unsigned char clear_lcd(void) { // Опрашиваем флаг BF while (read_bf_lcd() == 1); data_ind = 0x01; //Записываем в DATA_IND код команды установки адреса DD RAM а 0x01 write_max(1, data_ind); // c_ind = 0x01; // Устанавливаем значение RS=0,R/W=0, и выставляем строб E, для write_max(6, c_ind); // этого в C_IND заносим значение 0x01. c_ind = 0x00; // сбрасываем строб E (запись в С_IND 0x00). write_max(6, c_ind); // return 0; } void to_home_lcd(void) { // Опрашиваем флаг BF while (read_bf_lcd() == 1); data_ind = 0x02; // Записываем в DATA_IND код команды перевод курсора write_max(1, data_ind); // на первую позицию 0x02. c_ind = 0x01; // Устанавливаем значение RS=0,R/W=0 и выставляем строб E, write_max(6, c_ind); // для этого в C_IND заносим значение 0x01. c_ind = 0x00; // сбрасываем строб E (запись в С_IND 0x00). write_max(6, c_ind); // } void set_address_ddram_lcd(unsigned char address) { // Опрашиваем флаг BF while (read_bf_lcd() == 1); data_ind = address; // Записываем в DATA_IND код команды уcтановки write_max(1, data_ind); // адреса DD RAM, т.е. в старший разряд DATA_IND 1, а в младшие семь адрес в DD RAM. c_ind = 0x01; // Устанавливаем значение RS=0,R/W=0, и выставляем строб E, для write_max(6, c_ind); // этого в C_IND заносим значение 0x01. c_ind = 0x00; // сбрасываем строб E (запись в С_IND 0x00). write_max(6, c_ind); // } void goto_xy_lcd(unsigned char x, unsigned char y) { unsigned char address; y >>= 1; address = ((y << 6) | 0x80) | (--x); set_address_ddram_lcd(address); } unsigned char print_char_lcd(char symbol) { // Опрашиваем флаг BF while (read_bf_lcd() == 1); data_ind = symbol; // Записываем в DATA_IND код двоичный код write_max(1, data_ind); // выводимого символа c_ind = 0x05; // Устанавливаем значение RS=1,R/W=0, и выставляем строб E, для write_max(6, c_ind); // этого в C_IND заносим значение 0x05 c_ind = 0x04; // сбрасываем строб E (запись в С_IND 0x04). write_max(6, c_ind); // return 0; } void print_string_lcd(char * str) { while (*str ) { print_char_lcd(*str++); } }