Đồ án Hệ thống giám sát và điều khiển các thiết bị trong phòng

MỤC LỤC

PHẦN A : LÝ THUYẾT LIÊN QUAN

CHƯƠNG I : GIỚI THIỆU VĐK 89C51 7

CHƯƠNG II : GIỚI THIỆU GIAO TIẾP NỐI TIẾP 12

CHƯƠNG III : VB VỚI TRUYỀN THÔNG NỐI TIẾP 15

PHẦN B : THỰC HIỆN MÔ HÌNH

CHƯƠNG I : MẠCH CẢM BIẾN HỒNG NGOẠI 23

CHƯƠNG II : GIAO TIẾP MÁY TÍNH 26

2.1 GIAO DIỆN VB 26

2.2 LƯU ĐỒ GIẢI THUẬT 27

2.3 CHƯƠNG TRÌNH VB 28

 

doc40 trang | Chia sẻ: lethao | Lượt xem: 1712 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đồ án Hệ thống giám sát và điều khiển các thiết bị trong phòng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP TPHCM KHOA CÔNG NGHỆ ĐIỆN TỬ ĐỀ TÀI: GVHD : Th.S TRẦN NGUYÊN BẢO TRÂN SVTH : DƯƠNG LÊ KÔNG ĐẠT LỚP : ĐHĐT1A_LT TP.HCM 12/2007 LỜI MỞ ĐẦU ---o0o--- Hòa nhịp vào sự phát triển chung của xã hội, ngành điện tử cũng không nằm ngoài qui luật phát triển chung đó. Ngoài những sản phẩm phục vụ cho nhu cầu đời sống, ngành điện tử đã và đang có những bước tiến trong ứng dụng thay thế hoạt động con người. Lấy ý tưởng đó, em đã suy nghĩ ra một ứng dụng thực tế trong việc quản lí khách sạn. Bằng những kiến thức đã học, em đã thiết kế ra một hệ thống điều khiển và giám sát phòng trong khách sạn. Đề tài của em sử dụng VĐK 89C51 giao tiếp với máy tính thông qua Visual Basic để điều khiển các đèn, quạt trong phòng, cùng hệ thống cảm biến hồng ngoại để giám sát được số người trong phòng đó. Tuy nhiên, do sự hạn chế về nhiều mặt nên đề tài chỉ dừng lại ở mức độ đơn giản nhất. Em rất mong nhận được sự đóng góp và hướng dẫn thêm của Quý thầy cô để đề tài này hoàn thiện hơn. LỜI CẢM ƠN ---o0o--- “ Không thầy đố mày làm nên” , đó là một câu tục ngữ đã được truyền tụng từ đời này sang đời khác mà không ai có thể quên được. Thật vậy, qua hơn bốn năm học ở trường, nhờ sự tận tình dạy bảo của Quý thầy cô đã giúp em tích lũy được những kiến thức quí báu cho bản thân mình. Nhờ những kiến thức đó mà em đãa thể hiện được ý tưởng của mình ở đồ án này. Hơn thế nữa, với sự hướng dẫn tận tình của thầy TRẦN NGUYÊN BẢO TRÂN đã giúp em dễ dàng hơn trong việc thực hiện đồ án. Một lần nữa, em xin bày tỏ lòng biết ơn sâu sắc đến Quý thầy cô trong khoa, đặc biệt là giáo viên hướng dẫn trực tiếp đã giúp em hoàn thành tốt đồ án này. Em xin chân thành cản ơn! Nhận xét của giáo viên hướng dẫn Ngày …… tháng …… năm 2011 Giáo Viên Hướng Dẫn Nhận xét của giáo viên phản biện Ngày …… tháng …… năm 2011 Giáo Viên Phản Biện MỤC LỤC ---o0o--- PHẦN A : LÝ THUYẾT LIÊN QUAN CHƯƠNG I : GIỚI THIỆU VĐK 89C51 7 CHƯƠNG II : GIỚI THIỆU GIAO TIẾP NỐI TIẾP 12 CHƯƠNG III : VB VỚI TRUYỀN THÔNG NỐI TIẾP 15 PHẦN B : THỰC HIỆN MÔ HÌNH CHƯƠNG I : MẠCH CẢM BIẾN HỒNG NGOẠI 23 CHƯƠNG II : GIAO TIẾP MÁY TÍNH 26 2.1 GIAO DIỆN VB 26 2.2 LƯU ĐỒ GIẢI THUẬT 27 2.3 CHƯƠNG TRÌNH VB 28 2.4 CHƯƠNG TRÌNH VI XỬ LÝ 34 NỘI DUNG PHẦN A : LÝ THUYẾT LIÊN QUAN Chương 1 : Giới thiệu VĐK 89C51 1.1 Giới thiệu: Bộ vi điều khiển viết tắt là Micro-Controller, là mạch tích hợp trên một chip có thể lập trình được, dùng để điều khiển hoạt động của một thiết bị, hệ thống … Theo các tập lệnh của người lập trình, VĐK có thể đọc, lưu trử, xử lí thông tin… Năm 1976 công ty INTEL đã cho ra đời bộ VĐK đơn chip đầu tiên với tên gọi 8084 và đến năm 1980 thế hệ thứ hai ra đời , đó là 8051. Và sau đó, hàng loạt các VĐK cùng loại với 8051 ra đời, hình thành họ VĐK MCS-51 như: 8031, 8032,8751, 8752, 8951, 8952… 1.2 Khảo sát bộ VĐK 89C51: IC vi điều khiển 89C51 thuộc họ MCS-51 có các đặc điểm sau: Bộ nhớ chương trình bên trong: 4 KB (ROM) Bộ nhớ dữ liệu bên trong: 128 byte (RAM) Bộ nhớ chương trình bên ngoài: 64 KB (ROM) Bộ nhớ dữ liệu bên ngoài: 64 KB (RAM) 4 port IO 8 bit 2 bộ định thời 16 bit Giao tiếp nối tiếp Bộ xử lí bit (thao tác trên các bit riêng lẻ) 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit Nhân / chia trong 4 us 1.2.1 Cấu trúc bên trong của 89C51: TXD* RXD* T1* T2* P0 P1 P2 P3 INT\*1 INT\*0 TIMER2 TIMER1 PORTnối tiếp EA\ RST PSEN ALE Các thanh ghi khác 128 byte Ram Rom 4K-8051 OK-8031 Timer1 Timer2 Điều khiển ngắt Bus ĐK CCPU Port nt Các port IO Oscilator CPU Hình 1.1: Sơ đồ khối của 89C51 1.2.2 Sơ đồ chân của 89C51 18 19 12MHz 40 29 30 31 9 17 16 15 14 13 12 11 10 RD\WR\ T1 T0 INT1 INT0 TXD RXD A15 A14 A13 A12 A11 A10 A9 A8 28 27 26 25 24 23 22 21 8 7 6 5 4 3 2 1 32 33 34 35 36 37 38 39 Po.7 Po.6 Po.5 Po.4 Po.3 Po.2 Po.1 Po.0 AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 PSEN\ ALE EA\ RET Vcc 20 Vss 30p 30p XTAL1 XTAL2 Hình 1.2 : Sơ dồ chân của 89C51 Port 0 : từ chân 32 đến 39, trong những thiết kế nhỏ nó có 2 chức năng như các đường IO, trong những thiết kế lớn (với bộ nhớ mở rộng) nó được kết hợp kênh giữa các bus. Port 1 : từ chân 1 đến chân 8, dùng giao tiếp với các thiết bị bên ngoài. Port 2 : từ chân 21 đến 28, được dùng như các đường xuất nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị dùng bộ nhó mở rộng. Port 3 : từ chân 10 đến 17, các chân của port này có nhiều chức năng, các công dụng chuyển đổi được mô tả ở bảng sau: Bit Tên Chức năng chuyển đổi P3.0 RXD Dữ liệu nhận cho port nối tiếp P3.1 TXD Dữ liệu phát cho port nối tiếp P3.2 INTO Ngắt 0 bên ngoài P3.3 INT1 Ngắt 1 bên ngoài P3.4 TO Ngõ vào của timer/counter 0 P3.5 T1 Ngõ vào của timer/counter 1 P3.6 WR Xung ghi bộ nhớ dữ liệu ngoài P3.7 RD Xung đọc bộ nhớ dữ liệu ngoài Chân EA\ : truy xuất ngoài, chân số 31. Chức năng : Là tín hiệu cho phép truy xuất bộ nhớ chương trình (ROM) ngoài Là tín hiệu nhập, tích cực mức thấp. EA\ = 0 : Chip 8951 sử dụng chương trình ROM ngoài. EA\ = 1 : Chip 8951 sử dụng chương trình ROM trong. Chân PSEN\ : cho phép bộ nhớ chương trình, chân số 29 Chức năng : - Là tín hiệu cho phép truy xuất bộ nhớ chương trình (ROM) ngoài. - Là tín hiệu xuất, tích cực mức thấp. PSEN\ = 0 : trong thời gian CPU tìm nạp lệnh từ ROM ngoài. PSEN\ = 1 : CPU sử dụng ROM trong. Chân ALE: cho phép chốt địa chỉ, chân số 30 Chức năng: Là tín hiệu cho phép chốt địa chỉ để thực hiện giải đa hơp cho bus địa chỉ byte thấp và dữ liệu đa hợp( AD0 – AD7) Là tín hiệu xuất, tích cực mức cao. ALE = 0 : trong thời gian bus AD0 – AD7 đóng vai trò là bus D0 – D7. ALE = 1 : trong thời gian bus AD0 – AD7 đóng vai trò là bus A0 – A7 Khi lập trình cho ROM trong chip thì chân ALE đóng vai trò là ngõ vào của xung lập trình. Chân XTAL1, XTAL2: tinh thể thạch anh, chân 18-19 Chức năng : Dùng để nối với thạch anh hoặc mạch dao động tạo xung clock bên ngoài, cung cấp tín hiệu xung clock cho chip hoạt động. XTAL1: ngõ vào mạch tạo xung clock trong chip XTAL2: ngõ ra mạch tạo xung clock trong chip Chân RST : ngõ vào reset, chân số 19 Khi nó ở mức cao, (trong khoảng ít nhất 2 chu kì máy) các thanh ghi nội được nạp với giá trị tương ứng theo thứ tự khởi động hệ thống. Nuồn cung cấp: 8951 sử dụng nguồn đơn 5V, Vcc được nối vào chân 40, Vss nối vào chân 20 . Chương 2: Giới Thiệu Giao Tiếp Nối Tiếp 2.1 Lập trình qua cổng COM: Windows VB Delphi VC Matlad Keil C Dos Pascal Qbasic Mrbol 2.2 Cấu trúc cổng COM: 25 Chân 9 Chân Lối Vào/Ra Tên gọi Chức năng 1 - - FG,Frame Ground Đất vỏ máy 2 3 Out TxD, Transmit Data Truyền dữ liệu 3 2 In RxD ,Receive Data Nhận dữ liệu 4 7 Out RTS,Request to Send Yêu cầu gởi ;bộ truyền đặt đường này lên mức hoạt động khi sẵn sàng truyền dữ liệu 5 8 In CTS,Clear to Send Xoá để gởi ;bộ nhận đặt đường này lên mức hoạt động để thông báo cho bộ truyền là nó sẵn sàng nhận dữ liệu 6 6 In DSR, Data Set Ready Dữ liệu sẵn sàng ;tính hoạt động giống với CTS nhưng được kích hoạt bởi bộ truyền khi nó sẵn sàng nhận dữ liệu 7 5 - SG, Signal Ground Đất của tín hiệu 8 1 In DCD, Data Carrier Detect Phát hiện tín hiệu mang dữ liệu 20 4 Out DTR, Data Terminal Ready Đầu cuối dữ liệu sẵn sàng ; tính hoạt động giống với RTS nhưng được kích hoạt bởi bộ nhận khi muốn truyền dữ liệu 22 9 In RI , Ring Indicate Báo chuông , cho biết là bộ nhận đang nhận tín hiệu rung chuông Chương 3: VB Với Truyền Thông Nối Tiếp Để xuất dữ liệu từ máy tính xuống cổng Com thì ta phải sử dụng chương trình để làm điều đó. Ở đây ta sử dụng chương trình VB để thực hiện, VB thực hiện công việc này qua một công cụ được lấy bằng : Project ] Component ( Ctrl-T) Hình 3.1 – Phụ thêm thành phần Microsoft Comm vào Visual Basic 4.0/5.0 và 6.0 Hình 3.2 Toolbox chỉ ra các thành phần Comm 3.1 Các đặc tính: Thành phần Comm được bổ sung vào biểu mẫu (form) bất cứ lúc nào cần đến việc truyền thông nối tiếp. Theo mặc định thì cổng thứ nhất tạo ra đối tượng có tên MSComm1, đối tượng ứng với cổng thứ 2 được gọi là MSComm2, v.v…Các đặc tính chính của đối tượng là: CommPort, DTREable, InputLen, Inputmode, OutBuffersize, ParityReplace, Rthreshold, RTSEnable, Settings (thiết lập thông số) … Các đặc tính điều khiển truyền thông : Các đặc tính Sự mô tả Commport Đặt và trả lại số cổng truyền thông Input (nhập vào ) Trả lại và loại bỏ ký tự khỏi bộ đệm Output ( xuất ra ) Viết 1 xâu ký tự với bộ đệm truyền PortOpen Mở đóng 1 cổng ( tuỳ thuộc vào thông số ) Settings Đặt và trả lại các tham số truyền thông như : tốc độ truyền , truyền theo bit, chẵn lẻ , số các bit dữ liệu v.v… 3.1.1 Đặc tính Settings: Các đặc tính Settings đặt và trả lại các thông số truyền thông cho cổng RS232, như tốc độ baud , chẵn lẻ , số bit dữ liệu và các bit dừng. Cú pháp của câu lệnh là : [form.]MSComm.Setting [=param.String$] Nếu paramString không có khi mở cổng thì điều khiển truyền thông phát sinh lỗi 380 Paramstring là một xâu chứa bốn thông số thiết lập cho cổng RS_232 và có dạng như sau : “BB,P,D,S” Ở đây BBBB xác định tốc độ baud, P là bit chỉ tính chẵn lẻ. D là số bit dữ liệu, S là số bit dừng (bit stop). Giá trị mặc định của paramString là : “9600,N,8,1 “ Bảng sau đây liệt kê các giá trị baud hợp lệ : Thông số baud -110 -9600 -188000 -300 -14400 -256000 -600 -19200 -1200 -38400 -2400 -56000 Bẳng sau đây mô tả các giá trị chẵn lẻ hợp lệ : Giá trị Mô tả E M N O S Even ( chẵn ) Mark ( dấu) None ( không kiểm tra chẳn lẻ_ mặc định) Odd ( lẻ ) Space ( trống ) Bảng liệt kê số bit dữ liệu hợp lệ trong một lần truyền (khung truyền) Giá trị 4 5 6 7 8 Bảng liệt kê số bit stop hợp lệ : Giá trị 1 1.5 2 3.1.2 Đặc tính CommPort: Đặc tính này đặt và trả lại số cổng truyền thông . Cú pháp của câu lệnh là : [form.]MSComm.CommPort[=port number%] Trong khi thiết kế ta có thể đặt PortNumber bằng 1 giá trị nằm trong khoảng từ 1 đến 99 (giá trị mặc định là 1). Trước khi dùng lệnh này phải thiết lập cổng bằng Commport. Nếu dùng đặc tính PortOpen trước khi thiết lập cổng bằng CommPort thì điều khiển truyền thông sẽ phát sinh lỗi 68 (lỗi chưa có thiết bị hoặc cổng không tồn tại). 3.1.3 Đặc tính PortOpen: Đặc tính PortOpen đặt và trả lại trạng thái của cổng truyền thông (đóng hoặc mở) . Đặc tính này không có trong thời gian thiết kế chương trình . Cú pháp của câu lệnh là : [form.]MSComm.PortOpen [={True/False}] Thông số thiết lập là True để mở cổng, còn False là đóng cổng và xoá nội dung các bộ đệm truyền và nhận (tác động này tự động xảy ra khi ứng dụng được đóng). Trước khi sử dụng đặc tính này phải đặt số cổng bằng đặc tính Comport , nếu ta quên đi đặc điểm này thì sẽ phát sinh lỗi 68. 3.1.4 Nhập dữ liệu : Ba đặc tính chính được sử dụng để đọc dữ liệu từ bộ đệm nhận Input , InputBufferCount và InputBufferSize. a) InPut ( Nhập vào) Đặc tính Input trả và xoá bỏ một sâu ký tự từ bộ đệm nhưng trạng thái này không có trong [form]MSComm.Input Đặc tính Inputlen quy định số kí tự được đọc bởi câu lệnh input, xác định số các kí tự trong bộ dếm đăc tính, InBufferCount được kiểm tra. Đặt InputLen là 0 là để đọc toàn bộ nội dung của bộ đệm nhận . b) InBufferSize Đặc tính InBufferSize đặt và trả lại kích thước bộ đệm nhân , tính theo byte. Cú pháp của câu lệnh là : [form.] MSComm. InBufferSize [= numbyte%] Đặc tính này có liên quan đến kích thước bộ đệm nhận. Giá trị mặc định là 1024 byte. Kích thước của bộ đệm phải được đặt sao cho có thể cất giữ được số lượng lớn nhất của các kí tự sẽ được nhận trước khi chương trình ứng dụng co thể đọc chúng từ bộ đệm trừ khi ta làm vịêc ở chế độ bắt tay( hand shaking). Kiểu dữ liệu của đặc tính này là số nguyên( integer). c) InBufferCount Đặc tính InBufferCuont trả lại số kí tự trong bộ đệm nhận. Nò cũng có thể được sử dụng để xóa bộ đệm bằng cách đặt số của các kí tự bằng 0. Dặc tính này không có trong thời gian thiết kế chương trình. Cú pháp của câu lệnh là: [form.] MSComm. InBufferCount [=count%] Ta có thể xóa bộ đệm nhận bằng cách đặt đặc tính InBufferCount=0 .Kiểu dử liệu của của đặc tính này là số nguyên (integer). 3.1.5 Xuất dữ liệu : Có ba đặc tính chính được sử dụng để viết dữ liệu vào bộ đệm truyền là Output, OutBufferCount, OutBufferSize. a) Output Đặc tính Output sẽ viết 1 xâu kí tự vào bộ đệm truyền, đặc tính này không có trong thời gian thiết kế chương trình. Cú pháp của câu lệnh này là : [form.] MSComm. Output [=outstring$] b) OutBufferSize Đặc tính OutBufferSize đặt và trả lại kích thước của các lí tự trong bộ đệm truyền. Cú pháp : [form.] MSComm. OutBufferSize [=Numbyte%] Giá trị mặc định của đặc tính này là 512 byte. Chú ý : Không được nhầm lẫn giữa 2 đặc tính OutBufferCount và OutBufferSize với nhau. Đặc tính OutBufferCount nói lên số byte hiện đang có trong bộ đệm truyền, còn OutBufferSize qui định tổng kích thước của bộ đệm truyền. Không để kích thước bộ đệm truyền quá lớn . Tuy nhiên nếu để quá nhỏ thì xảy ra tình trạng tràn dữ liệu ( trừ khi làm việc ở chế độ bắt tay). Thông thường nên bắt đầu với kích thước bộ đệm truyền là 512 byte. Nếu lỗi tràn xảy thì phải tăng kích thước bộ đệm cho thích hợp với ứng dụng hiện tại. c) OutBufferCount Đặc tính OutBufferCount trả lại số kí tự trong bộ đệm truyền. Nhờ đặc tính này ta có thể xóa nội dung bộ đệm truyền bằng cách đặt giá trị của OutBufferCount=0 . Cú pháp : [form.] MSComm. OutBufferCount [=0] 3.1.6 Các đặc tính khác : a) CommEvent Đặc tính này trả lại hầu hết sự kiện hoặc lỗi truyền thông gần nhất. Cú pháp của câu lệnh là : [form.] MSComm.Event Mặc dù sự kiện OnComm phát sinh ra lỗi truyền thông và các sự kiện nhưng đặc tính này lại chứa mã số của các lỗi và sự kiện đó. Các sự kiện truyền thông : Đặt Giá trị Sự mô tả ComEvSend 1 Ký tự đã được gởi ComEvReceive 2 Ký tự đã được nhận ComEvCTS 3 Sự thay đổi trên đường dẫn CTS ComEvDSR 4 Sự thay đổi trên đường dẫn DSR từ một mức cao sang thấp ComEvCD 5 Sự thay đổi trên đường dẫn CD ComEvRing 6 tiếng chuông được phát hiện ComEvEOF 7 EOF ký tự nhận b) Inputlen Đặt và trả lại số kí tự mà đặc tính Input đọc được từ bộ đệm nhận. Giá trị mặc định của dặc tính này bằng 0 . Đặt Inputlen = 0 để điều khiểntruyền thông đọc hết nội dung bộ đệm nhận. Cú pháp : [form.] MSComm. Inputlen [=numchars%] Đặc tính này rất có ích khi đọc dữ liệu từ các máy có lối ra bị cố dịnh về chiều dài khối dữ liệu. c) Hàm Cominput Trả lại và xóa xâu kí tự ở bộ đệm nhận. Cú pháp : Cominput (ByVal hwnd As Integer, LpData As Any, ByVal do Data As Integer) As Integer Hàm này tương tự như đặc tính Input nhưng trả lại số byte nhận được. d) Hàm Comoutput Viết 1 xâu kí tự vào bộ đệm truyền. Cú pháp : Comoutput (ByVal hwnd As Integer ,LpData As Any, ByVal do As Integer) As Integer Hàm này tương tự như đặc tính output nhưng trả lại số byte kí tự được gửi đi 3.1.7 Sư kiện OnComm: Sự kiện OnCom được phát sinh vào bất cứ khi nào giá trị của đặc tính CommEvent thay đổi. Sự kiện : Private Sub MsComm_OnComm() Đặc tính CommEvent chứa mã số của lỗi hay sự kiện phát sinh bởi sự kiện OnComm. Nên đặt các đặc tính Rthreshold hoặc Streshold bằng 0 để vô hiệu bẫy sự kiện Receive and Send. PHẦN B : Thực Hiện Mô Hình Chương 1 : Mạch cảm biến hồng ngoại Sơ đồ nguyên lý: Q6 Q5 Q4 Q2 Q3 Q1 XVL XVL Giới thiệu linh kiện : a ) IC 555 : IC 555 là một IC rất đa năng, có nhiều công dụng trong thực tiễn. IC 555 dùng làm bộ định thời(Timer), bi65 tạo xung (Pulse Generator), tầng so áp (Comparator)… Sau đây là công dụng các chân: Chân số 1 (GND) Cho nối mass để lấy dòng cấp cho IC, dòng điện tử sẽ từ mass chảy vào IC. Chân số 2 (TRIGGER) Ngõ vào của một tầng so áp 2. Chân số 3 (OUTPUT) Xung ngõ ra. Chân số 4 (RESET) Xác lập trạng thái ngõ ra, khi chân số 4 ở mức cao thì ngõ ra mới được tự do và mới có thể lúc lên cao lúc xuống thấp. Chân số 5 (CONTROL VOLTAGE) Chân điều khiển, người ta đưa điện áp vào chân này để thực hiện sự điều chế tần số. Chân số 6 (THRESHOLD) Ngõ vào của một tầng so áp 1, mức áp chuẩn bằng 2/3 Vcc. Chân số 7 (DISCHARGE) Chân xả điện. Chân số 8 (Vcc) Chân nguồn, IC 555 có thể làm việc với mức nguồn nuôi từ 3V đến 18V. b) Led phát hồng ngoại Vật liệu dùng để chế tạo Led hồng ngoại là GaAs với vùng cấm có độ rộng khoảng 1.43eV tương ứng với bức xạ khoảng 900nm. Led hồng ngoại có hiệu suất lượng tử cao hơn so với led phát ra ánh sáng trông thấy được. Một số thông số kĩ thuật : Bước sóng : 850 – 900nm Cường độ bức xạ : 40 – 50 mW/sr Độ dài xung đến 9.6 Kbaud : 1.41 – 22.13 uS c) Transistor quang TST quang có thể coi như một sensor ánh sáng tổ hợp chung với một mạch khuếch đại. Độ khuếch đại của TST quang từ 100 đến 1000. Độ khuếch đại/dòng quang điện không tuyến tính đối với cường độ chiếu sáng khoảng từ 10% đến 20%. TST quang có tần số làm việc cao nhất khoảng vài trăm KHz Nguyên lý hoạt động : Khi Led hồng ngoại D1 phát ra ánh sáng sẽ làm TST quan dẫn, Q2 ngưng dẫn, Q3 ngưng dẫn và đầu ra VXL ở mức thấp. Ngược lại, khi chắn ngang ánh sáng của Led phát sẽ làm TST quang ngưng dẫn và ngõ ra VXL ở mức cao. Và tương tự ở kênh còn lại cũng vậy. Chương 2 : GIAO TIẾP MÁY TÍNH 2.1 Giao diện VB 2.2 Lưu đồ giải thuật : yes START Sensor1=0? Sensor2=1? Set Baud Rate Enable Interupt No Sensor2=0? Sensor1=1? Sensor2=1? SBUF=0XFF Delay( ) SBUF=0X00 Delay( ) Sensor1=1? END yes yes No No 2.3 Chương trình VB Dim Baud, Com, i, Sele, Inc, Data, j, k, xn As Byte Dim b As Double Dim Comsetting, DataIn As String Dim a As String Private Sub Combo1_Click() 'If Combo2.Text = "" Then ' If MsgBox("Save all changes?", vbOKOnly) = vbOK Then Combo2.SetFocus 'Else ' Text1.Text = Combo1.Text ' MSComm1.CommPort = Combo1.Text ' Text2.Text = Combo2.Text ' MSComm1.Settings = "9600,E,8,1" ' MSComm1.CommPort = 2 Com = Combo1.Text Combo1.Enabled = False Combo2.Enabled = True 'If MsgBox("Please select baud rate ", vbOKOnly) = vbOK Then Combo2.SetFocus 'End If End Sub Private Sub Combo2_Click() On Error GoTo X_Error Baud = Combo2.Text ' If Timer1.Enabled = True Then Timer1.Enabled = False If MSComm1.PortOpen = True Then MSComm1.PortOpen = False MSComm1.CommPort = Com Comsetting = CStr(Baud) & ",N,8,1" MSComm1.Settings = Comsetting MSComm1.InputLen = 0 ' Read all buffer on input MSComm1.InBufferSize = 1024 'MSComm1.RThreshold = 0 ' khong tim kiem ky tu nhan duoc MSComm1.RThreshold = 1 ' phat hien tung ky tu nhan duoc MSComm1.InputMode = comInputModeText MSComm1.OutBufferSize = 1024 ' Read all buffer on input MSComm1.SThreshold = 0 MSComm1.Handshaking = comNone ' If Timer1.Enabled = False Then Timer1.Enabled = True If MSComm1.PortOpen = False Then MSComm1.PortOpen = True Command2.Enabled = True Command3.Enabled = True Command4.Enabled = True Command5.Enabled = True Timer1.Enabled = True GoTo KT X_Error: If MsgBox("Please select Com Port againt and then select Baud Rate ", vbOKOnly) = vbOK Then Combo1.Enabled = True Combo2.Enabled = False Combo1.SetFocus Command2.Enabled = False Command3.Enabled = False Command4.Enabled = False Command5.Enabled = False Timer1.Enabled = False End If KT: End Sub Private Sub Command1_Click() xn = MsgBox("Do you want to exit ? ", vbOKCancel) If xn = vbOK Then Unload Me End End Sub Private Sub Command2_Click() If Command2.Caption = "OFF" Then MSComm1.Output = Chr$(1) Command2.Caption = "ON" Shape1(0).BackColor = &HFF& Else MSComm1.Output = Chr$(5) Command2.Caption = "OFF" Shape1(0).BackColor = &HFFFFFF End If End Sub Private Sub Command3_Click() If Command3.Caption = "OFF" Then MSComm1.Output = Chr$(2) Command3.Caption = "ON" Shape1(1).BackColor = &HFF& Else MSComm1.Output = Chr$(6) Command3.Caption = "OFF" Shape1(1).BackColor = &HFFFFFF End If End Sub Private Sub Command4_Click() If Command4.Caption = "OFF" Then MSComm1.Output = Chr$(3) Command4.Caption = "ON" Shape1(2).BackColor = &HFF& Else MSComm1.Output = Chr$(7) Command4.Caption = "OFF" Shape1(2).BackColor = &HFFFFFF End If End Sub Private Sub Command5_Click() If Command5.Caption = "OFF" Then MSComm1.Output = Chr$(4) Command5.Caption = "ON" Shape1(3).BackColor = &HFF& Else MSComm1.Output = Chr$(8) Command5.Caption = "OFF" Shape1(3).BackColor = &HFFFFFF End If End Sub Private Sub Form_Load() Combo2.Enabled = False i = 60 Sele = 2 Inc = 0 Command2.Caption = "OFF" Command3.Caption = "OFF" Command4.Caption = "OFF" Command5.Caption = "OFF" For j = 0 To 3 Shape1(j).BackColor = &HFFFFFF Next j Command2.Enabled = False Command3.Enabled = False Command4.Enabled = False Command5.Enabled = False Text2.Text = 0 End Sub Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive DataIn = MSComm1.Input Data = Asc(DataIn) If Data = 255 Then Inc = Inc + 1 Text2.Text = Inc End If If Data = 0 Then Inc = Inc - 1 Text2.Text = Inc End If End Selet End Sub Private Sub Timer1_Timer() If Inc = 0 Then For k = 0 To 3 Shape1(k).BackColor = &HFFFFFF Next k Command2.Caption = "OFF" Command3.Caption = "OFF" Command4.Caption = "OFF" Command5.Caption = "OFF" MSComm1.Output = Chr$(5) MSComm1.Output = Chr$(6) MSComm1.Output = Chr$(7) MSComm1.Output = Chr$(8) End If End Sub 2.4 Chương trình VXL #include #include #define XTAL 11059200 #define baudrate 9600 sbit Led1 = P0^0; sbit Led2 = P0^1; sbit Led3 = P0^2; sbit Led4 = P0^3; sbit Sensor1 = P2^0; sbit Sensor2 = P2^1; /* * Program Delay */ void Delayms(unsigned char mmSecond) { unsigned int i; unsigned char j; for (j=0;j<=mmSecond;j++) { for (i=0;i<1000;i++) { } } } void Delays(unsigned char s) // delay 0,1s { unsigned char i; for (i=0;i<s;i++) { Delayms(100); } } /* * Serial Interrupt Service Routine */ static void com_isr (void) interrupt 4 using 1 { unsigned char Data ; /*----- Received data interrupt. ----------------------------------------*/ if (RI) { Data = SBUF; if (Data==1) Led1 = 0; if (Data==2) Led2 = 0; if (Data==3) Led3 = 0; if (Data==4) Led4 = 0; if (Data==5) Led1 = 1; if (Data==6) Led2 = 1; if ((Data==7)) Led3 = 1; if ((Data==1)) Led4 = 1; P1 = SBUF; // read character RI = 0; // clear interrupt request flag } /*------ Transmitted data interrupt. ------------------------------------*/ if (TI != 0) { TI = 0; // clear interrupt request flag } } /* * Function to initialize the serial port and the UART baudrate. */ void com_initialize (void) { // Configure timer 1 as a baud rate generator PCON |= 0x80; // 0x80=SMOD: set serial baudrate doubler TMOD &= 0x0f; // Tung TMOD |= 0x20; // put timer 1 into MODE 2 TH1 = (unsigned char) (256 - (XTAL / (16L * 12L * baudrate))); TR1 = 1; // start timer 1 SCON = 0x50; // serial port MODE 1, enable serial receiver ES = 1; // enable serial interrupts } /* * Main C function that start the interrupt-driven serial I/O. */ void main (void) { unsigned char j; EA = 1; /* enable global interrupts */ com_initialize (); /* initialize interrupt driven serial I/O */ P0 = 0xff; P1 = 0xff; P2 = 0xff; j = 0; while (1) { // Input; if ((Sensor1!=1 ) && (Sensor2!=0)) { while (Sensor2) { } // Led1=Led1; SBUF = 0xff; Delayms(700); } // Output; if ((Sensor1!=0 ) && (Sensor2!=1)) { while (Sensor1) { } // Led1=Led1; SBUF = 0x00; Delayms(700); } /* for (j=0;j<=255;j++) { SBUF = j; Delayms(255) ; } /* j++ ; SBUF = j; P1=j ; Delays(1); Sensor1 =~ Sensor1; //if (j=255) j=0; */ } } TÀI LIỆU THAM KHẢO 1. Họ vi điều khiển 8051 Tống Văn On 2. Linh khiện quang điện tử Dương Minh Trí 3. Tự học lập trình Visual Baic 6.0 Đậu Quang Tuấn 4. Lập trình ghép nối máy tính Ngô Diên Tập

Các file đính kèm theo tài liệu này:

  • docHệ thống giám sát và điều khiển các thiết bị trong phòng.doc
Tài liệu liên quan