unsigned char RecvByte(void) // ввод байта{...}
void main(void)
unsigned char ch, ch1, ch2;
int I;
init(); // инициализация COM-порта
while(1);
{ I2CM=1; // режим мастера
start();
ch=0xAO;
SendByte(ch); // передача адреса
ch=0x02; // адрес регистра с секундами
SendByte(ch);
start();
ch=0xA1; // прием информации
SendByte(ch);
ch=RecvByte; // прием байта с секундами
Noack(); // нет ответа от МК
stop();
ch1=((ch>>4)&0xF)+0x30; // перевод двоично-десятичного кода в ASCII
ch2=(ch&0xF)+0x30; // выделяем только младшие байты
Wsio(ch1);Wsio(ch2);
for(I=0; I<10000; I++)
Delay();
}
Часы реального времени PCF8583
4.3.7. Подключение жидкокристаллического индикатора к миктроконтроллеру.
Жидкокристаллический индикатор WH1602D-NGK-CP
Для работы ЖКИ используются 2 регистра:
Находится по адресу 080006h (внешняя память)
Биты регистра управления
Бит |
Название |
Описание |
0 |
E |
Наличие положительного импульса на входе E фиксирует данные на шине данных (сигналы RW, RS к этому моменту должны быть установлены) |
1 |
RW |
Переключение шины данных ЖКИ 1 – чтение 0 – запись |
2 |
RS |
0 – переключение в режим команд 1 – переключение в режим данных |
3 |
Reserved |
Необходимо при каждой записи в разряд установить 1 |
Адрес 080001h во внешней памяти. 8битные данные и команды.
В модуле ЖКИ встроен контроллер, который имеет два 8битных регистра:
Там же есть память данных DDRAM для хранения данных, выводимых на экран. Счетчик адреса назначает адрес памяти DDRAM.
Схема соответствия между адресом DDRAM и позициями ЖКИ
|
R/W – всегда 0 – только записываем
RS – запись данных в память
I/D – 0 или 1 – сдвиг вправо или влево
sh – 1 – разрешает сдвиг
D – включить/выключить
C – 1 – курсор отображается
0 – не отображается
L – 0 низкий уровень
H – 1 высокий уровень
Символ 1: в шестнадцатеричном коде 0x31
Функции работы с ПЛИС MAX3064
void WriteMax(unsigned char xdata *regnum, unsigned char val)
{
DPP=0x8;
*regnum=val;}
unsigned char ReadMax(unsigned char xdata *regnum)
{
unsigned char val=0;
DPP=0x8; // 8 страница внешней памяти
val=*regnum;
return val; }
void strobe(char c)
{unsigned int i;
WriteMax(0x6, c | 0x1); // E=1
WriteMax(0x6, c&0xFF); // E=0
for(i=0; i<300; i++) continue; // пауза 2 мс
}
c – const если с=0x8 (RS = 1000) – запись команды;
если c=0xc (RS = 1100)– запись данных.
void LCD_clear(void)
{int i;
WriteMax(0x1, 0x1); // выставить код на шине данных 00000001 (команда очистки)
strobe(0x8); // запись команды
for(i=1; i<300; i++) continue; }
void LCD_GotoXY(unsigned char x, bit y)
{int i;
WriteMax(0x1, 0x80 | (x+((y)?0x40:0))); // 0х1-адрес во внешней памяти, 0х80-единица в 7м бите определяет команду записи адреса, x – номер позиции, y – строка 0 или 1
strobe(0x1);
for(i=1; i<6000; i++) continue; // пауза на время выполнения команды
}
void LCD_Putch(char ch)
{WriteMax(0x1, ch);
strobe(0xC); }
D – 1 – включить дисплей
0 – выключить дисплей
C – 1 – отображать курсор
0 – выключить курсор
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.