Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [VBA]Управление LPT 
:(
    Опции темы
STRIKER221
  Дата 15.9.2008, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



Возможно ли на VBA реализовать управление LPT? Например к date я подключаю светодиод, и чтобы он засветился при подаче команды из VBA.
PM MAIL ICQ   Вверх
kapbepucm
Дата 16.9.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 6
Всего: 12



Видимо, используя ТОЛЬКО VBA- нет. Но есть разные возможности. Например, подключить какую нибудь процедуру из *.dll


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
STRIKER221
Дата 16.9.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



kapbepucm, а как подключить библиотеку?
PM MAIL ICQ   Вверх
kapbepucm
Дата 17.9.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 6
Всего: 12



Основной способ используя Declare. Вот пример модуля:
Код
Option Explicit
Private Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" (ByVal HWND As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal uType As Long) As Long
Public Sub Test()
  MessageBox 0, "Text", "Caption", 0
End Sub



--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
STRIKER221
Дата 18.9.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



kapbepucm, Спасибо, уже разобрался. Вопрос теперь такой 
Код

Private Sub CommandButton16_Click()
Out &H378, 4
Application.Wait (Now + TimeValue("0:00:01"))
Out &H378, 8
Application.Wait (Now + TimeValue("0:00:01"))
Out &H378, 16
Application.Wait (Now + TimeValue("0:00:01"))
Out &H378, 32
Application.Wait (Now + TimeValue("0:00:01"))
End Sub

Как сделать чтобы данный код повторялся, т.е. чтобы после команды Out &H378, 32, опять шла команда Out &H378, 4?
И после нажатия другой кнопки повтор прекращался. Таким макаром:
Код

Private Sub CommandButton16_Click()
Dim k As Integer
Do
k = 0
Out &H378, 4
Application.Wait (Now + TimeValue("0:00:01"))
Out &H378, 8
Application.Wait (Now + TimeValue("0:00:01"))
Out &H378, 16
Application.Wait (Now + TimeValue("0:00:01"))
Out &H378, 32
Application.Wait (Now + TimeValue("0:00:01"))
Loop Until k = 1
End Sub

Система уходит в висяк и кнопку отмены я нажать не могу... :(
И ещё вопрос. Можно ли как-нибудь задать время задержки выполнения команды меньше чем одна секунда? Банальное Application.Wait (Now + TimeValue("0:00:01")/10) не помогло...

Это сообщение отредактировал(а) STRIKER221 - 18.9.2008, 17:02
PM MAIL ICQ   Вверх
kapbepucm
Дата 19.9.2008, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 6
Всего: 12



Цитата(STRIKER221 @  18.9.2008,  16:57 Найти цитируемый пост)
Система уходит в висяк и кнопку отмены я нажать не могу...
Вставляйте DoEvents после задержки.
Цитата(STRIKER221 @  18.9.2008,  16:57 Найти цитируемый пост)
Можно ли как-нибудь задать время задержки выполнения команды меньше чем одна секунда?
Попробуйте использовать Sleep
Код
Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)



Это сообщение отредактировал(а) kapbepucm - 19.9.2008, 15:23


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
kapbepucm
Дата 19.9.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 6
Всего: 12



Код
Option Explicit
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Private Flag As Boolean
Private Sub CommandButton16_Click()
  Flag = False
  Cikl
End Sub
Private Sub CommandButton17_Click()
  Flag = True
End Sub
Sub Cikl()
  Do
    'Что то делаем
    Sleep 1000
    DoEvents
  Loop Until Flag
End Sub


Это сообщение отредактировал(а) kapbepucm - 19.9.2008, 15:35


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
STRIKER221
Дата 20.9.2008, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



kapbepucm, Спасибо. Заработало. Теперь если можно ещё один вопрос:

Код

Out &H378, 16
Sleep t
Out &H378, 32
Sleep t
Out &H378, 64
Sleep t
Out &H378, 128
Sleep t
Out &H378, 0
Out &H37A, 10
Sleep t
Out &H37A, 9
Sleep t
Out &H37A, 255
Sleep t
Out &H37A, 3
Sleep t
Out &H37A, 11
Out &H378, 1
Sleep t
Out &H378, 2
Sleep t
Out &H378, 4
Sleep t
Out &H378, 8

Как сделать чтобы эти команды шли random'ом??? Т.е. чтобы лампочки не светились по одному, постоянно повторяющемуся циклу, а в хаотичном порядке.
PM MAIL ICQ   Вверх
kapbepucm
Дата 21.9.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 6
Всего: 12



надо, что-бы шли в случайном порядке строки 1;3;5;7;9;11;13;15...25?


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
STRIKER221
Дата 21.9.2008, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



kapbepucm, Да именно так. Все строки начинающиеся с out.
PM MAIL ICQ   Вверх
kapbepucm
Дата 22.9.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 6
Всего: 12



Дополнительный вопрос: при более детальном изучении, я вижу, что для "хаоса" достаточно
Out &H378, X
и
Out &H37A, Y
Не подскажите, какие значения могут принимать X и Y?

Добавлено через 4 минуты и 40 секунд
Ещё, строки 9-10 и 18-19 стоят без разделения Sleep


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
STRIKER221
Дата 22.9.2008, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



kapbepucm, X может принимать значения, 1, 2, 4, 8, 16, 32, 64, 128, 255.
Y может принимать значения 10, 9, 15, 3.

Команда Out &H378, 0 переводит все даты в состояние логического 0, а команда Out &H37A, 11 переводит все остальные пины (busy, error и т.д.) в состояние логического 0.
Без разделения они стоят потому что, если светится светодиод на 7-ой дате (Out &H378, 128), и далее идёт команда Out &H37A, 10 то светодиод на 7-ой дате не погаснет. Поэтому сначала идёт команда Out &H378, 0 отключающая даты и только затем посылается Out &H37A, 10 включающая следующий диод. 
Чтобы включить две даты одновременно, нужно сложить их индексы например чтобы 6 и 7 дата перешли в состояние 1 нужно (64+128=192 ). Команда будет такая Out &H378, 192 и т.д. При значении 255 все даты в состоянии 1.
PM MAIL ICQ   Вверх
kapbepucm
Дата 23.9.2008, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 6
Всего: 12



Попробуйте заменить
Цитата(STRIKER221 @  20.9.2008,  13:48 Найти цитируемый пост)
Код
Out &H378, 16
Sleep t
Out &H378, 32
Sleep t
Out &H378, 64
Sleep t
Out &H378, 128
Sleep t
Out &H378, 0
Out &H37A, 10
Sleep t
Out &H37A, 9
Sleep t
Out &H37A, 255
Sleep t
Out &H37A, 3
Sleep t
Out &H37A, 11
Out &H378, 1
Sleep t
Out &H378, 2
Sleep t
Out &H378, 4
Sleep t
Out &H378, 8
на
Код
  Select Case Int(12 * Rnd + 1)
  Case 1
    Out &H378, 16
    Sleep t
    Out &H378, 0
  Case 2
    Out &H378, 32
    Sleep t
    Out &H378, 0
  Case 3
    Out &H378, 64
    Sleep t
    Out &H378, 0
  Case 4
    Out &H378, 128
    Sleep t
    Out &H378, 0
  Case 5
    Out &H37A, 10
    Sleep t
    Out &H37A, 11
  Case 6
    Out &H37A, 9
    Sleep t
    Out &H37A, 11
  Case 7
    Out &H37A, 255
    Sleep t
    Out &H37A, 11
  Case 8
    Out &H37A, 3
    Sleep t
    Out &H37A, 11
  Case 9
    Out &H378, 1
    Sleep t
    Out &H378, 0
  Case 10
    Out &H378, 2
    Sleep t
    Out &H378, 0
  Case 11
    Out &H378, 4
    Sleep t
    Out &H378, 0
  Case 12
    Out &H378, 8
    Sleep t
    Out &H378, 0
  End Select



--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
STRIKER221
Дата 24.9.2008, 02:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 2.11.2006
Где: Belarus

Репутация: нет
Всего: нет



kapbepucm, Спасибо, всё прекрасно работает. Теперь, если можно, ещё один вопрос:
У меня на плате 12 светодиодов расположенных по окружности, есть идея сделать часы c привязкой к системному времени. Т.к. все диоды красного цвета, поэтому решил что часовой светодиод будет светиться постоянно, а минутный мигать.
Код получается такой:

Код

Sub clock3()
Dim M
Dim H
M = Minute(Time)
H = Hour(Time)
t = 500
Do
Select Case H
Case 0, 12
Select Case M
Case 0 To 4
 Out &H378, 0
Out &H37A, 11
Out &H378, 8
Sleep t
Out &H378, 0
Sleep t
 Case 5 To 9
  Out &H378, 0
Out &H37A, 11
Out &H378, 24
Sleep t
Out &H378, 8
Sleep t
Case 10 To 14
Out &H378, 0
Out &H37A, 11
Out &H378, 40
Sleep t
Out &H378, 8
Sleep t
Case 15 To 19
Out &H378, 0
Out &H37A, 11
Out &H378, 72
Sleep t
Out &H378, 8
Sleep t
Case 20 To 24
Out &H378, 0
Out &H37A, 11
Out &H378, 136
Sleep t
Out &H378, 8
Sleep t
Case 25 To 29
Out &H378, 0
Out &H37A, 11
Out &H378, 8
Out &H37A, 10
Sleep t
Out &H37A, 11
Sleep t
Case 30 To 34
Out &H378, 0
Out &H37A, 11
Out &H378, 8
Out &H37A, 9
Sleep t
Out &H37A, 11
Sleep t
Case 35 To 39
Out &H378, 0
Out &H37A, 11
Out &H378, 8
Out &H37A, 15
Sleep t
Out &H37A, 11
Sleep t
Case 40 To 44
Out &H378, 0
Out &H37A, 11
Out &H378, 8
Out &H37A, 3
Sleep t
Out &H37A, 11
Sleep t
Case 45 To 49
Out &H378, 0
Out &H37A, 11
Out &H378, 9
Sleep t
Out &H378, 8
Sleep t
Case 50 To 54
Out &H378, 0
Out &H37A, 11
Out &H378, 10
Sleep t
Out &H378, 8
Sleep t
Case 55 To 59
Out &H378, 0
Out &H37A, 11
Out &H378, 12
Sleep t
Out &H378, 8
Sleep t
End Select
Case 1,13
...............
.............
End Select
Case ......
End Select 
..................
End Select
DoEvents
Loop Until FINISH
End Sub


Проблема возникла вот какая: минутный диод не переключается. Допустим идёт 4 минута, мигает диод, начинается 5-ая, 6-ая минуты, а светится по прежнему диод 4-ой минуты. В чём ошибка?
PM MAIL ICQ   Вверх
kapbepucm
Дата 24.9.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: 6
Всего: 12



Чтобы понять, где ошибка, опубликуйте, пожалуйста, полный код. Пока я встал на грабли, что каждому Select Case должен соответствовать только один End Select. Их больше ((: Если не затруднит, пользуйтесь пробелами- наглядность вложенности улучшается.

Это сообщение отредактировал(а) kapbepucm - 24.9.2008, 12:39


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0822 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.