Страница: 1 |
Страница: 1 |
Вопрос: програмирование lcd на с
Добавлено: 12.08.06 07:51
Автор вопроса: a | ICQ: 267-795-129
Помогите кто знает язык с и visual basic
как этот пример будет выглядить на visual basic
или другой пример управления lcd на vb тип lcd
16*2 контроллер HD44780.
/* Sample Software to display a message on a 16 x2 character LCD module
/* from a parallel port of a PC
#include
#include
#include
#define PORTADDRESS 0x378 /*Enter port address here */
#define DATA PORTADDRESS+0 /*LCD data port */
#define CONTROL PORTADDRESS+2 /*LCD control port */
void main (void)
{
/* Total of 40 characters including spaces in each line of string */
char string[] = {”>> HANTRONIX << “
“ABC abc 123,!@$? “};
char init[10];
int count;
int len;
init[0] = 0x0F; /* Initialize display */
init[1] = 0x01; /* Clear display */
init[2] = 0x38; /* Dual line 8 bits */
_out(CONTROL, _inp(CONTROL) & 0xDF); /* Reset control port */
_out(CONTROL, _inp(CONTROL) | 0x08); /*Set RS */
/* Initialization routine */
for (count = 0; count <= 2; count++)
{
_out(DATA, init[count]);
_out(CONTROL,_inp(CONTROL) | 0x01; /*Set Enable */
delay(20);
_out(CONTROL,_inp(CONTROL) & 0xFE; /*Reset Enable */
delay(20);
}
_out(CONTROL, _inp(CONTROL) & 0xF7);/*Reset RS */
/* Output the message */
len = strlen(string);
for (count = 0; count < len; count++)
{
_out(DATA, string[count]);
_out(CONTROL,_inp(CONTROL) | 0x01; /*Set Enable */
delay(2);
_out(CONTROL,_inp(CONTROL) & 0xFE); /*Reset Enable */
delay(2);
}
}
Ответы
Всего ответов: 3
Номер ответа: 1
Автор ответа:
Илья
ICQ: 251647191
Вопросов: 37
Ответов: 167
Web-сайт:
Профиль | | #1
Добавлено: 12.08.06 19:26
на ВБ это не получится, так как необходим драйвер ЛПТ порта. почитай даташит от дисплея и просто сделай вывод команд
Номер ответа: 2
Автор ответа:
G.Andrey Denisov
Вопросов: 2
Ответов: 3
Профиль | | #2
Добавлено: 10.02.11 10:46
В папку Windows\System32 кидаем inpout32.dll
Создаем в проекте модуль:
Alias "Inp32" (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib "inpout32.dll" _
Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
На форме раpмещаем таймер Timer1. Пишем следующее:
Dim LCD_DATA_ADDRESS ' Переменная адреса вывода данных
Dim LCD_CONTROL_ADDRESS ' Переменная адреса шины управления
Private Sub Form_Load()
LPT = &H378 ' Адрес LPT
LCD_DATA_ADDRESS = LPT + 0 ' Адрес данных
LCD_CONTROL_ADDRESS = LPT + 2 ' Адрес управления
LCD_Init ' Инициализация LCD
LCD_DisplayCharacter (&H47) ' Выводим Данные
LCD_DisplayCharacter (&H41)
LCD_DisplayCharacter (&H44)
LCD_DisplayCharacter (&H20)
LCD_DisplayCharacter (&H53)
LCD_DisplayCharacter (&H59)
LCD_DisplayCharacter (&H53)
End Sub
Sub LCD_Init() ' Инициализация LCD
LCD_InitDriver ' Инициализация драйвера
LCD_Clear ' Очистка LCD
LCD_CursorOff ' Выкл курсора
End Sub
Sub LCD_Clear()
LCD_WriteControl (&H1) ' Очистка lcd
End Sub
Sub LCD_Home()
LCD_WriteControl (&H2) ' Курсор на 1символ 1й строки
End Sub
Sub LCD_DisplayCharacter(char)
LCD_WriteData (char) ' Вывести символ
End Sub
Sub LCD_Cursor(row, column) ' Курсор на позицию
Select Case row ' Выбор строки
Case 1 ' Если 1я строка
LCD_WriteControl &H80 + column - 1 ' на адрес 1й строки + позиция
Case 2 ' Если 2я строка
LCD_WriteControl &HC0 + column - 1 ' на адрес 2й строки + позиция
Case 3 ' Если 3я строка
LCD_WriteControl &H94 + column - 1 ' на адрес 3й строки + позиция
Case 4 ' Если 4я строка
LCD_WriteControl &HD4 + column - 1 ' на адрес 4й строки + позиция
End Select
End Sub
Sub LCD_CursorLeft()
LCD_WriteControl &H10 ' Курсор влево
End Sub
Sub LCD_CursorRight()
LCD_WriteControl &H14 ' Курсор вправо
End Sub
Sub LCD_CursorOn()
LCD_WriteControl &HD ' Курсор вкл
End Sub
Sub LCD_CursorOff()
LCD_WriteControl &HC ' Курсор выкл
End Sub
Sub LCD_DisplayOn()
LCD_WriteControl &HC ' Дисплей вкл
End Sub
Sub LCD_DisplayOff()
LCD_WriteControl &H8 ' Дисплей выкл
End Sub
'Конфиг: 1 строчный 8ми символьный LCD. 8ми битная шина данных. Курсор выключен.
' 0 0 1 DL N F 0 0 ; 0 0 1 1 0 0 0 0 = &H30
' 0 0 0 0 1   C B ; 0 0 0 0 1 1 0 0 = &HC
' 0 0 0 0 0 1 ID S ; 0 0 0 0 0 1 1 0 = &H6
Sub LCD_InitDriver() ' Инициализация драйвера
LCD_WriteControl (&H30) ' Конфиг по даташиту
LCD_WriteControl (&H30) ' Конфиг по даташиту
LCD_WriteControl (&H30) ' Конфиг по даташиту
LCD_WriteControl (&HC) ' Конфиг по даташиту
LCD_WriteControl (&H6) ' Конфиг по даташиту
End Sub
Sub LCD_WriteControl(data) ' Запись команд
Out LCD_CONTROL_ADDRESS, &H3 ' RS=0, R/W=0, E=0
Out LCD_DATA_ADDRESS, data ' Вывод команды в шину данных
Out LCD_CONTROL_ADDRESS, &H2 ' RS=0, R/W=0, E=1
Out LCD_CONTROL_ADDRESS, &H3 ' RS=0, R/W=0, E=0
Out LCD_CONTROL_ADDRESS, &H1 ' RS=0, R/W=1, E=0
Wait (10)
End Sub
Sub LCD_WriteData(data) ' Вывод данных
Out LCD_CONTROL_ADDRESS, &H7 ' RS=1, R/W=0, E=0
Out LCD_DATA_ADDRESS, data ' Вывод данных в шину данных
Out LCD_CONTROL_ADDRESS, &H6 ' RS=1, R/W=0, E=1
Out LCD_CONTROL_ADDRESS, &H7 ' RS=1, R/W=0, E=0
Out LCD_CONTROL_ADDRESS, &H5 ' RS=1, R/W=1, E=0
Wait (1)
End Sub
Sub Wait(msec As Integer) ' Функция ожидания
Timer1.Enabled = True ' Включаем таймер
Timer1.Interval = msec ' Шаг таймера
While Timer1.Interval > 0 ' Ждем отработку таймера
DoEvents ' Обработка событий
Wend ' Закончили ждать
Timer1.Enabled = False ' Выключаем таймер
End Sub
Sub Timer1_Timer() ' При отработки таймера
Timer1.Interval = 0 ' выставляем шаг = 0
End Sub
Номер ответа: 3
Автор ответа:
VbStarter
ICQ: 357911808
Вопросов: 118
Ответов: 1340
Web-сайт:
Профиль | | #3
Добавлено: 12.02.11 19:07
археолог...
pcports.ru