Lưu đồ thuật toán

Một phần của tài liệu Đồ án Kỹ thuật vi điều khiển Hệ thống đèn giao thông tại ngã 5 dùng PIC16F877A (Trang 28 - 33)

CHƯƠNG 4: LƯU ĐỒ THUẬT TOÁN VÀ CHƯƠNG TRÌNH

4.1 Lưu đồ thuật toán

Hình 4.1: Lưu đồ thuật toán của chương trình chính

Các biến ở trên sẽ được giải thích trong phần Code CCS. Phần này sẽ giải thích ngắn gọn về Ngắt Timer1, Ngắt RDA và hàm tách giá trị đếm thành Chục và Đơn vị.

Thời gian trên led 7 đoạn trên mỗi làn sẽ giảm 1 đơn vị sau 1s, ta chọn bộ chia trước là 8, giá trị nạp trước cho thanh ghi TMR1 = 3036. Như vậy, chương trình con phục vụ ngắt sẽ được gọi sau mỗi . Do đó, phần mềm cần lặp lại quá trình này 2 lần để được 1 giây.

Ngắt RDA

Sẽ được gọi khi có dữ liệu mà PIC nhận được từ máy tính.

Hàm tách giá trị đếm thành Chục và Đơn vị

Trên mỗi làn sẽ có 2 led 7 đoạn để hiển thị 2 giá trị Chục và Đơn vị. Vì vậy, cần có hàm để chuyển đổi thời gian ra 2 giá trị này nhằm hiển thị trên led 7 đoạn.

Chương trình Ngắt Timer1 sẽ được gọi lại sau 0,5s đã được tính ở phần trước. Và cứ sau 1s thì biến dem_tg sẽ tăng lên 1 nhằm kiểm tra xem giá trị của nó có bằng với thời gian T_T (Thời gian cho phép đi Thẳng và rẽ Trái). Nếu dem_tg = T_T thì thực hiện việc đổi lượt ưu tiên được đề cập ở phần 3.1.1. Sau mỗi lượt ưu tiền thì thời gian hiển thị trên mỗi làn sẽ được thiết lập lại theo quy tắc đã được giải thích ở phần 3.1.2. Đồng thời các đèn tín hiệu hiển thị trên mỗi làn được cũng sẽ được hiển thị tương ứng được đề cập trong phần 3.2.1.

%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3B%22%20edge%3D%221%22%20source%3D%223%22%20target%3D%225%22%20parent%3D%221%22%3E%3CmxGeometry%20relative%3D%221%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%223%22%20value%3D%22B%E1%BA%AFt%20%C4%91%E1%BA%A7u%22%20style%3D%22ellipse%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22-60%22%20y%3D%22-20%22%20width%3D%22120%22%20height%3D%2280%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E %3CmxCell%20id%3D%224%22%20value%3D%22%22%20style%3D%22edgeStyle%3DorthogonalEdgeStyle%3Brounded%3D0%3BorthogonalLoop%3D1%3BjettySize%3Dauto%3Bhtml%3D1%3B%22%20edge%3D%221%22%20source%3D%225%22%20parent%3D%221%22%3E%3CmxGeometry%20relative%3D%221%22%20as%3D%22geometry%22%3E%3CmxPoint%20y%3D%22190%22%20as%3D%22targetPoint%22%2F%3E%3C%2FmxGeometry%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%225%22%20value%3D%22G%C3%A1n%20bi%E1%BA%BFn%26lt%3Bbr%26gt%3Bdata%20%3D%20getch()%3B%22%20style%3D%22rounded%3D1%3BwhiteSpace%3Dwrap%3Bhtml%3D1%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%22-60%22%20y%3D%2290%22%20width%3D%22120%22%20height%3D%2260%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3CmxCell%20id%3D%226%22%20value%3D%22%C4%90%C3%BAng%22%20style%3D%22text%3Bhtml %3D1%3Balign%3Dcenter%3BverticalAlign%3Dmiddle%3Bresizable%3D0%3Bpoints%3D%5B%5D%3Bautosize%3D1%3BstrokeColor%3Dnone%3BfillColor%3Dnone%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%2250%22%20y%3D%22210%22%20width%3D%2240%22%20height%3D%2220%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E

Hình 4.3: Lưu đồ thuật toán của chương trình con dùng Ngắt RDA

Ngắt RDA

Sẽ được gọi khi có dữ liệu mà PIC nhận được từ máy tính. Biến data được gán làm biến nhận từ máy tính qua câu lệnh getch(). Các giá trị từ 1 đến 5 là tín hiệu dùng để đảo

thể hiện bạn đã xác nhận 1 trong 3 chế độ được chọn. Khi đã nhấn xác nhận (data = 6) chúng ta sẽ xem xét ở cả 3 chế độ để thực hiện các câu lệnh cho phù hợp tương ứng với yêu cầu đã đề ra. Với data bằng các ký tự ‘B’, ‘U’, ‘D’ tương ứng là các chế độ ‘Bình thường’, ‘Ưu tiên’, ‘Ban đêm’ thì chúng sẽ được lưu lại thông qua biến che_do_tam vì chưa nhấn xác nhận. Nếu dữ liệu nhận được không phải là 1 trong các giá trị trên thì nó chính là thời gian ưu tiên mà làn được chọn làm ưu tiên (Trong chế độ Ưu tiên). Sau mỗi lần nhận được dữ liệu từ máy tính, chúng ta sẽ tính lại b (Giá trị được chuyển đổi từ các trạng thái làn ưu tiên được chọn trong chế độ Ưu tiên sau đó b được gửi lên lại máy tính để hiển thị các làn được chọn. Ví dụ khi ở chế độ ưu tiên, làn 2 và làn 4 được chọn là làn được ưu tiên thì các bít tương ứng với làn 5 đến làn 1 sẽ là 0 1 0 1 0. Như vậy:

Hình 4.4: Lưu đồ thuật toán hàm tách giá trị đếm và chương trình sử dụng 74HC595

Hàm tách giá trị đếm

Để hiển thị thời gian đếm lùi trên led 7 đoạn chúng ta cần tách 2 giá trị Chục và Đơn vị của thời gian đềm ra. Ở đây chúng ta sử dụng 5 mãng tương ứng với 5 làn đường với mỗi mãng chứa 2 phần tử. Phần tử thứ nhất là Đơn vị, phần tử thứ 2 là Chục. Hai phần tử này chúng sẽ tương ứng với chương trình sử dụng IC74HC595 để quét led 7 đoạn.

Chương trình sử dụng IC74HC595

Đầu tiên chúng ta định nghĩa các chân DS, SH_CP và ST_CP để dễ dàng hơn cho việc lập trình, cùng với hai xung dịch bit và chốt bit. Sơ đồ chân và nguyên lý được đề cập ở phần 3.2.2. Ta sẽ cho dịch 8 bit của phần tử thứ 2 trong hàm tách giá trị đếm đã được đề cập phía trên, sau đó chốt 8 bit này rồi chuyển sang dịch 8 bit của phần tử thứ nhất ta sẽ hiển thị được giá trị đếm tương ứng trên mỗi làn.

Hình 4.5: Lưu đồ thuật toán của 2 hàm thiết lập thời gian sau mỗi lượt chuyển tiếp và thời gian đi Thẳng và rẽ Trái trên mỗi làn

Như đã biết sau mỗi lượt chuyển tiếp làn đường được nêu ở phần 3.1.1. Thì thời gian hiển trên mỗi làn sẽ được thiết lập lại theo như quy tắc đã được đề cập trong phần 3.1.2.

Hàm thiết lập thời gian đi Thẳng và rẽ Trái trên mỗi làn

Hàm này nhằm kiểm tra và thay đổi thời gian mà mỗi làn cho phép được đi Thẳng và rẽ Phải.

Một phần của tài liệu Đồ án Kỹ thuật vi điều khiển Hệ thống đèn giao thông tại ngã 5 dùng PIC16F877A (Trang 28 - 33)

Tải bản đầy đủ (DOCX)

(77 trang)
w