Luận văn Điều khiển thiết bị điện qua máy vi tính

Đối với phần mềm giao diện chương trình trên máy tính nhóm cũng tiến hành tương tự. Ban đầu là xem các tài liệu nói về cách lập trình bằng VISUAL BASIC sau đó tiến hành viết thửcác chương trình đơn giản có liên quan đến chương trình sẽviết. Khi đã có kiến thức cơ bản vềlập trình VISUAL BASIC nhóm mới bắt đầu viết về chương trình giám sát và điểu khiển nhiệt độ. Công việc này cũng tiến hành theo nhiều giai đoạn từviệc bốtrí các nút lệnh, các bảng lựa chọn đến cách giao tiếp giữa máy tính và mạch đo nhiệt đô cuối cùng là việc xây dựng giao diện chương trình cho “bắt mắt” và đặc biệt là dễdàng sửdụng.

pdf90 trang | Chia sẻ: lylyngoc | Lượt xem: 2604 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Luận văn Điều khiển thiết bị điện qua máy vi tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Để Reset hệ thống, chân Reset phải ở mức cao tối thiểu hai chu kì máy (T= 2 s) và VRST phải áp cực tiểu là 2.5V. Chọn VRST = 3V  RRST = 10k ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 51 T = 40 ms  C = (40.103)/ [8.2.103.ln(5/3) ] = 9.6x10-6 (F)  chọn C = 10  F. Mạch dao động dùng thạch anh 11.0592MHz, tụ C11 và C12 lấy theo giá trị chuẩn là 33pF  10%. 3.3. Khối rờ-le: Chọn rờ-le đôi, thông số kỹ thuật: Điện áp kích: 12VDC Dòng chịu được: 1A ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 52 Diode chống xả ngược (được mắc ngược cực). Điện trở gắn nối tiếp với led dùng để hạn dòng cho led, led báo để có kích relay hay không. Điện trở gắn ở cực B transistor để bảo vệ cho transistor. Chọn : Rhạn dòng là 1K Rbảo vệ là 1k Khi cực B của transistor ở mức 1  transistor dẫn  led sáng và relay được kích  thiết bị được mở. 3.4. Khối nguồn: Do mạch cung cấp không đòi hỏi về công suất quá cao nên ta chọn biến áp vừa phải dòng cung cấp khoảng 200mA và điện áp ra là 12VAC với tần số dao động của nguồn điện xoay chiều là 50Hz đến 60Hz và được chỉnh lưu để lấy ra hai nguồn mong muốn là 5V và 12V. Nguồn 5V được sử dụng để cung cấp cho hầu hết các linh kiện của mạch điện: Là nguồn nuôi cho bộ vi xử lý, nguồn cung cấp cho khối giao tiếp RS-232. Nguồn 12V dùng để cấp nguồn cho khối rờ-le, sở dĩ không sử dụng nguồn 5V là để cách ly nguồn với các khối khác để các khối này hoạt động được ổn định *Tính toán lý thuyết: Với nguồn vào từ biến áp có dòng 200mA và với điện áp ngõ ra của biến áp là VVV 172*122*0  điện áp hiệu dụng Vì thế ta chọn diode 1N4007 với mức điện áp Vgh=1000V,I = 1A và có Igh= 30A, ngoài ra nhiệt độ chịu được có thể lên tới +1750C Ta chọn IC KA7805 với các thông số tương đối phù hợp: Điện áp ngõ vào chịu có thể chịu được: VVIN 4035  Công suất tiêu thụ tương đối vừa phải : WPD 8.20 Tầm nhiệt độ chịu được khi kéo tải: CT 015030  Để hoạt động trong việc có tải dòng ra đạt: mAI 1000  ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 53 Trong từng điều kiện nhiệt độ thì tầm hoạt động của IC sẽ cho một kết qua thay đổi khác nhau,tốt nhất đừng cho IC quá nóng để cho sử hoạt động ổn định được tốt nhất,nếu quá nóng ta nên dùng tản nhiệt,do trong mạch không sử dụng nhiều qua các tải nặng nên ta không dùng tản nhiệt với mức điện áp ở ngõ vào là 17V do nên không làm cho sự hoạt động bị ảnh hưởng nhiều. Để phục vụ cho khối công suất ta chọn IC KA7812 với những tính chất như 7805: Điện áp ngõ vào có thể chịu được: VVIN 4735  Do phần công suất của ta không phải chạy những tải quá nặng nên về dòng không cần lớn nên ta sử dụng trực tiếp dòng do IC KA7812 cung cấp mAI 1000  đủ để có thể hoạt động cho phần tải. Lưu ý: trước mỗi ngõ vào của IC ổn áp nên có thêm một tụ lọc nhiễu nhỏ hơn F1 Chọn tụ lọc nguồn với nguồn ngõ vào sau chỉnh lưu là 17VAC nên ta chọn tụ =25V/1000uF là phù hợp cho mạch điện không quá lớn. II. THIẾT KẾ PHẦN MỀM VÀ GIAO DIỆN ĐIỀU KHIỂN. . 1. Lựa chọn ngôn ngữ lập trình. Việc lập trình có thể thực hiện bằng một vài ngôn ngữ như hợp ngữ (Assembly), C và Basic. Đây là những ngôn ngữ thông dụng nhất. Assembly là ngôn ngữ bậc thấp, việc lập trình được tiến hành một cách chậm chạp, nhưng chiếm không gian bộ nhớ ít nhất và đưa ra kết quả nhanh nhất khi đánh giá chương trình qua tốc độ thực hiện. Đây cũng là một ngôn ngữ được sử dụng thông dụng nhất trong lập trình cho vi điều khiển. Ngôn ngữ C thể hiện rõ tính dễ viết, dễ hiểu hơn, nhưng việc thực thi chương trình chậm hơn chương trình viết bằng hợp ngữ. Basic là ngôn ngữ dễ học nhất và tập lệnh của BASIC gần gũi nhất với cách tư duy của con người, nhưng cũng giống như ngôn ngữ C chương trình viết bằng Basic cũng chạy chậm hơn chương trình hợp ngữ. Do vậy nhóm thực hiện quyết định chọn ngôn ngữ Assembly để lập trình cho vi điều khiển AT89S52 do những ưu điểm của nó rất thích hợp cho việc thiết kế của nhóm. 3. Lưu đồ giải thuật: ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 54 Đầu tiên khi khởi động chương trình thì sẽ có các lệnh nạp giá trị ban đầu cho các thanh ghi và cho các bit địa chỉ, đồng thời thiết lập các thông số cho việc truyền dữ liệu nối tiếp như: tốc độ baud, cho phép ngắt, … Lúc này vi xử lý sẽ đợi lệnh từ máy tính hoặc nút nhấn để thực hiện đóng ngắt thiết bị. Nếu có lệnh từ máy tính truyền xuống, thì cờ ngắt thu RI sẽ tự động được bật lên và bắt đầu đi vào chương trình ngắt, vi xử lý sẽ lấy dữ liệu nhận được so sánh với dữ liệu đặt trước, nếu đúng thì đóng – ngắt thiết bị, nếu sai thì quay trở về đầu chương trình ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 55 3. Giới thiệu các ngôn ngữ lập trình. Ngôn ngữ lập trình được chia thành hai loại đó là ngôn ngữ lập trình cấp thấp và ngôn ngữ lập trình cấp cao. Ngôn ngữ lập trình cấp thấp. Là ngôn ngữ được định nghĩa gắn liền với cấu trúc bên trong và các nguyên tắc làm việc của máy. Nó cho phép người lập trình tác động trực tiếp đến các thanh ghi và bộ nhớ dùng để viết hệ điều hành và viết những chương trình. Ví dụ như ngôn ngữ lập trình Assembler, IBM, Compass, CDC… Ngôn ngữ lập trình cấp cao. Được hình thành năm 1955, đây là ngôn ngữ định nghĩa độc lập với cấu trúc của máy và rất gần gũi với ngôn ngữ của con người. đặc điểm của ngôn ngữ này là: - Có mức độ tổng quát cao hơn ngôn ngữ máy, gần gũi với ngôn ngữ con người và có cấu trúc chặt chẽ, chính xác. - Có cấu trúc lệnh đơn giản. - Do ngôn ngữ này hoàn toàn độc lập với cấu trúc bên trong của máy tính nên có thể sử dụng cho nhiều loại máy khác nhau. Nhưng để máy có thể hiểu được loại ngôn ngữ này thì cần phải có các chương trình chuyển đổi gọi là chương trình biên dịch (Compler) hoặc diễn dịch (Interpreter). * Các ngôn ngữ lập trình thông dụng. Ngôn ngữ lập trình Turbo Pascal. Ngôn ngữ Pascal do giáo sư Niklaws Wirth phát minh năm 1970. Đây là ngôn ngữ có cấu trúc chặt chẽ và được sử dụng rộng rãi để giảng dạy lập trình trong các trường trung học, cao đẳng cũng như đại học. Tuy vậy do ngôn ngữ lập trình Pascal chạy trên nền DOS nên việc tạo ra các giao diện thường kém hấp dẫn (mặc dù hiện nay cũng có có phiên bản Turbo Pascal hạy trên nền Win). Do vậy nó thường mang tính chất đào tạo hơn là tính chất thương mại như các sản phẩm ngày nay như viết bằng Delphi hay Visual Basic, Visual C++… Ngôn ngữ lập trình Visual Basic. ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 56 VB 6.0 là phiên bản mới nhất của Visual Basic do hãng Microsoft viết. đây là ngôn ngữ lập trình mạnh sử dụng phương pháp lập trình hướng đối tượng nên nó đã giúp ích rất nhiều cho người lập trình nhờ vào khả năng tự động của nó. Ngoài phương pháp kinh điển là xây dựng các lớp đối tượng bằng việc viết mã lệnh, với VB 6.0 ta có thể thực hiện công việc này chỉ bằng các thao tác “kéo - thả” các đối tượng trên màn hình để thiết kế các ứng dụng bất kỳ một cách nhanh chóng và chính xác. Bên cạnh các công cụ được hỗ trợ sẵn, người sử dụng còn có thể tạo ra thêm các công cụ khác để phục vụ cho những mục đích riêng của mình. Khác với ngôn ngữ Pascal, VB cho phép người sử dụng có thể kiểm tra chương trình trong quá trình lập trình. Đây là ngôn ngữ lập trình rất mạnh hiện nay. Nó được sử dụng để viết rất nhiều các chương trình ứng dụng trong nền công nghiệp hiện nay. SƠ LƯỢT VỀ VB: * Kiểu dữ liệu Khái niệm Kiểu dữ liệu là một tập hợp các giá trị mà một biến của kiểu có thể nhận và một tập hợp các phép toán có thể áp dụng trên các giá trị đó. Các kiểu dữ liệu cơ sở trong Visual Basic Kiểu dữ liệu Mô tả Boolean Gồm 2 giá trị: TRUE & FALSE. Byte Các giá trị số nguyên từ 0 – 255 Integer Các giá trị số nguyên từ -32768 – 32767 Long Các giá trị số nguyên từ -2147483648 – 2147483647. Kiểu dữ liệu này thường được gọi là số nguyên dài. Single Các giá trị số thực từ -3.402823E+38 – 3.402823E+38. Kiểu dữ liệu này còn được gọi là độ chính xác đơn. Double Các giá trị số thực từ -1.79769313486232E+308 - 1.79769313486232E+308. Kiểu dữ liệu này được gọi là độ chính xác kép. Currency Dữ liệu tiền tệ chứa các giá trị số từ -922.337.203.685.477,5808 - 922.337.203.685.477,5807. String Chuỗi dữ liệu từ 0 đến 65.500 ký tự hay ký số, thậm chí là các giá trị đặc biệt như ^%@. Giá trị kiểu chuỗi được đặt giữa 2 dấu ngoặc kép (“”). Date Dữ liệu kiểu ngày tháng, giá trị được đặt giữa cặp dấu ##. Việc định dạng hiển thị tùy thuộc vào việc thiết lập trong Control Panel. Variant Chứa mọi giá trị của các kiểu dữ liệu khác, kể cả mảng. ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 57 * Hằng số Khái niệm Hằng số (Constant) là giá trị dữ liệu không thay đổi. Khai báo hằng [Public|Private] Const [As ] = Trong đó, tên hằng được đặt giống theo quy tắc đặt tên của điều khiển. Ví dụ: Const g = 9.8 Const Num As Integer = 4*5 Ta có thể dùng cửa sổ Object Browser để xem danh sách các hằng có sẵn của VB và VBA (Visual Basic for Application). Trường hợp trùng tên hằng trong những thư viện khác nhau, ta có thể chỉ rõ tham chiếu hằng. [.][.] * Biến Khái niệm Biến (Variable) là vùng lưu trữ được đặt tên để chứa dữ liệu tạm thời trong quá trình tính toán, so sánh và các công việc khác. Biến có 2 đăc điểm: - Mỗi biến có một tên. - Mỗi biến có thể chứa duy nhất một loại dữ liệu. Khai báo [Public|Private|Static|Dim] [ As ] Trong đó, tên biến: là một tên được đặt giống quy tắc đặt tên điều khiển. Nếu cần khai báo nhiều biến trên một dòng thì mỗi khai báo cách nhau dấu phẩy (,). Nếu khai báo biến không xác định kiểu dữ liệu thì biến đó có kiểu Variant. Khai báo ngầm: Đây là hình thức không cần phải khai báo một biến trước khi sử dụng. Cách dùng này có vẻ thuận tiện nhưng sẽ gây một số sai sót, chẳng hạn khi ta đánh nhầm tên biến, VB sẽ hiểu đó là một biến mới dẫn đến kết quả chương trình sai mà rất khó phát hiện. Ví dụ: Dim Num As Long, a As Single Dim Age As Integer Khai báo tường minh: Để tránh rắc rối như đã nêu ở trên, ta nên quy định rằng VB sẽ báo lỗi khi gặp biến chưa được khai báo bằng dòng lệnh: Option Explicit trong phần Declaration (khai báo) của mô-đun. Option Explicit chỉ có tác dụng trên từng mô-đun do đó ta phải đặt dòng lệnh này trong từng mô-đun của biểu mẫu, mô-đun lớp hay mô-đun chuẩn. * Biểu thức Khái niệm Toán tử hay phép toán (Operator): là từ hay ký hiệu nhằm thực hiện phép tính và xử lý dữ liệu. Toán hạng: là giá trị dữ liệu (biến, hằng…). ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 58 Biểu thức: là tập hợp các toán hạng và các toán tử kết hợp lại với nhau theo quy tắc nhất định để tính toán ra một giá trị nào đó. Các loại phép toán Các phép toán số học: Thao tác trên các giá trị có kiểu dữ liệu số. Phép toán Ý nghĩa Kiểu của đối số Kiểu của kết quả - Phép lấy số đối Kiểu số (Integer, Single…) Như kiểu đối số + Phép cộng hai số Kiểu số (Integer, Single…) Như kiểu đối số - Phép trừ hai số Kiểu số (Integer, Single…) Như kiểu đối số * Phép nhân hai số Kiểu số (Integer, Single…) Như kiểu đối số / Phép chia hai số Kiểu số (Integer, Single…) Single hay Double \ Phép chia lấy phần nguyên Integer, Long Integer, Long Mod Phép chia lấy phần dư Integer, Long Integer, Long ^ Tính lũy thừa Kiểu số (Integer, Single…) Như kiểu đối số Các phép toán quan hệ Đây là các phép toán mà giá trị trả về của chúng là một giá trị kiểu Boolean (TRUE hay FALSE). Phép toán Ý nghĩa = So sánh bằng nhau So sánh khác nhau > So sánh lớn hơn < So sánh nhỏ hơn >= So sánh lớn hơn hoặc bằng <= So sánh nhỏ hơn hoặc bằng Các phép toán Logic: là các phép toán tác động trên kiểu Boolean và cho kết quả là kiểu Boolean. Các phép toán này bao gồm AND (và), OR (hoặc), NOT (phủ định). Sau đây là bảng giá trị của các phép toán: ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 59 X Y X AND Y X OR Y NOT X TRUE TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE * Câu lệnh Một câu lệnh (statement) xác định một công việc mà chương trình phải thực hiện để xử lý dữ liệu đã được mô tả và khai báo. Các câu lệnh được ngăn cách với nhau bởi ký tự xuống dòng. Ký tự xuống dòng báo hiệu kết thúc một câu lệnh. Lệnh gán Cú pháp: = Ví dụ: Giả sử ta có khai báo sau: Dim TodayTemp As Single, MinAge As Integer Dim Sales As Single, NewSales As Single, FullName As String Các lệnh sau gán giá trị cho các biến trên: TodayTemp = 30.5 MinAge = 18 Sales = 200000 NewSales = Sales * 1.2 Giả sử người dùng cần nhập họ và tên vào ô nhập liệu TextBox có thuộc tính Name là txtName, câu lệnh dưới đây sẽ lưu giá trị của ô nhập liệu vào trong biến FullName: FullName = txtName.Text Lưu ý: Kiểu dữ liệu của biểu thức (vế phải của lệnh gán) phải phù hợp với biến ta cần gán trị. Lệnh rẽ nhánh If Một dòng lệnh: If Then Nhiều dòng lệnh: If Then Các dòng lệnh End If ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 60 Trong đó, : biểu thức mà kết quả trả về kiểu Boolean. Ý nghĩa câu lệnh: Các dòng lệnh hay dòng lệnh sẽ được thi hành nếu như điều kiện là đúng. Còn nếu như điều kiện là sai thì câu lệnh tiếp theo sau cấu trúc If ... Then được thi hành. Dạng đầy đủ: If ... Then ... Else If Then [Khối lệnh 1] ElseIf Then [Khối lệnh 2]... [Else [Khối lệnh n]] End If VB sẽ kiểm tra các điều kiện, nếu điều kiện nào đúng thì khối lệnh tương ứng sẽ được thi hành. Ngược lại nếu không có điều kiện nào đúng thì khối lệnh sau từ khóa Else sẽ được thi hành. Ví dụ: If (TheColorYouLike = vbRed) Then MsgBox "You are a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You are a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You are a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You are a sad person" Else MsgBox "You are an average person" End If ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 61 Lệnh lựa chọn Select Case Trong trường hợp có quá nhiều các điều kiện cần phải kiểm tra, nếu ta dùng cấu trúc rẽ nhánh If…Then thì đoạn lệnh không được trong sáng, khó kiểm tra, sửa đổi khi có sai sót. Ngược lại với cấu trúc Select…Case, biểu thức điều kiện sẽ được tính toán một lần vào đầu cấu trúc, sau đó VB sẽ so sánh kết quả với từng trường hợp (Case). Nếu bằng nó thi hành khối lệnh trong trường hợp (Case) đó. Select Case Case [Khối lệnh 1] Case [Khối lệnh 2] . . . [Case Else [Khối lệnh n]] End Select Mỗi danh sách kết quả biểu thức sẽ chứa một hoặc nhiều giá trị. Trong trường hợp có nhiều giá trị thì mỗi giá trị cách nhau bởi dấu phẩy (,). Nếu có nhiều Case cùng thỏa điều kiện thì khối lệnh của Case đầu tiên sẽ được thực hiện. Ví dụ của lệnh rẽ nhánh If…Then ở trên có thể viết như sau: Select Case TheColorYouLike Case vbRed MsgBox "You are a lucky person" Case vbGreen MsgBox "You are a hopeful person" Case vbBlue MsgBox "You are a brave person" Case vbMagenta MsgBox "You are a sad person" Case Else MsgBox "You are an average person" End Select Toán tử Is & To Toán tử Is: Được dùng để so sánh với một biểu thức nào đó. Toán tử To: Dùng để xác lập miền giá trị của . Ví dụ: Select Case Tuoi Case Is <18 MsgBox “Vi thanh nien” Case 18 To 30 MsgBox “Ban da truong thanh, lo lap than di” Case 31 To 60 ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 62 MsgBox “Ban dang o lua tuoi trung nien” Case Else MsgBox “Ban da lon tuoi, nghi huu duoc roi day!” End Select Lưu ý: Trong ví dụ trên không thể viết Case Tuoi < 18. * Cấu trúc lặp Các cấu trúc lặp cho phép thi hành một khối lệnh nào đó nhiều lần. Lặp không biết trước số lần lặp Khối lệnhDo ... Loop: Đây là cấu trúc lặp không xác định trước số lần lặp, trong đó, số lần lặp sẽ được quyết định bởi một biểu thức điều kiện. Biểu thức điều kiện phải có kết quả là True hoặc False. Cấu trúc này có 4 kiểu: Kiểu 1: Do While Đkiện Loop Đúng Sai Khối lệnh sẽ được thi hành đến khi nào điều kiện không còn đúng nữa. Do biểu thức điều kiện được kiểm tra trước khi thi hành khối lệnh, do đó có thể khối lệnh sẽ không được thực hiện một lần nào cả. Kiểu 2: Do Loop While Khối lệnh sẽ được thực hiện, sau đó biểu thức điều kiện được kiểm tra, nếu điều kiện còn đúng thì, khối lệnh sẽ được thực hiện tiếp tục. Do biểu thức điều kiện được kiểm tra sau, do đó khối lệnh sẽ được thực hiện ít nhất một lần. Kiểu 3: Do Until Loop Cũng tương tự như cấu trúc Do While ... Loop nhưng khác biệt ở chỗ là khối lệnh sẽ được thi hành khi điều kiện còn sai. Kiểu 4: Do Loop Until Khối lệnh được thi hành trong khi điều kiện còn sai và có ít nhất là một lần lặp. Ví dụ: Đoạn lệnh dưới đây cho phép kiểm tra một số nguyên N có phải là số nguyên tố hay không? Dim i As Integer i = 2 Do While (i <= Sqr(N)) And (N Mod i = 0) i = i + 1 Loop ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 63 If (i > Sqr(N)) And (N 1) Then MsgBox Str(N) & “ la so nguyen to” Else MsgBox Str(N) & “ khong la so nguyen to” End If Trong đó, hàm Sqr: hàm tính căn bậc hai của một số Lặp biết trước số lần lặp For ... Next Đây là cấu trúc biết trước số lần lặp, ta dùng biến đếm tăng dần hoặc giảm dần để xác định số lần lặp. For = To [Step ] [khối lệnh] Next Biến đếm, điểm đầu, điểm cuối, bước nhảy là những giá trị số (Integer, Single,…). Bước nhảy có thể là âm hoặc dương. Nếu bước nhảy là số âm thì điểm đầu phải lớn hơn điểm cuối, nếu không khối lệnh sẽ không được thi hành. Khi Step không được chỉ ra, VB sẽ dùng bước nhảy mặc định là một. Ví dụ: Đoạn lệnh sau đây sẽ hiển thị các kiểu chữ hiện có của máy bạn. Private Sub Form_Click( ) Dim i As Integer For i = 0 To Screen.FontCount MsgBox Screen.Fonts(I) Next End Sub Ví dụ: Tính N! TextBox: Name:txtNum Bước 1: Thiết kế chương trình có giao diện: ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 64 Label: Name: lblK Bước 2: Sự kiện Command1_Click được xử lý: Private Sub Command1_Click() Dim i As Integer, n As Integer, Kq As Long n = Val(txtNum.Text) Kq = 1 For i = 1 To n Kq = Kq * i Next lblKQ.Caption = Str(Kq) End Sub Lưu dự án và chạy chương trình ta được kết quả như hình dưới: For Each ... Next Tương tự vòng lặp For ... Next, nhưng nó lặp khối lệnh theo số phần tử của một tập các đối tượng hay một mảng thay vì theo số lần lặp xác định. Vòng lặp này tiện lợi khi ta không biết chính xác bao nhiêu phần tử trong tập hợp. For Each In Next Lưu ý: - Phần tử trong tập hợp chỉ có thể là biến Variant, biến Object, hoặc một đối tượng trong Object Browser. - Phần tử trong mảng chỉ có thể là biến Variant. - Không dùng For Each ... Next với mảng chứa kiểu tự định nghĩa vì Variant không chứa kiểu tự định nghĩa. * Chương trình con Khái niệm Trong những chương trình lớn, có thể có những đoạn chương trình viết lặp đi lặp lại nhiều lần, để tránh rườm rà và mất thời gian khi viết chương trình người ta thường phân chia chương trình thành nhiều module, mỗi module giải quyết một công việc nào đó. Các module như vậy gọi là các chương trình con. ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 65 Một tiện lợi khác của việc sử dụng chương trình con là ta có thể dễ dàng kiểm tra xác định tính đúng đắn của nó trước khi ráp nối vào chương trình chính và do đó việc xác định sai sót để tiến hành hiệu đính trong chương trình chính sẽ thuận lợi hơn. Trong Visual Basic, chương trình con có hai dạng là hàm (Function) và thủ tục (Sub). Hàm khác thủ tục ở chỗ hàm trả về cho lệnh gọi một giá trị thông qua tên của nó còn thủ tục thì không. Do vậy ta chỉ dùng hàm khi và chỉ khi thoả mãn đồng thời các yêu cầu sau đây: Ta muốn nhận lại một kết quả (chỉ một mà thôi) khi gọi chương trình con. Ta cần dùng tên chương trình con (có chứa kết quả) để viết trong các biểu thức. Nếu không thỏa mãn hai điều kiện ấy thì dùng thủ tục. * Thủ tục Khái niệm: Thủ tục là một chương trình con thực hiện một hay một số tác vụ nào đó. Thủ tục có thể có hay không có tham số. Khai báo thủ tục [Private | Public] [Static] Sub [([As ])] hay End Sub Trong đó: - : Đây là một tên được đặt giống quy tắc tên biến, hằng,… - [: ]: có thể có hay không? Nếu có nhiều tham số thì mỗi tham số phân cách nhau dấu phẩy. Nếu không xác định kiểu tham số thì tham số có kiểu Variant. Để gọi thủ tục để thực thi, ta có 2 cách: [] Call ([]) Ví dụ: Thiết kế chương trình kiểm tra xem số nguyên N có phải là số nguyên tố hay không? Bước 1: thiết kế giao diện TextBox: Name:txtNum Bước 2: Viết thủ tục KtraNgTo trong phần mã lệnh của Form Sub KTraNgTo(N As Integer) Dim i As Integer i = 2 Do While (i 0) i = i + 1 Loop If (i > Sqr(N)) And (N 1) Then MsgBox Str(N) & " la so nguyen to" Else MsgBox Str(N) & " khong la so nguyen to" End If End Sub ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 66 Bước 3: Xử lý sự kiện Command1_Click; trong thủ tục xử lý sự kiện này ta có gọi thủ tục KtraNgTo như sau: Private Sub Command1_Click() KTraNgTo Val(txtNum.Text) ‘ Call KtraNgTo(Val(txtNum.Text)) End Sub Bước 4: Lưu dự án và chạy chương trình. Ta được kết quả sau: Trong ví dụ trên thay vì gọi thủ tục bằng lời gọi: KTraNgTo Val(txtNum.Text) Ta có thể sử dụng cách khác: Call KtraNgTo(Val(txtNum.Text)) *Hàm Khái niệm Hàm (Function) là một chương trình con có nhiệm vụ tính toán và cho ta một kết quả. Kết quả này được trả về trong tên hàm cho lời gọi nó. Khai báo hàm [Private | Public | Static] Function [([As ])] _ [As ] hay End Function Trong đó: - : Đây là một tên được đặt giống quy tắc tên biến, hằng,… - [: ]: có thể có hay không? Nếu có nhiều tham số thì mỗi tham số phân cách nhau dấu phẩy. Nếu không xác định kiểu tham số thì tham số có kiểu Variant. - : Kết quả trả về của hàm, trong trường hợp không khai báo As <kiểu dữ liệu>, mặc định, VB hiểu kiểu trả về kiểu Variant. Khi gọi hàm để thực thi ta nhận được một kết quả. Cần chú ý khi gọi hàm thực thi ta nhận được một kết quả có kiểu chính là kiểu trả về của hàm (hay là kiểu Variant nếu ta không chỉ rõ kiểu trả về trong định nghĩa hàm). Do đó lời gọi hàm phải là thành phần của một biểu thức. Cú pháp gọi hàm thực thi: [(tham số)]. Ví dụ: Tính N! TextBox: Name:txtNum Bước 1: Thiết kế chương trình có giao diện: ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 67 Label: Name: lblKQ Bước 2: Thêm một hàm vào cửa sổ mã lệnh của Form Function Giaithua(N As Integer) As Long Dim i As Integer, Kq As Long Kq = 1 For i = 1 To n Kq = Kq * i Next Giaithua = Kq End Function Private Sub Command1_Click() Dim n As Integer n = Val(txtNum.Text) lblKQ.Caption = Str(Giaithua(n)) End Sub Lưu dự án và chạy chương trình ta được kết quả như hình dưới: Lưu ý: Do khi gọi hàm ta nhận được một kết quả nên bên trong phần định nghĩa hàm, trước khi kết thúc ta phải gán kết quả trả về của hàm thông qua tên hàm (trong ví dụ trên là dòng lệnh Giaithua = Kq) ** Truy xuất dữ liệu trong Visual Basic Các khái niệm * Module: - Một ứng dụng đơn giản có thể chỉ có một biểu mẫu, lúc đó tất cả mã lệnh của ứng dụng đó được đặt trong cửa sổ mã lệnh của biểu mẫu đó (gọi là Form Module). Khi ứng dụng được phát triển lớn lên, chúng ta có thể có thêm một số biểu mẫu nữa và lúc này khả năng lặp đi lặp lại nhiều lần của một đoạn mã lệnh trong nhiều biểu mẫu khác nhau là rất lớn. - Để tránh việc lặp đi lặp lại trên, ta tạo ra một Module riêng rẽ chứa các chương trình con được dùng chung. Visual Basic cho phép 3 loại Module: ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 68 Module biểu mẫu (Form module): đi kèm với mỗi một biểu mẫu là một module của biểu mẫu đó để chứa mã lệnh của biểu mẫu này. Với mỗi điều khiển trên biểu mẫu, module biểu mẫu chứa các chương trình con và chúng sẵn sàng được thực thi để đáp ứng lại các sự kiện mà người sử dụng ứng dụng tác động trên điều khiển. Module biểu mẫu được lưu trong máy tính dưới dạng các tập tin có đuôi là *.frm. Module chuẩn (Standard module): Mã lệnh không thuộc về bất cứ một biểu mẫu hay một điều khiển nào sẽ được đặt trong một module đặc biệt gọi là module chuẩn (được lưu với đuôi *.bas). Các chương trình con được lặp đi lặp lại để đáp ứng các sự kiện khác nhau của các điều khiển khác nhau thường được đặt trong module chuẩn. Module lớp (Class module): được sử dụng để tạo các điều khiển được gọi thực thi trong một ứng dụng cụ thể. Một module chuẩn chỉ chứa mã lệnh nhưng module lớp chứa cả mã lệnh và dữ liệu, chúng có thể được coi là các điều khiển do người lập trình tạo ra (được lưu với đuôi *.cls). Phạm vi (scope): xác định số lượng chương trình có thể truy xuất một biến. Một biến sẽ thuộc một trong 3 loại phạm vi: - Phạm vi biến cục bộ. - Phạm vi biến module. - Phạm vi biến toàn cục. * Biến toàn cục Khái niệm: Biến toàn cục là biến có phạm vi hoạt động trong toàn bộ ứng dụng. Khai báo: Global [As ] * Biến cục bộ Khái niệm: Biến cục bộ là biến chỉ có hiệu lực trong những chương trình mà chúng được định nghĩa. Khai báo: Dim [As ] Lưu ý: Biến cục bộ được định nghĩa bằng từ khóa Dim sẽ kết thúc ngay khi việc thi hành thủ tục kết thúc. * Biến Module Khái niệm: Biến Module là biến được định nghĩa trong phần khai báo (General|Declaration) của Module và mặc nhiên phạm vi hoạt động của nó là toàn bộ Module ấy. Khai báo: - Biến Module được khai báo bằng từ khóa Dim hay Private & đặt trong phần khai báo của Module. Ví dụ: Private Num As Integer - Tuy nhiên, các biến Module này có thể được sử dụng bởi các chương trình con trong các Module khác. Muốn thế chúng phải được khai báo là Public trong phân Khai báo (General|Declaration) của Module. Ví dụ: ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 69 Public Num As Integer Lưu ý: Không thể khai báo biến với từ khóa là Public trong chương trình con. *Truyền tham số cho chương trình con Khái niệm Một chương trình con đôi lúc cần thêm một vài thông tin về trạng thái của đoạn mã lệnh mà nó định nghĩa để thực thi. Những thông tin này là các biến được truyền vào khi gọi chương trình con, các biến này gọi là tham số của chương trình con. Có hai cách để truyền tham số cho chương trình con: Truyền bằng giá trị & truyền bằng địa chỉ. *Truyền tham số bằng giá trị Với cách truyền tham số theo cách này, mỗi khi một tham số được truyền vào, một bản sao của biến đó được tạo ra. Nếu chương trình con có thay đổi giá trị, những thay đổi này chỉ tác động lên bản sao của biến. Trong VB, từ khóa ByVal được dùng để xác định tham số được truyền bằng giá trị. Ví dụ: Sub Twice (ByVal Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 Print A Twice A Print A End Sub Kết quả thực hiện của đoạn chương trình trên: 4 8 4 *Truyền tham số bằng địa chỉ Truyền tham số theo địa chỉ cho phép chương trình con truy cập vào giá trị gốc của biến trong bộ nhớ. Vì thế, giá trị của biến có thể sẽ bị thay đổi bởi đoạn mã lệnh trong chương trình con. Mặc nhiên, trong VB6 các tham số được truyền theo địa chỉ; tuy nhiên ta có thể chỉ định một cách tường minh nhờ vào từ khóa ByRef. Ví dụ: Sub Twice (Num As Integer) Num = Num * 2 Print Num End Sub Private Sub Form_Click() Dim A As Integer A = 4 ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 70 Print A Twice A Print A End Sub Kết quả thực hiện của đoạn chương trình trên: 4 8 8 * Bẫy lỗi trong Visual Basic Các thao tác bẫy các lỗi thực thi của chương trình là cần thiết đối với các ngôn ngữ lập trình. Người lập trình khó kiểm soát hết các tình huống có thể gây ra lỗi. Chẳng hạn người ta khó có thể kiểm tra chặt chẽ việc người dùng đang chép dữ liệu từ đĩa mềm (hay CD) khi chúng không có trong ổ đĩa. Nếu có các thao tác bẫy lỗi ở đây thì tiện cho người lập trình rất nhiều. Visual Basic cũng cung cấp cho ta một số cấu trúc để bẫy các lỗi đang thực thi. Cú pháp: Dạng 1: On Error GoTo : Ý nghĩa: - : là một tên được đặt theo quy tắc của một danh biểu. - Nếu một lệnh trong thì khi chương trình thực thi đến câu lệnh đó, chương trình sẽ tự động nhảy đến đoạn chương trình định nghĩa bên dưới <Tên nhãn> để thực thi. Dạng 2: On Error Resume Next Ý nghĩa: - Nếu một lệnh trong thì khi chương trình thực thi đến câu lệnh đó, chương trình sẽ tự động bỏ qua câu lệnh bị lỗi và thực thi câu lệnh kế tiếp. Ngôn ngữ lập trình Delphi. Đây là ngôn ngữ lập trình được phát triển từ ngôn ngữ Turbo Pascal do hãng Borland viết ra. Delphi được xem là công cụ phát triển ứng dụng nhanh hàng đầu hiện nay của hãng Borland. Đơn giản nhưng hiệu quả,đó chính là ưu điểm nổi bật của Delphi. Cũng giống như Visual Basic, Delphi là ngôn ngữ lập trình hướng đối tượng được thiết kế chạy trên nền Windows nên giao diện rất quen thuộc đối với người sử dụng. Cũng chỉ bằng các thao tác đơn giản như Visual Basic, Delphi cho phép tạo ra các giao diện phức tạp một cách đơn giản và nhanh chóng, còn nếu sử dụng các ngôn ngữ như Pascal, Basic.. thì ta phải tốn khá nhiều công sức cho các cấu trúc lệnh phức tạp. ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 71 4. xây dựng chương trình *Màn hình sau khi khơi tạo xong gồm có các thành phần sau: - thanh công cụ :là các công cụ để xây dựng chương trình. mỗi trang chứa các đối tượng được phân loại theo chức năng - code :là cửa sổ chứa tất cả các mã lệnh - form:là thành phần cơ sở quan trọng, Form chính là bề mặt của cửa sổ ứng dụng khi thi hành chương trình. Form được thiết kế sẵn cho các thành phần: “thanh tiêu đề: title bar”, “nút phóng to maximize”, “nút thu nhỏ minimize - thuộc tính : dùng để thiết lập các thuộc tính cho các đối tượng khi thiết kế chương trình ứng dụng. bảng thuộc tính gồm có 2 trang là Property (các thuộc tính) và Event (các sự kiện). * Khởi tạo giao diện: label, command.v.v. ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 72 * Add image cho giao diện: ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 73 * Giao diện chương trình THI CÔNG KHÁI QUÁT QUÁ TRÌNH THI CÔNG. 1.Thử nghiệm phần cứng. Để hoàn thiện mạch theo đúng các yêu cầu cuối cùng nhóm thực hiện đã trải qua khoảng thời gian khá dài để thử nghiệm từng phần của mạch. Nhóm đã sử dụng các test- board cho các thử nghiệm đơn giản. Sau khi thử nghiệm trên test-board xong nhóm đã thi công mạch in. 2. Thử nghiệm phần mềm. Đối với phần mềm nạp vào vi điều khiển nhóm cũng đã thử nghiệm rất nhiều lần. Nhóm cũng đã thi công mạch nạp vi điều khiển để phục vụ cho việc thử nghiệm các chương trình nạp vào nó. Việc lập trình cho vi điều khiển cũng tiến hành từng phần, khi nào thấy hoàn chỉnh phần này mới tiến hành lập trình cho phần khác. Như vậy khắc phục được các lỗi trong quá trình lập trình, mặc khác chương trình viết ra được rõ ràng hơn. ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 74 Đối với phần mềm giao diện chương trình trên máy tính nhóm cũng tiến hành tương tự. Ban đầu là xem các tài liệu nói về cách lập trình bằng VISUAL BASIC sau đó tiến hành viết thử các chương trình đơn giản có liên quan đến chương trình sẽ viết. Khi đã có kiến thức cơ bản về lập trình VISUAL BASIC nhóm mới bắt đầu viết về chương trình giám sát và điểu khiển nhiệt độ. Công việc này cũng tiến hành theo nhiều giai đoạn từ việc bố trí các nút lệnh, các bảng lựa chọn đến cách giao tiếp giữa máy tính và mạch đo nhiệt đô…cuối cùng là việc xây dựng giao diện chương trình cho “bắt mắt” và đặc biệt là dễ dàng sử dụng. 3. Thi công mạch in. Đây là giai đoạn quan trọng trong quá trình thi công bởi vì nếu có một sự cố nào thì mạch có thể không chạy và phải thi công lại. Chính vì thế giai đoạn này chiếm một khoảng thời gian khá lâu trong toàn bộ quá trình thi công. Để thực hiện được sơ đồ mạch in, nhóm thực hiện sử dụng chương trình Orcad để vẽ mạch. Sau khi vẽ xong, nhóm cũng đã chỉnh sửa các đường mạch để việc thi công được khả thi hơn. Mach in của khối điều khien 4. Kiểm tra mạch in. Sau khi thiết kế và kiểm tra mạch in nhiệm vụ tiếp theo là kiểm tra toàn bộ mạch trước khi lắp linh kiện vào, bởi vì nếu có sơ suất để chạm mạch hay đứt mạch thì mạch sẽ không chạy hoặc xấu hơn nữa là làm hỏng linh kiện. Việc kiểm tra này được thực hiện bằng mắt thường và có sự hỗ trợ của VOM kim. Kiểm tra toàn bộ các linh kiện, đảm bảo tất cả còn tốt và phù hợp với sơ đồ mạch in. 5. Lắp ráp linh kiện. Dựa vào sơ đồ bố trí linh kiện. Tiến hành lắp ráp ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 75 ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 76 ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 77 I. TÓM TẮT. Sau hơn 3 tháng nghiên cứu thực hiện đề tài, tập đồ án đã được hoàn thành. Các vấn đề trong đề tài được trình bày và giải quyết theo tình tự logic từ tổng quát đến cụ thể. Trong mỗi vấn đề được chia sẽ ra thành từng phần nhỏ để giải quyết. Nội dung trình bày của đề tài được chia thành 6 chương. Tuy nhiên vấn đề cốt lõi của đề tài được tập trung vào chương . Ở chương 1 và 2 là các phần dẫn nhập và cơ sở lý luân cho việc chọn đề tài. Qua chương 3 đến chương 4là phần giới thiệu các kiến thức cơ sở, các vấn đề liên quan đến đề tài. Chương 5 là phần trọng tâm của đề tài - chúng ta từng bước thiết kế các khối trong mạch cũng như tính toán các giá trị linh kiện được sử dụng trong từng mạch. Chương 6 tóm tắt đề tài, các kết luận sau khi làm xong đồ án và những kiến nghị đưa ra để các đề tài sau có liên quan được hoàn thiện hơn. Sau quá trình thực hiện đề tài “điều khiển thiết bị điện qua máy tính”. Nhóm sinh viên thực hiện đã hoàn thành những nội dung chính như sau:  Nghiên cứu và ứng dụng họ vi điều khiển AT89S52 vào thiết kế mạch.  Tìm hiểu về giao tiếp máy tính và chuẩn RS-232. a. Dùng ngôn ngữ lập trình visual basic thiết kế giao diện người dùng. b. Thi công hoàn chỉnh mạch giám sát và điều khiển II. KẾT LUẬN. Đề tài về cơ bản đã hoàn thành theo đúng nội dung đề ra của nhóm thực hiện. Nhiều tài liệu được tham khảo và nhiều thử nghiệm được thực hiện để cuối cùng hoàn thành mạch giám sát và điều khiển nhiệt độ từ xa đúng thời gian quy định. Đề tài đã đạt được một số kết quả nhất định. Nhiệt độ thu nhận được chính xác và có thể thu nhận được nhiệt độ ở hai địa điểm khác nhau. Giao diện với người dùng thân thiện và dễ sử dụng. Trong quá trình thực hiện đề tài nhiều vấn đề khó khăn xuất hiện như: nhiệt độ hiển thị chưa ổn định, bước đầu sử dụng modole HM-TR truyền thì bị mất dữ liệu, các IC bị chết… Có nhiều ý tưởng xuất hiện trong quá trình thực hiện đề tài như: lưu trữ lại thông tin về ngày giờ thời gian đo nhiệt độ, nhưng nhóm thực hiện nghĩ điều này không cần thiết nên không thực hiện. ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 78 ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 79 I. Chương trình viết cho vi xử lý: ;xxxxxxxxxxxxxchuong trinh gui data tu vdk giao tiep voi may tinh xxxxxxxxxxxxxxx ;========================================================== ===== den1 bit p0.0 den2 bit p0.1 den3 bit p0.2 den4 bit p0.3 den5 bit p0.4 den6 bit p0.5 den7 bit p0.6 den8 bit p0.7 den9 bit p2.6 den10 bit p2.7 org 0000h ;diem reset ;xxxxxxxxxxxxxxx doan chuong trinh chinh xxxxxxxxxxxxxxxxxxx ;khoi tao UART mov tmod,#20h ;Time 1, mode 2 mov scon,#50h ;che do 1, UART 8bit, Ren = 1 mov th1,#-12 ;2400baud setb tr1 ;Time 1 chay mov p0,#00h ;tat het den mov p2,#00h ;tat het den main1: jnb ri,$ ;kiem tra co nhan mov a,sbuf ;lay du lieu tu may tinh cho vao thanh ghi a clr ri ;xoa co nhan-->chuan bi cho lan nhan ke tiep ;xxxxxxx doan chuong trinh xu ly du lieu tu may tinh xxxxxxxxxxxxxx onall: cjne a,#10,offall mov p0,#0ffh mov p2,#03h ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 80 offall: cjne a,#30,on1 mov p0,#00h mov p2,#00h on1: cjne a,#11,off1 setb den1 off1: cjne a,#31,on2 clr den1 on2: cjne a,#12,off2 setb den2 off2: cjne a,#32,on3 clr den2 on3: cjne a,#13,off3 setb den3 off3: cjne a,#33,on4 clr den3 on4: cjne a,#14,off4 setb den4 off4: cjne a,#34,on5 clr den4 on5: cjne a,#15,off5 setb den5 off5: cjne a,#35,on6 clr den5 on6: cjne a,#16,off6 setb den6 off6: cjne a,#36,on7 clr den6 on7: cjne a,#17,off7 setb den7 off7: cjne a,#37,on8 clr den7 on8: cjne a,#18,off8 setb den8 ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 81 off8: cjne a,#38,on9 clr den8 on9: cjne a,#19,off9 setb den9 off9: cjne a,#39,on10 clr den9 on10: cjne a,#20,off10 setb den10 off10: cjne a,#40,exit_main1 clr den10 exit_main1: mov sbuf,a ;lay du lieu tu thanh ghi a len may tinh jnb ti,$ ; clr ti ;xoa co truyen -->chuan bi cho lan truyen ke tiep jmp main1 end II. Chương trình điều khiển trên máy tính. Dim counter As Integer Dim onoff0 As Integer Dim onoff1 As Integer Dim onoff2 As Integer Dim onoff3 As Integer Dim onoff4 As Integer Dim onoff5 As Integer Dim onoff6 As Integer Dim onoff7 As Integer Dim onoff8 As Integer Dim onoff9 As Integer Dim AllDS As Integer Dim Nhan As String Dim MaASCII As Integer Dim port As Integer Private Sub com1_Click() com1.Checked = True com2.Checked = False com3.Checked = False com4.Checked = False com5.Checked = False ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 82 port = 1 End Sub Private Sub com2_Click() com1.Checked = False com2.Checked = True com3.Checked = False com4.Checked = False com5.Checked = False port = 2 End Sub Private Sub com3_Click() com1.Checked = False com2.Checked = False com3.Checked = True com4.Checked = False com5.Checked = False port = 3 End Sub Private Sub com4_Click() com1.Checked = False com2.Checked = False com3.Checked = False com4.Checked = True com5.Checked = False port = 4 End Sub Private Sub com5_Click() com1.Checked = False com2.Checked = False com3.Checked = False com4.Checked = False com5.Checked = True port = 5 End Sub Private Sub Form_Load() Timer1.Enabled = True Timer1.Interval = 100 port = 1 com1.Checked = True ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 83 com2.Checked = False com3.Checked = False com4.Checked = False com5.Checked = False MSComm1.CommPort = port MSComm1.Settings = "2400,N,8,1" MSComm1.InputLen = 0 MSComm1.RThreshold = 1 MSComm1.PortOpen = True AllDS = 0 End Sub Private Sub AllON_Click(Index As Integer) Const MB_YESNO = 4 Const MB_OK = 0 Const MB_ICONQUESTION = 32 Const idYes = 6 D1 = MB_OK + vbExclamation d = MB_YESNO + MB_ICONQUESTION Title = "xac nhan lenh " message1 = "Ban muon mo tat ca thiet bi cung luc ? " message2 = "Tat ca thiet bi da mo ! " If AllDS = 10 Then response = MsgBox(message2, D1, Title) Else response = MsgBox(message1, d, Title) If response = idYes Then MSComm1.Output = Chr(10) End If End If End Sub Private Sub AllOFF_Click(Index As Integer) Const MB_YESNO = 4 Const MB_OK = 0 Const MB_ICONQUESTION = 32 Const idYes = 6 D1 = MB_OK + vbExclamation d = MB_YESNO + MB_ICONQUESTION Title = "xac nhan lenh " message1 = "Ban muon tat tat ca thiet bi cung luc ? " message2 = "Tat ca thiet bi da tat ! " If AllDS = 0 Then response = MsgBox(message2, D1, Title) Else ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 84 response = MsgBox(message1, d, Title) If response = idYes Then MSComm1.Output = Chr(30) End If End If End Sub Private Sub Command1_Click() If onoff0 = 0 Then MSComm1.Output = Chr(11) onoff0 = 1 Else MSComm1.Output = Chr(31) onoff0 = 0 End If End Sub Private Sub Command2_Click() If onoff1 = 0 Then MSComm1.Output = Chr(12) onoff1 = 1 Else MSComm1.Output = Chr(32) onoff1 = 0 End If End Sub Private Sub Command3_Click() If onoff2 = 0 Then MSComm1.Output = Chr(13) onoff2 = 1 Else MSComm1.Output = Chr(33) onoff2 = 0 End If End Sub Private Sub Command4_Click() If onoff3 = 0 Then MSComm1.Output = Chr(14) onoff3 = 1 Else MSComm1.Output = Chr(34) onoff3 = 0 ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 85 End If End Sub Private Sub Command5_Click() If onoff4 = 0 Then MSComm1.Output = Chr(15) onoff4 = 1 Else MSComm1.Output = Chr(35) onoff4 = 0 End If End Sub Private Sub Command6_Click() If onoff5 = 0 Then MSComm1.Output = Chr(16) onoff5 = 1 Else MSComm1.Output = Chr(36) onoff5 = 0 End If End Sub Private Sub Command7_Click() If onoff6 = 0 Then MSComm1.Output = Chr(17) onoff6 = 1 Else MSComm1.Output = Chr(37) onoff6 = 0 End If End Sub Private Sub Command8_Click() If onoff7 = 0 Then MSComm1.Output = Chr(18) onoff7 = 1 Else MSComm1.Output = Chr(38) onoff7 = 0 End If End Sub Private Sub Command9_Click() ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 86 If onoff8 = 0 Then MSComm1.Output = Chr(19) onoff8 = 1 Else MSComm1.Output = Chr(39) onoff8 = 0 End If End Sub Private Sub Command10_Click() If onoff9 = 0 Then MSComm1.Output = Chr(20) onoff9 = 1 Else MSComm1.Output = Chr(40) onoff9 = 0 End If End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Dim Click As Integer Click = MsgBox("Do you want to leave me?", vbQuestion + vbYesNo, "Exit") Select Case Click Case vbYes End Case vbNo Cancel = 1 End Select End Sub Private Sub Image2_Click() Dim Click As Integer Click = MsgBox("ban that su muon thoat?", vbQuestion + vbYesNo, "Exit") Select Case Click Case vbYes End Case vbNo Exit Sub End Select End Sub Private Sub Image3_Click() ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 87 D1 = vbOK + vbInformation Title = "Chu Y ! " message = "Tam thoi chua co phan huong dan! " response = MsgBox(message, D1, Title) End Sub Private Sub MSComm1_OnComm() If (MSComm1.CommEvent = comEvReceive) Then Nhan = MSComm1.Input MaASCII = Asc(Nhan) Select Case MaASCII Case 10 For counter = 0 To 9 Step 1 Image1(counter).Picture = LoadPicture("sun.bmp") Next Command1.Picture = LoadPicture("onn.bmp") Command2.Picture = LoadPicture("onn.bmp") Command3.Picture = LoadPicture("onn.bmp") Command4.Picture = LoadPicture("onn.bmp") Command5.Picture = LoadPicture("onn.bmp") Command6.Picture = LoadPicture("onn.bmp") Command7.Picture = LoadPicture("onn.bmp") Command8.Picture = LoadPicture("onn.bmp") Command9.Picture = LoadPicture("onn.bmp") Command10.Picture = LoadPicture("onn.bmp") onoff0 = 1 onoff1 = 1 onoff2 = 1 onoff3 = 1 onoff4 = 1 onoff5 = 1 onoff6 = 1 onoff7 = 1 onoff8 = 1 onoff9 = 1 AllDS = 10 Case 30 For counter = 0 To 9 Step 1 Image1(counter).Picture = LoadPicture("moon.bmp") Next Command1.Picture = LoadPicture("off.bmp") Command2.Picture = LoadPicture("off.bmp") Command3.Picture = LoadPicture("off.bmp") Command4.Picture = LoadPicture("off.bmp") ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 88 Command5.Picture = LoadPicture("off.bmp") Command6.Picture = LoadPicture("off.bmp") Command7.Picture = LoadPicture("off.bmp") Command8.Picture = LoadPicture("off.bmp") Command9.Picture = LoadPicture("off.bmp") Command10.Picture = LoadPicture("off.bmp") onoff0 = 0 onoff1 = 0 onoff2 = 0 onoff3 = 0 onoff4 = 0 onoff5 = 0 onoff6 = 0 onoff7 = 0 onoff8 = 0 onoff9 = 0 AllDS = 0 Case 11 onoff0 = 1 AllDS = AllDS + 1 Command1.Picture = LoadPicture("onn.bmp") Image1(0).Picture = LoadPicture("sun.bmp") Case 31 onoff0 = 0 AllDS = AllDS - 1 Command1.Picture = LoadPicture("off.bmp") Image1(0).Picture = LoadPicture("moon.bmp") Case 12 onoff1 = 1 AllDS = AllDS + 1 Command2.Picture = LoadPicture("onn.bmp") Image1(1).Picture = LoadPicture("sun.bmp") Case 32 onoff1 = 0 AllDS = AllDS - 1 Command2.Picture = LoadPicture("off.bmp") Image1(1).Picture = LoadPicture("moon.bmp") Case 13 onoff2 = 1 AllDS = AllDS + 1 Command3.Picture = LoadPicture("onn.bmp") Image1(2).Picture = LoadPicture("sun.bmp") Case 33 onoff2 = 0 ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 89 AllDS = AllDS - 1 Command3.Picture = LoadPicture("off.bmp") Image1(2).Picture = LoadPicture("moon.bmp") Case 14 onoff3 = 1 AllDS = AllDS + 1 Command4.Picture = LoadPicture("onn.bmp") Image1(3).Picture = LoadPicture("sun.bmp") Case 34 onoff3 = 0 AllDS = AllDS - 1 Command4.Picture = LoadPicture("off.bmp") Image1(3).Picture = LoadPicture("moon.bmp") Case 15 onoff4 = 1 AllDS = AllDS + 1 Command5.Picture = LoadPicture("onn.bmp") Image1(4).Picture = LoadPicture("sun.bmp") Case 35 onoff4 = 0 AllDS = AllDS - 1 Command5.Picture = LoadPicture("off.bmp") Image1(4).Picture = LoadPicture("moon.bmp") Case 16 onoff5 = 1 AllDS = AllDS + 1 Command6.Picture = LoadPicture("onn.bmp") Image1(5).Picture = LoadPicture("sun.bmp") Case 36 onoff5 = 0 AllDS = AllDS - 1 Command6.Picture = LoadPicture("off.bmp") Image1(5).Picture = LoadPicture("moon.bmp") Case 17 onoff6 = 1 AllDS = AllDS + 1 Command7.Picture = LoadPicture("onn.bmp") Image1(6).Picture = LoadPicture("sun.bmp") Case 37 onoff6 = 0 AllDS = AllDS - 1 Command7.Picture = LoadPicture("off.bmp") Image1(6).Picture = LoadPicture("moon.bmp") Case 18 ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 90 onoff7 = 1 AllDS = AllDS + 1 Command8.Picture = LoadPicture("onn.bmp") Image1(7).Picture = LoadPicture("sun.bmp") Case 38 onoff7 = 0 AllDS = AllDS - 1 Command8.Picture = LoadPicture("off.bmp") Image1(7).Picture = LoadPicture("moon.bmp") Case 19 onoff8 = 1 AllDS = AllDS + 1 Command9.Picture = LoadPicture("onn.bmp") Image1(8).Picture = LoadPicture("sun.bmp") Case 39 onoff8 = 0 AllDS = AllDS - 1 Command9.Picture = LoadPicture("off.bmp") Image1(8).Picture = LoadPicture("moon.bmp") Case 20 onoff9 = 1 AllDS = AllDS + 1 Command10.Picture = LoadPicture("onn.bmp") Image1(9).Picture = LoadPicture("sun.bmp") Case 40 onoff9 = 0 AllDS = AllDS - 1 Command10.Picture = LoadPicture("off.bmp") Image1(9).Picture = LoadPicture("moon.bmp") Case Else response = MsgBox("Gia tri nhan duoc khong phu hop!", vbExclamation + vbOKOnly, "Thong Bao") End Select End If End Sub 'Private Sub Timer1_Timer() 'If MSComm1.PortOpen = True Then 'MSComm1.PortOpen = False 'End If ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 91 ' MSComm1.CommPort = port 'End Sub Private Sub Timer1_Timer() If Label1.Left >= -Me.Width Then Label1.Left = Label1.Left - 100 Else Label1.Left = Me.Width End If End Sub ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 92 TÀI LIỆU THAM KHẢO [1]. Tống Văn On. Họ vi điều khiển 8051 _Nhà xuất bản Lao động-Xã hội. [2]. Lưu Phi Yến, Lưu Phú, Nguyễn Như Anh. Kỹ thuật điện tử_Nhà xuất đại học quốc gia TP.HCM. [3]. Nguyễn Hồng Sơn, Hoàng Đức Hải . Kỹ thuật truyền số liệu _Nhà xuất bản Lao động -Xã hội. [4]. Nguyễn Hữu Phương . Mạch số_Nhà xuất bản Thống kê. [5]. Nguyễn Tấn Phước . Kỹ thuật xung căn bản và nâng cao _Nhà xuất bản thành phố Hồ Chí Minh. 6]. Ngô Diên Tập. Kỹ thuật điều khiển với AVR _Nhà xuất bản Khoa học và kỹ thuật. [7]. Dương Minh Trí. Sơ đồ chân linh kiện bán dẫn_ Nhà xuất bản Khoa học và kỹ thuật. [8]. Robert Boylestad. Electronic devices and circuit theory_Nhà xuất bản Prentice Hall, New Jersey. [11].Trangwed:www.alldatasheet.com;www.diendandientu.com;www.google.com. ĐIỀU KHIỂN THIẾT BỊ ĐIỆN QUA MÁY VI TÍNH SVTH : Phạm Ngọc Dũng- Đặng Văn Trung Trang 93

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

  • pdfnoidung22_3856.pdf