- •Лабораторная работа
- •Структура usb.
- •Физический интерфейс.
- •Модель передачи данных.
- •Типы передачи данных.
- •Протокол.
- •Форматы пакетов.
- •Работа с мышью.
- •Листинг программы для работы с мышью через интерфейс usb (ос Dos):
- •Блок-схема алгоритма:
- •Работа с принтером.
- •Листинг программы: печать заштрихованного квадрата на струйном принтере epson Stylus с интерфейсом usb.
- •Блок-схема алгоритма программы: печать заштрихованного квадрата на струйном принтере epson Stylus с интерфейсом usb
- •Листинг программы для работы с принтером (ос Windows хр) через интерфейс usb.
- •Блок-схема алгоритма:
- •Результат работы программы:
- •Контрольные вопросы:
- •1. Опиши те все, что вы знаете о хост-контроллерах.
- •3. Опишите четыре базовых типа передачи данных, предусмотренных протоколом usb.
- •4. Опишите реализацию запросов к usb устройствам.
- •5. Что такое Human Interface Devices?
- •6. Опишите все, что вы знаете о рапортах.
- •7. Опишите разряды слова состояния конечной точки.
- •8. Опишите модель передачи данных.
- •9. Перечислите и опишите основные операции при работе с интерфейсом usb.
- •10. Опишите формат пакетов передаваемых данных.
- •11. Что вы знаете об однонаправленном и двунаправленном интерфейсах?
- •12. Как проверить принадлежность устройства к классу принтеров?
- •13. Опишите особенности и принцип работы с принтером через usb интерфейс.
- •14. Какие командные языки используются для управления процессом печати?
- •15. Как производится программный сброс принтера?
- •16. Опишите назначение полей bDeviceClass, bDeviceSubClass, bDeviceProtocol в дескрипторе устройства.
- •17. Что происходит по запросу Get Port Status?
- •18. Что происходит по запросу Get Device id?
Блок-схема алгоритма программы: печать заштрихованного квадрата на струйном принтере epson Stylus с интерфейсом usb
Листинг программы для работы с принтером (ос Windows хр) через интерфейс usb.
unit Ps;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Jpeg, Printers, ComCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
Bevel1: TBevel;
Bevel2: TBevel;
Memo1: TMemo;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Bevel3: TBevel;
Memo2: TMemo;
Button3: TButton;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Button4: TButton;
Button5: TButton;
Image1: TImage;
Bevel5: TBevel;
Label7: TLabel;
Button6: TButton;
Label8: TLabel;
Button7: TButton;
Button8: TButton;
PrinterSetupDialog1: TPrinterSetupDialog;
Bevel6: TBevel;
PrintDialog1: TPrintDialog;
Bevel7: TBevel;
Bevel4: TBevel;
Label9: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Clear;
ListBox1.Items:=Printer.Printers;
ListBox1.Sorted:=true;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Stroka:System.Text;
i:integer;
begin
//печать в текстовом режиме
AssignPrn(Stroka);//связь текстовой переменной с принтером
Rewrite(Stroka);
Printer.Canvas.Font:=Memo1.Font;
for i:=0 to Memo1.Lines.Count-1 do
Writeln(Stroka,Memo1.Lines[i]); // построчная печать строк
System.Close(stroka); // разрыв связи после печати
end;
procedure TForm1.Button3Click(Sender: TObject);
var
x,y,i:longint;
begin
Printer.Canvas.Font:=Memo1.Font;
Printer.BeginDoc;
x:=0; // координаты начала вывода текста
y:=0;
for i:=0 to Memo1.Lines.Count-1 do
begin // TextExtent - высота строки
Printer.Canvas.TextOut(x,y,Memo1.Lines[i]);
y:=y+Printer.Canvas.TextExtent(Memo1.Lines[i]).cy; // на след. строку
end;
Printer.EndDoc;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
//выводимое изображение содержится в образе Image1
Printer.BeginDoc;
Printer.Canvas.Draw(100,100,Image1.Picture.Bitmap);
Printer.EndDoc;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
//на листе рисуются прямоугольник и круг
Printer.BeginDoc;
Printer.Canvas.Rectangle(485,145,540,200);
Printer.Canvas.Ellipse(525,144,580,200);
Printer.EndDoc;
end;
procedure TForm1.Button6Click(Sender: TObject);
var
logo:TBitMap;
begin
//загрузка логотипа
logo:=TBitMap.Create;
logo.LoadFromFile('dollars.bmp'); //логотип
//начало вывода
Printer.BeginDoc;
//вывод логотипа
Printer.Canvas.Draw(100,100,logo);
//вывод реквизитов
Printer.Canvas.Font.Name:='Courier';
Printer.Canvas.Font.Style:=[fsBold]+[fsItalic];
Printer.Canvas.Font.Size:=14;
Printer.Canvas.TextOut(Printer.PageWidth div 2,100,'IPY');
Printer.Canvas.Font.Style:=[];
Printer.Canvas.Font.Size:=10;
Printer.Canvas.TextOut(Printer.PageWidth div 2,200,'Kafedra EVM');
Printer.Canvas.Font.Size:=10;
Printer.Canvas.TextOut(Printer.PageWidth div 2,300,'Ivanovskiy Y.G.');
//вывод разделительной линии
Printer.Canvas.Pen.Style:=psDash;
Printer.Canvas.MoveTo(100,310);
Printer.Canvas.LineTo(Printer.PageWidth-100,310);
//завершение вывода
Printer.EndDoc;
//удаление экземпляра объекта TBitMap
logo.Free;
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
Form1.Canvas.Pen.Mode:=pmNot;
Form1.Canvas.Pen.Width:=5;
Form1.Canvas.Pen.Color:=clGreen;
Form1.Canvas.Rectangle(585,45,640,100);
Form1.Canvas.Ellipse(625,44,680,100);
end;
procedure TForm1.Button8Click(Sender: TObject);
begin
PrinterSetupDialog1.Execute;
end;
end.