27
Nội dung: I.Tổng quan lý thuyết về bài thực hành 1.Trình bày về cổng nối tiếp và các kỹ thuật lập trình với cổng nối tiếp theo chuẩn RS232 2. Bộ biến đổi ADC a.sơ đồ khối của bộ thí nghiệm b.mạch nguyên lý và phân tích hoạt động của mạch nguyên lý bộ thí nghiệm ADC. 3.Bộ biến đổi DAC a.sơ đồ khối của bộ thí nghiệm b. mạch nguyên lý và phân tích hoạt động của mạch nguyên lý bộ thí nghiệm DAC. II.Chương trình giao tiếp giữa máy tính và bộ thí nghiệm 1.Bộ thí nghiệm ADC 2.Bộ thí nghiệm DAC

Bao Cao Thuc Hanh(Hoan Chinh)

Embed Size (px)

Citation preview

Page 1: Bao Cao Thuc Hanh(Hoan Chinh)

Nội dung:

I.Tổng quan lý thuyết về bài thực hành

1.Trình bày về cổng nối tiếp và các kỹ thuật lập trình với cổng nối tiếp theo chuẩn

RS232

2. Bộ biến đổi ADC

a.sơ đồ khối của bộ thí nghiệm

b.mạch nguyên lý và phân tích hoạt động của mạch nguyên lý bộ thí nghiệm ADC.

3.Bộ biến đổi DAC

a.sơ đồ khối của bộ thí nghiệm

b. mạch nguyên lý và phân tích hoạt động của mạch nguyên lý bộ thí nghiệm DAC.

II.Chương trình giao tiếp giữa máy tính và bộ thí nghiệm

1.Bộ thí nghiệm ADC

2.Bộ thí nghiệm DAC

Page 2: Bao Cao Thuc Hanh(Hoan Chinh)

I.Tổng quan lý thuyết về bài thực hành:

1.Cổng nối tiếp và các kĩ thuật lập trình với với cổng nối tiếp theo chuẩn RS232

a.Cổng nối tiếp

Cấu trúc cổng nối tiếp

Cổng nối tiếp được sử dụng để truyền dữ liệu hai chiều giữa máy tính và ngoại vi, có các ưu điểm sau:

- Khoảng cách truyền xa hơn truyền song song. - Số dây kết nối ít. - Có thể truyền không dây dùng hồng ngoại. - Có thể ghép nối với vi điều khiển hay PLC (Programmable Logic Device). - Cho phép nối mạng. - Có thể tháo lắp thiết bị trong lúc máy tính đang làm việc. - Có thể cung cấp nguồn cho các mạch điện đơn giản Các thiết bị ghép nối chia thành 2 loại: DTE (Data Terminal Equipment) và DCE (Data

Communication Equipment). DCE là các thiết bị trung gian như MODEM còn DTE là các thiết bị tiếp nhận hay truyền dữ liệu như máy tính, PLC, vi điều khiển, … Việc trao đổi tín hiệu thông thường qua 2 chân RxD (nhận) và TxD (truyền). Các tín hiệu còn lại có chức năng hỗ trợ để thiết lập và điều khiển quá trình truyền, được gọi là các tín hiệu bắt tay (handshake).

Ưu điểm của quá trình truyền dùng tín hiệu bắt tay là có thể kiểm soát đường truyền. Tín hiệu truyền theo chuẩn RS-232 của EIA (Electronics Industry Associations). Chuẩn RS-232 quy định mức logic 1 ứng với điện áp từ -3V đến -25V (mark), mức logic 0

ứng với điện áp từ 3V đến 25V (space) và có khả năng cung cấp dòng từ 10 mA đến 2mA. Ngoài ra, tất cả các ngõ ra đều có đặc tính chống chập mạch.

Chuẩn RS-232 cho phép truyền tín hiệu với tốc độ đến 20.000 bps nhưng nếu cáp truyền đủ ngắn có thể lên đến 115.200 bps.

Các phương thức nối giữa DTE và DCE: - Đơn công (simplex connection): dữ liệu chỉ được truyền theo 1 hướng. - Bán song công ( half-duplex): dữ liệu truyền theo 2 hướng, nhưng mỗi thời điểm chỉ được truyền theo 1 hướng. - Song công (full-duplex): số liệu được truyền đồng thời theo 2 hướng. Định dạng của khung truyền dữ liệu theo chuẩn RS-232 như sau:

Page 3: Bao Cao Thuc Hanh(Hoan Chinh)

Khi không truyền dữ liệu, đường truyền sẽ ở trạng thái mark (điện áp -10V). Khi bắt đầu truyền, DTE sẽ đưa ra xung Start (space: 10V) và sau đó lần lượt truyền từ D0 đến D7 và Parity, cuối cùng là xung Stop (mark: -10V) để khôi phục trạng thái đường truyền.

Các đặc tính kỹ thuật của chuẩn RS-232 như sau: Chiều dài cable cực đại15m Tốc độ dữ liệu cực đại 20 Kbps Điện áp ngõ ra cực đại ± 25V Điện áp ngõ ra có tải ± 5V đến ± 15V Trở kháng tải 3K đến 7K Điện áp ngõ vào ± 15V Độ nhạy ngõ vào ± 3V Trở kháng ngõ vào 3K đến 7K Các tốc độ truyền dữ liệu thông dụng trong cổng nối tiếp là: 1200 bps,

4800 bps, 9600 bps và 19200 bps. Sơ đồ chân:

Cổng COM có hai dạng: đầu nối DB25 (25 chân) và đầu nối DB9 (9 chân)Ý nghĩa của các chân mô tả như sau:

Page 4: Bao Cao Thuc Hanh(Hoan Chinh)

b.Các kỹ thuật lập trình với cổng nối tiếp theo chuẩn RS232

Việc lập trình giao tiếp với máy tính thông qua cổng nối tiếp có thể thực hiện bằng nhiều

ngôn ngữ lập trình khác nhau như: Visual Basic, Pascal, Delphi, C hoặc Matlab. Mỗi ngôn

ngữ đều có các công cụ để khai báo các tham số truyền như số bit dữ liệu, số bit dừng, tốc

độ Baud…

Page 5: Bao Cao Thuc Hanh(Hoan Chinh)

2.Bộ biến đổi ADC:

Mặt trên bộ thí nghiệm biến đổi A/D-U1009A gồm các phần sau:

1. Công tắc nguồn

2. Led chỉ thị nguồn, led sáng khi công tắc nguồn được bật

3. Công tắc chọn chế độ hoạt động: khi công tắc gạt về phía PC, bộ biến đổi A/D sẽ hoạt

động dưới sự điều khiển của máy tính thông qua giao tiếp nối tiếp RS232. Khi công tắc gạt về

phía MANUAL, bộ biến đổi A/D sẽ hoạt động không có sự điều khiển của máy tính.

4. Công tắc chọn kênh: khi bộ biến đổi A/D hoạt động ở chế độ MANUAL, công tắc này

sẽ chọn tín hiệu vào từ hai kênh, CH1 hoặc CH2.

5. Công tắc quy định dãi tín hiệu vào: nếu dãi tín hiệu analog đầu vào trong khoảng từ

0V đến 5V, ta đặt công tắc ở vị trí “±2.5V” cho mỗi kênh.

6. G: điểm nối đất cho tín hiệu analog vào.

7. CH0: đầu vào tín hiệu analog kênh 0

8. CH1: đầu vào tín hiệu analog kênh 1

9. TP1 (TP2): các điểm thử để kiểm tra dạng tín hiệu khi tín hiệu vào CH1 (CH0) được

lấy mẫu và giữ mẫu

10. LED báo kết thúc quá trình biến đổi A/D: Led này được nối vào chân EOC (kết thúc

biến đổi) của bộ biến đổi A/D. Led này sẽ sáng lên sau khi kết thúc quá trình biến đổi A/D. Khi

bắt đầu thực hiện biến đổi A/D, led này tắt và bộ lấy và giữ mẫu ở mỗi kênh sẽ giữ tín hiệu

analog vào.

11. LED chỉ thị chọn kênh (Bit điều khiển PC6): LED này chỉ ra kênh nào đang được

chọn khi bộ A/D hoạt động ở chế độ “PC”. Led sáng khi CH1 được chọn và tắt khi CH0 được

chọn.

12. LED chỉ thị bắt đầu biến đổi A/D (bit điều khiển PC7): LED chỉ thị cho việc bắt đầu

thực hiện biến đổi A/D. Để bộ A/D bắt đầu thực hiện việc chuyenr đổi cần có một xung Start

đưa vào bộ biến đổi, xung này có độ rộng rất bé và có thể chúng ta không kịp thấy nó sáng.

13. LED chỉ thị tín hiệu số sau bộ biến đổi A/D (Byte dữ liệu PA0-PA7): LED chỉ thị giá

trị của 8 bit dữ liệu ở đầu ra bộ biến đổi A/D. Khi mỗi đầu ra ở mức cao, LED ở vị trí tương

ứng sẽ sáng.

Page 6: Bao Cao Thuc Hanh(Hoan Chinh)

PC PS1009

U- 1009ACH0CH1

3 25 2

Nguồn5

Sơ đồ khối của bộ thí nghiệm

Sơ đồ mô tả hoạt động củ bộ biến đổi A/D U-1009A

Bộ biến đổi A/D U-1009A được nối với máy tính thông qua mạch giao tiếp cổng nối tiếp PS-1009 như hình vẽ sơ đồ khối.

PA

RA

LL

EL

I/O

PO

RT

(825

5)

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

PC7

PC6

A/D

CO

NV

ER

TE

R

D7

D6

D5

D4

D3

D2

D1

START

CH1

CH-SEL EOC

D0

SAMPLE &

HOLD

PC5

SAMPLE &

HOLD

CH0

BUFFER

BUFFER

G

G

CH1

CH0

G

Page 7: Bao Cao Thuc Hanh(Hoan Chinh)

Bộ biến đổi A/D sử dụng vi mạch ADC0809, là vi mạch chuyển đổi A/D 8 bit. Điện áp so sánh ở chân 12 được điều chỉnh ở mức 5.12V bằng một biến trở, do đó độ phân giải của bộ biến đổi là 5.12V/256. Xung clock đầu vào vi mạch ADC0809 là 200KHz, do đó bộ biến đổi A/D có thờ gian biến đổi là 300µs. Vi mạch ADC0809 chọn một trong 8 đầu vào analog (IN0-IN7) để biến đổi, việc chọn này được thực hiện thông qua các đường địa chỉ (A0-A2). Các đường địa chỉ A1, A2 đã được đặt ở mức 0V, do đó mức “HIGH/LOW” đătỵ vào chân A0 sẽ chọn cho các đường analog vào IN1-IN6 tương ứng.

Khi hoạt động ở chế độ điều khiển bằng máy tính, đặt công tắc chọn chế độ hoạt động ở vị trí “PC”. Các kênh được chọn tùy thuộc vào giá trị của bit PC6 của byte điều khiển. CH1 được chọn khi PC6 ở mức cao và CH0 được chọn khi PC6 ở mức thấp.

Khi hoạt động ở chế độ “MANUAL”, đặt công tắc chọn chế độ hoạt động ở vị trí “MANUAL” , việc chọn kênh được thực hiện bằng công tắc chọn kênh. Quá trình biến đổi A/D biến đổi tín hiệu analog đầu vào thành dữ liệu số và hiển thị ở các led sau bộ biến đổi.

3.Bộ biến đổi DAC:

Mặt trên của bộ biến đổi D/A U-1009B gồm các phần sau :1.công tắc nguồn 2.Led chỉ thị nguồn , led sẽ sáng lên khi công tắc nguồn bật.3.Công tắc chọn chế độ hoạt động :khi công tắc gạt về phía “PC”.Bộ biến đổi D/A sẽ hoạt động dưới sự điều khiển của máy tính thông qua giao tiếp nối tiếp RS232.Khi công tắc gạt về phía “MANUAL”. Bộ biến đổi D/A sẽ hoạt động không có sự điều khiển của máy tính .4.công tắc số đầu vào.Khi bộ biến đổi D/A hoạt động ở chế độ “MANUAL”,8bit số đưa vào bộ biến đổi D/A được quy định bởi các công tắc này.5.Nút chỉnh khuếch đại, điều chỉnh đầu ra của tín hiệu analog ra loa.6.Dầu ra analog, đầu ra cảu bộ biến đổi D/A7.VOLT METER:hiển thị điện áp analog ra.

Sơ đồ khối của bộ thí nghiệm

Sơ đồ mô tả hoạt động của bộ biến đổi D/A U-1009B

PC PS1009

U- 1009B Analog out3 25 1

Nguồn5

Page 8: Bao Cao Thuc Hanh(Hoan Chinh)

Bộ DAC sử dụng vi mạch chuyển đổi D/A MC 1480Phương trình cho điện áp ra được tính như sau:

Vo= R3 ( + +

Vcrf đựoc đặt ở mức 2.5VKhi bộ biến đổi D/A hoạt động ở chế độ “MANUAL”, các công tắc số đầu vào sẽ quy định các giá trị bit vào của bộ biến đổi D/A , tín hiệu analog đầu ra sẽ hiển thị trên VOLT METTER.

Khi bộ biến đổi D/A hoạt động ở chế độ “PC”, các bit số đưa vào bộ biến đổi D/A sẽ được truyền từ máy tính thông qua mạch giao tiếp PS-1009, tín hiệu analog đầu ra sẽ hiển thị trên VOLT METTER.

PA

RA

LL

EL

I/O

PO

RT

(825

5)

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

PC7

PC6

D/A

CO

NV

ER

TE

R

D7

D6

D5

D4

D3

D2

D1

ALGOUT

D0

PC5

G

Analog out put

G

BUFFER

-

+

AMP

G

Volt meter

Page 9: Bao Cao Thuc Hanh(Hoan Chinh)

II.Chương trình giao tiếp giữa máy tính và bộ thí nghiệm

Sử dụng chương trinh Borland Delphi làm chương trình cho bài thực hành.

1.Bộ biến đổi ADC:

Phần lập trình:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, portinc, Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series;type TForm1 = class(TForm) GroupBox1: TGroupBox; Edit1: TEdit; Button1: TButton; Button2: TButton; Shape1: TShape;

Page 10: Bao Cao Thuc Hanh(Hoan Chinh)

Shape2: TShape; Shape3: TShape; Shape4: TShape; Shape5: TShape; Shape6: TShape; Shape7: TShape; Shape8: TShape; RadioButton1: TRadioButton; RadioButton2: TRadioButton; Shape9: TShape; StaticText1: TStaticText; Chart1: TChart; Chart2: TChart; Series1: TFastLineSeries; Series2: TFastLineSeries; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure RadioButton1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; stop:boolean; dthi:boolean;

implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); // button “read”var i,j,x:integer;singleArray:Array of string;d0,d1,d2,d3,d4,d5,d6,d7:integer;beginSetLength(singleArray, 50);i:=0;repeat repeat j:=readbyte(); edit1.text:=inttostr(j); d7:=j div 128; d6:=(j - d7*128) div 64; d5:=(j - d7*128 - d6*64)div 32;

Page 11: Bao Cao Thuc Hanh(Hoan Chinh)

d4:=(j-d7*128- d6*64 - d5*32) div 16; d3:=(j-d7*128- d6*64 - d5*32 - d4*16) div 8; d2:=(j-d7*128- d6*64 - d5*32 - d4*16 - d3*8) div 4; d1:=(j-d7*128- d6*64 - d5*32 - d4*16 - d3*8 - d2*4) div 2; d0:=(j-d7*128- d6*64 - d5*32 - d4*16 - d3*8 - d2*4 - d1*2) div 1; if d7=1 then //hiệu ứng đèn begin shape8.Brush.Color:=clred; shape8.brush.style:=bssolid; end else begin shape8.Brush.color:=clwhite; shape8.brush.style:=bsDiagCross; end; if d6=1 then

begin shape7.Brush.Color:=clred; shape7.brush.style:=bssolid; end else begin shape7.Brush.color:=clwhite; shape7.brush.style:=bsDiagCross; end; if d5=1 then begin shape6.Brush.Color:=clred; shape6.brush.style:=bssolid; end else begin shape6.Brush.color:=clwhite; shape6.brush.style:=bsDiagCross; end;if d4=1 then begin shape5.Brush.Color:=clred; shape5.brush.style:=bssolid; end else begin shape5.Brush.color:=clwhite; shape5.brush.style:=bsDiagCross; end;if d3=1 then

Page 12: Bao Cao Thuc Hanh(Hoan Chinh)

begin shape4.Brush.Color:=clred; shape4.brush.style:=bssolid; end else begin shape4.Brush.color:=clwhite; shape4.brush.style:=bsDiagCross; end;if d2=1 then begin shape3.Brush.Color:=clred; shape3.brush.style:=bssolid; end else begin shape3.Brush.color:=clwhite; shape3.brush.style:=bsDiagCross; end;if d1=1 then begin shape2.Brush.Color:=clred; shape2.brush.style:=bssolid; end else begin shape2.Brush.color:=clwhite; shape2.brush.style:=bsDiagCross; end;if d0=1 then begin shape1.Brush.Color:=clred; shape1.brush.style:=bssolid; end else begin shape1.Brush.color:=clwhite; shape1.brush.style:=bsDiagCross; end; //kết thúc hiệu ứng đèn

i:=i+1; singleArray[i]:=IntToStr (j); // lưu trữ giá trị đọc được vào mảng if dthi=true then // kênh CH1 được chọn begin Chart1.Series[1].AddXY(i,j,'',clRed); //vẽ đồ thị ứng với gíá trị j đọc đựoc

Page 13: Bao Cao Thuc Hanh(Hoan Chinh)

end else //kênh CH0 được chọn begin Chart2.Series[2].AddXY(i,j,'',clRed); //vẽ đồ thị ứng với giá trị j đọc được end; until i=49; // giới hạn chỉ vẽ 49 giá trị rồi quay về vẽ từ đầuuntil stop=true;end;

procedure TForm1.FormCreate(Sender: TObject); //khai báo cổng COMbeginopencom(pchar('com1,9600,N,8,1'));end;procedure TForm1.Button2Click(Sender: TObject);beginstop:=true;end;procedure TForm1.RadioButton2Click(Sender: TObject); //kenh CH0begin dthi:=false; sendbyte(255); shape9.Brush.Color:=clred; shape9.brush.style:=bssolid;end;procedure TForm1.RadioButton1Click(Sender: TObject); //kenh CH1begin dthi:=true; sendbyte(1); shape9.Brush.Color:=clwhite; shape9.Brush.style:=bsDiagCross;end;

end.

Page 14: Bao Cao Thuc Hanh(Hoan Chinh)

2. Bộ biến đổi DAC:

Phần lập trình:unit baichinhsua;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, portinc, StdCtrls, ExtCtrls;type TForm1 = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Edit2: TEdit; RadioButton1: TRadioButton; RadioButton2: TRadioButton;

Page 15: Bao Cao Thuc Hanh(Hoan Chinh)

Button1: TButton; GroupBox2: TGroupBox; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Shape1: TShape; Shape2: TShape; Shape3: TShape; Shape4: TShape; Shape5: TShape; Shape6: TShape; Shape7: TShape; Shape8: TShape; Label11: TLabel; Edit4: TEdit; Label12: TLabel; Edit5: TEdit; Edit6: TEdit; Label13: TLabel; Edit7: TEdit; Edit8: TEdit; Label14: TLabel; GroupBox3: TGroupBox; Button2: TButton; Edit3: TEdit; Edit9: TEdit; Edit10: TEdit; Button3: TButton; Button4: TButton; Label15: TLabel; Label16: TLabel; Button5: TButton; Label17: TLabel; Edit11: TEdit; procedure FormCreate(Sender: TObject); procedure RadioButton1Click(Sender: TObject); procedure RadioButton2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button3Click(Sender: TObject);

Page 16: Bao Cao Thuc Hanh(Hoan Chinh)

procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; dung:boolean; i, d0,d1,d2,d3,d4,d5,d6,d7: integer;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject); //khai báo cổng COMbeginopencom(pchar('com1,9600,n,8,1'));end;

procedure TForm1.RadioButton1Click(Sender: TObject);beginshowmessage('Voi che do nay, ban chi co the do voi 1 gia tri');edit1.enabled:=true;edit2.Enabled:=false;end;

procedure TForm1.RadioButton2Click(Sender: TObject);beginshowmessage('Voi che do nay, ban co the do lan luot nhieu gia tri');edit1.Enabled:=true;edit2.enabled:=true;end;

procedure TForm1.Button1Click(Sender: TObject); //button “send”var j,k: integer; t:real;beginif radiobutton1.checked=true then begin i:=strtoint(edit1.text); t:=20*i; edit6.Text:=floattostr(t); sendbyte(i);d7:=i div 128;//tinh gia tri d7d6:=(i - d7*128) div 64;d5:=(i - d7*128 - d6*64)div 32;d4:=(i-d7*128- d6*64 - d5*32) div 16;d3:=(i-d7*128- d6*64 - d5*32 - d4*16) div 8;d2:=(i-d7*128- d6*64 - d5*32 - d4*16 - d3*8) div 4;

Page 17: Bao Cao Thuc Hanh(Hoan Chinh)

d1:=(i-d7*128- d6*64 - d5*32 - d4*16 - d3*8 - d2*4) div 2;d0:=(i-d7*128- d6*64 - d5*32 - d4*16 - d3*8 - d2*4 - d1*2) div 1;edit4.Text:=inttostr(d7*10000000+ d6*1000000 +d5*100000 +d4*10000 +d3*1000 +d2*100

+d1*10 +d0); if d7=1 then //hiển thị đèn begin shape8.Brush.Color:=clred; shape8.brush.style:=bssolid; end else begin shape8.Brush.color:=clwhite; shape8.brush.style:=bsDiagCross; end; if d6=1 then begin shape7.Brush.Color:=clred; shape7.brush.style:=bssolid; end else begin shape7.Brush.color:=clwhite; shape7.brush.style:=bsDiagCross; end; if d5=1 then begin shape6.Brush.Color:=clred; shape6.brush.style:=bssolid; end else begin shape6.Brush.color:=clwhite; shape6.brush.style:=bsDiagCross; end;if d4=1 then begin shape5.Brush.Color:=clred; shape5.brush.style:=bssolid; end else begin shape5.Brush.color:=clwhite; shape5.brush.style:=bsDiagCross; end;if d3=1 then begin

Page 18: Bao Cao Thuc Hanh(Hoan Chinh)

shape4.Brush.Color:=clred; shape4.brush.style:=bssolid; end else begin shape4.Brush.color:=clwhite; shape4.brush.style:=bsDiagCross; end;if d2=1 then begin shape3.Brush.Color:=clred; shape3.brush.style:=bssolid; end else begin shape3.Brush.color:=clwhite; shape3.brush.style:=bsDiagCross; end;if d1=1 then begin shape2.Brush.Color:=clred; shape2.brush.style:=bssolid; end else begin shape2.Brush.color:=clwhite; shape2.brush.style:=bsDiagCross; end;if d0=1 then begin shape1.Brush.Color:=clred; shape1.brush.style:=bssolid; end else begin shape1.Brush.color:=clwhite; shape1.brush.style:=bsDiagCross; end; // kết thúc hieu ung den application.ProcessMessages; end else if radiobutton2.Checked=true then // chế độ nhiều giá trị begin i:=strtoint(edit1.text); j:=strtoint(edit2.text); k:=0; repeat

Page 19: Bao Cao Thuc Hanh(Hoan Chinh)

sendbyte(i); d7:=i div 128;//tinh gia tri d7d6:=(i - d7*128) div 64;d5:=(i - d7*128 - d6*64)div 32;d4:=(i-d7*128- d6*64 - d5*32) div 16;d3:=(i-d7*128- d6*64 - d5*32 - d4*16) div 8;d2:=(i-d7*128- d6*64 - d5*32 - d4*16 - d3*8) div 4;d1:=(i-d7*128- d6*64 - d5*32 - d4*16 - d3*8 - d2*4) div 2;d0:=(i-d7*128- d6*64 - d5*32 - d4*16 - d3*8 - d2*4 - d1*2) div 1;if d7=1 then//hieu ung den begin shape8.Brush.Color:=clred; shape8.brush.style:=bssolid; end else begin shape8.Brush.color:=clwhite; shape8.brush.style:=bsDiagCross; end;if d6=1 then begin shape7.Brush.Color:=clred; shape7.brush.style:=bssolid; end else begin shape7.Brush.color:=clwhite; shape7.brush.style:=bsDiagCross; end;if d5=1 then begin shape6.Brush.Color:=clred; shape6.brush.style:=bssolid; end else begin shape6.Brush.color:=clwhite; shape6.brush.style:=bsDiagCross; end;if d4=1 then begin shape5.Brush.Color:=clred; shape5.brush.style:=bssolid; end else begin

Page 20: Bao Cao Thuc Hanh(Hoan Chinh)

shape5.Brush.color:=clwhite; shape5.brush.style:=bsDiagCross; end;if d3=1 then begin shape4.Brush.Color:=clred; shape4.brush.style:=bssolid; end else begin shape4.Brush.color:=clwhite; shape4.brush.style:=bsDiagCross; end;if d2=1 then begin shape3.Brush.Color:=clred; shape3.brush.style:=bssolid; end else begin shape3.Brush.color:=clwhite; shape3.brush.style:=bsDiagCross; end;if d1=1 then begin shape2.Brush.Color:=clred; shape2.brush.style:=bssolid; end else begin shape2.Brush.color:=clwhite; shape2.brush.style:=bsDiagCross; end;if d0=1 then begin shape1.Brush.Color:=clred; shape1.brush.style:=bssolid; end else begin shape1.Brush.color:=clwhite; shape1.brush.style:=bsDiagCross; end;//hieu ung den i:=i+j; edit4.Text:=inttostr(d7*10000000+ d6*1000000 +d5*100000 +d4*10000 +d3*1000 +d2*100

+d1*10 +d0);

Page 21: Bao Cao Thuc Hanh(Hoan Chinh)

t:=20*(i-j); edit6.Text:=floattostr(t); delay(300); k:=k+1; application.ProcessMessages; until i>255; edit5.text:=inttostr(k); edit8.text:=inttostr(i-j); endelse begin showmessage('Vui long chon 1 trong 2 che do'); endend;procedure TForm1.Button2Click(Sender: TObject); //điều chế xung sinvar a1,x:integer; a,ck,r:integer;begina:=strtoint(edit3.text);ck:=strtoint(edit9.Text);r:=strtoint(edit10.Text);x:=ck-r; repeat a1:=a div 20; sendbyte(a1); delay(x); sendbyte(0); delay(r); application.ProcessMessages; until dung=true;end;procedure TForm1.Button5Click(Sender: TObject);begindung:=true;end;

procedure TForm1.Button3Click(Sender: TObject); // điều chế xung tam giácvarck2, bd2, dr2, x9,x10,dem:integer;begindung:=false;bd2:=strtoint(edit3.text);ck2:=strtoint(edit9.text);dr2:=strtoint(edit10.Text);x9:=0;

Page 22: Bao Cao Thuc Hanh(Hoan Chinh)

bd2:=bd2 div 20;x10:= ck2 div dr2; repeat x9:=x9+1; sendbyte(x9); edit11.text:=inttostr(x9); delayus(x10); application.ProcessMessages; until x9=bd2; repeat x9:=x9-1; sendbyte(x9); edit11.text:=inttostr(x9); delayus(x10); application.ProcessMessages; until x9=0;until dung=true;end;procedure TForm1.Button4Click(Sender: TObject); //điều chế xung sinvar ck3, dr3, bd3, s2,s3,s4:integer;s5:string;s1:real;t:integer;dem3:integer;beginck3:=strtoint(edit9.text);bd3:=strtoint(edit3.text);dr3:=strtoint(edit10.text);bd3:=bd3 div 20;t:=0; //thoi gian bien thiens1:=1;s2:=ck3 div dr3; repeat repeat t:=t+1; dem3:= 2 * 3* t; //lam tron gia trị Pi =3.14 ve gan bang 3 s1:=bd3 * sin(dem3 div ck3); s5:=floattostrf(s1,ffgeneral,3,0); s4:=strtoint(s5); sendbyte(s4+128); //do không hiển thị được số âm nên phải dịch chuyển đồ thị delay(s2); until t=ck3; until dung=true;end;end.