prjusbaspopendevice.pas 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. unit prjUSBaspOpenDevice;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls,
  6. USBasp;
  7. type
  8. { TForm1 }
  9. TForm1 = class(TForm)
  10. Button1: TButton;
  11. Button2: TButton;
  12. Button3: TButton;
  13. Button4: TButton;
  14. Label1: TLabel;
  15. Memo1: TMemo;
  16. procedure Button1Click(Sender: TObject);
  17. procedure Button2Click(Sender: TObject);
  18. procedure Button3Click(Sender: TObject);
  19. procedure Button4Click(Sender: TObject);
  20. procedure FormCreate(Sender: TObject);
  21. procedure FormDestroy(Sender: TObject);
  22. procedure Memo1Change(Sender: TObject);
  23. procedure Memo1DblClick(Sender: TObject);
  24. private
  25. FUSBasp: TUSBasp;
  26. procedure USBaspDataReceive(Sender: TObject; ASerialData: TByteArray;
  27. ASerialDataLength: SizeInt);
  28. procedure USBaspStatusChange(Sender: TObject);
  29. public
  30. end;
  31. var
  32. Form1: TForm1;
  33. implementation
  34. {$R *.lfm}
  35. { TForm1 }
  36. procedure TForm1.FormCreate(Sender: TObject);
  37. begin
  38. FUSBasp := TUSBasp.Create;
  39. FUSBasp.OnUARTReceive := @USBaspDataReceive;
  40. FUSBasp.OnStatusChange := @USBaspStatusChange;
  41. end;
  42. procedure TForm1.Button1Click(Sender: TObject);
  43. begin
  44. FUSBasp.Connect;
  45. end;
  46. procedure TForm1.Button2Click(Sender: TObject);
  47. begin
  48. FUSBasp.Disconnect;
  49. end;
  50. procedure TForm1.Button3Click(Sender: TObject);
  51. begin
  52. FUSBasp.UARTOpen(19200, USBASP_UART_BYTES_8B, USBASP_UART_PARITY_NONE,
  53. USBASP_UART_STOP_1BIT);
  54. end;
  55. procedure TForm1.Button4Click(Sender: TObject);
  56. begin
  57. FUSBasp.UARTClose;
  58. end;
  59. procedure TForm1.FormDestroy(Sender: TObject);
  60. begin
  61. FUSBasp.Free;
  62. end;
  63. procedure TForm1.Memo1Change(Sender: TObject);
  64. begin
  65. if Memo1.Lines.Count > 150 then
  66. begin
  67. Memo1.Lines.BeginUpdate;
  68. while Memo1.Lines.Count > 150 do
  69. Memo1.Lines.Delete(0);
  70. Memo1.Lines.EndUpdate;
  71. end;
  72. end;
  73. procedure TForm1.Memo1DblClick(Sender: TObject);
  74. begin
  75. Memo1.Clear;
  76. end;
  77. procedure TForm1.USBaspDataReceive(Sender: TObject; ASerialData: TByteArray;
  78. ASerialDataLength: SizeInt);
  79. begin
  80. Memo1.Lines.BeginUpdate;
  81. Memo1.Lines.Append(TEncoding.ASCII.GetString(ASerialData, 0, ASerialDataLength));
  82. Memo1.SelStart := Length(Memo1.Lines.Text);
  83. Memo1.VertScrollBar.Position := Memo1.Lines.Count;
  84. Memo1.Lines.EndUpdate;
  85. end;
  86. procedure TForm1.USBaspStatusChange(Sender: TObject);
  87. begin
  88. Randomize;
  89. Label1.Caption := 'Changed' + IntToStr(Random(999));
  90. end;
  91. end.