Mua linh kiện điện tử tại Điện tử Nhật Tùng
Khóa học Vi điều khiển có phí Hình thức học: Video hoặc Kèm trực tiếp ===>>>> Kích vào hình để được biết thêm chi tiếtTable of Contents
Tải File bài giải
Pass giải nén: Huynhnhattung.com
===>>> Nếu bạn chưa có phần mềm giải nén:
Các bạn xem Video Hiệu ứng tắt dần, UART + Led đơn + Nút nhấn + Led 7 đoạn
Các bạn xem Blog Hiệu ứng tắt dần, UART + Led đơn + Nút nhấn + Led 7 đoạn
Đề bài lập trình hiệu ứng tắt dần:
Bài giải lập trình hiệu ứng tắt dần:
Phần cứng chương trình hiệu ứng tắt dần:
- Xét trường hợp bên phát yêu cầu sử dụng 1 nút nhấn để điều khiển chuyển chế độ Mode ở ngõ ra của Led đơn bên thu.
- Việc sử dụng hai Vi điều khiển giao tiếp với nhau thông qua UART giúp tối ưu được chương trình và phần cứng. Khi giao tiếp UART thì kết nối sẽ chân RC6/TX của VĐK thứ nhất kết nối với chân RC7/RX VĐK thứ hai, ngược lại chân RC7/RX VĐK thứ nhất kết nối với chân RC6/TX của VĐK thứ hai. Chân RX có chức năng nhận dữ liệu, chân TX có chức năng truyền dữ liệu.
- Sử dụng 8 led đơn được kết nối theo Catot chung. Cách tính trở 330 xem trong giáo trình thầy Nguyễn Đình Phú
- Hiển thị thời gian được quy định ra một Led 7 đoạn anot chung được nối vào Port D. Cách tính trở 330 xem trong giáo trình thầy Nguyễn Đình Phú
- Các linh kiện chính cần sử dụng tham khảo tại.
Thông số kỹ thuật | Mua Linh kiện |
Pic16F887 | Pic16F887 |
Led 7 đoạn | Led 7 đoạn |
Điện trở | Điện trở |
Nút nhấn | Nút nhấn |
Thạch anh | Thạch anh |
Led đơn | Led đơn |
Phần mềm hiệu ứng tắt dần:
Xét Vi điều khiển 1 tức bên phát hiệu ứng tắt dần:
Khai báo thư viện tiền sử lý của hiệu ứng tắt dần:
- Vi điều khiển hiện tại mình đan dùng là Pic16F887.
- Hiện dùng thạch anh nội và thạch anh nội khai báo 8M bằng lệnh #Fuses intrc_io và #delay(clock=8M).
- Khai báo giao tiếp UART chuẩn rs232 ” #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)” gồm tốc độ truyền bằng 9600, không kiểm tra tính chắn lẻ, đồng thời dữ liệu truyền đi 8bit trong đó có 1bit STOP. Khi sử dụng UART bắt buộc phải dùng chân RC6/TX, RC7/RX
- Mã 7 đoạn là đoạn mã Anot: Cấu trúc lệnh cho bạn nào cần copy : ” unsigned int8 ma7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8.0x80,0x90,0xff} “.
- Định nghĩa chân: tùy theo chức năng của chân mà tên định nghĩa được bám sát vào nội dung đan thực hiện.
- Tên khai báo biến phụ thuộc vào chức năng để khai báo cho phù hợp.
- Khi các biến không biết được giá trị cuối thì nên khai báo signed int32 tức khai báo biến có dấu 32bit, lúc này giá trị rất rộng không sợ bị thiếu.
Chương trình chính hiệu ứng tắt dần:
- Bắt đầu chương trình chính phải khởi tạo ngõ vào ra cho vi điều khiển. Một chân của vi điều khiển thì làm nhiệm vụ I/O vì thế phải khỏi tạo. Port A dùng cho nút nhấn để đưa vào Vi điều khiển vì thế khởi tạo giá trị là 0x01. Port C có chân RC7/RX nhận tín hiệu từ máy tính gửi xuống nên đóng vai trò nhận tín hiệu vì vậy phải khởi tạo mức 1 nên khởi tạo là 0x80. Port D kết nối với led 7 đoạn xuất tín hiệu từ Vi điều khiển đi ra ngoài nên khởi tạo giá trị là 0x00.
- Đầu tiên kiểm tra có nhấn nút không, nếu có thì sẽ trả về mức 0 theo thiết kế của phần cứng, nếu có thì chống dội, thời gian dội phím ít nhấn 20ms, tùy vào từng nút nhấn mà thời gian dội sẽ khác nhau, nhưng ít nhấn vẫn là 20ms.
- Kiểm tra lại lần nữa nếu vẫn còn giữ phím thì cho phép biến gt tăng lên một đơn vị, khi gt vượt ngưỡng 3 gán giá trị gt=1 và xuất giá trị hiển thị ra hai led 7 đoạn đồng thời gửi giá trị gt qua bên vi điều khiển B.
- Kiểm tra nếu chưa nhả phím thì làm nhiệm vụ chờ nhả, vòng lặp While chỉ thoát khi điều kiện sai, vậy nếu còn nhấn ngõ vào luôn bằng 0.
Xét Vi điều khiển 2 tức bên thu hiệu ứng tắt dần:
Khai báo thư viện tiền sử lý của hiệu ứng tắt dần:
- Vi điều khiển hiện tại mình đan dùng là Pic16F887.
- Hiện dùng thạch anh nội và thạch anh nội khai báo 8M bằng lệnh #Fuses intrc_io và #delay(clock=8M).
- Khai báo giao tiếp UART chuẩn rs232 ” #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)” gồm tốc độ truyền bằng 9600, không kiểm tra tính chắn lẻ, đồng thời dữ liệu truyền đi 8bit trong đó có 1bit STOP. Khi sử dụng UART bắt buộc phải dùng chân RC6/TX, RC7/RX
- Định nghĩa chân: tùy theo chức năng của chân mà tên định nghĩa được bám sát vào nội dung đan thực hiện.
- Tên khai báo biến phụ thuộc vào chức năng để khai báo cho phù hợp.
- Khi các biến không biết được giá trị cuối thì nên khai báo signed int32 tức khai báo biến có dấu 32bit, lúc này giá trị rất rộng không sợ bị thiếu.
Chương trình con hiệu ứng tắt dần:
Khi muốn tắt dần thì các led phải sáng hết vì led được kết nối tích cực mức 1 sau đó xuất giá trị ra Port B và tạo trễ 200ms. Vòng lặp chạy 8 lần mỗi lần sẽ dịch dữ liệu sang bên phải một đơn vị, khi dịch dữ liệu vị trí cuối sẽ tự động điền số 0 vào sau đó xuất giá trị ra Port B và tạo trễ 200ms. Khi tt=0 thì kết thúc vòng lặp for sử dụng khi có chuyển đổi hiệu ứng từ tắt dần sang sáng luôn.Chương trình con ngắt UART:
Khi có dữ liệu gửi từ vi điều khiển Trung tâm sang vi điều khiển Trạm thì chương trình ngắt UART sẽ sảy ra, lúc này tiến hành nhận dữ liệu, giá trị gửi qua là kiểu số nguyên dương 8bit vì vậy biến data phải khai báo bằng unsigned int8, nếu nhận được data=0 thì trả về tt=0, ngược lại nếu nhận được data=1 thì gán tt=1. Khi gán giá trị trạng thái thì hệ thống sẽ lưu trữ dù data có bị thay đổi các giá trị ngoài 0 và 1Chương trình chính hiệu ứng tắt dần:
- Bắt đầu chương trình chính phải khởi tạo ngõ vào ra cho vi điều khiển. Một chân của vi điều khiển thì làm nhiệm vụ I/O vì thế phải khỏi tạo. Port C có chân RC7/RX nhận tín hiệu từ máy tính gửi xuống nên đóng vai trò nhận tín hiệu vì vậy phải khởi tạo mức 1 nên khởi tạo là 0x80. Port B kết nối với led đơn xuất tín hiệu từ Vi điều khiển đi ra ngoài nên khởi tạo giá trị là 0x00. Khởi tạo khai báo ngắt UAR
- Khai báo ngắt UART gồm mã lệnh Global là cho phép toàn bộ chương trình ngắt hoạt động thường được gọi là ngắt toàn cục, khởi tạo ngắt timer0 dùng mã lệnh INT_RDA cho phép ngắt timer0 hoạt động.
- Các biến ban đầu gán bằng 0, nếu không gán giá trị ban đầu thì các biến sẽ Random một giá trị nằm trong giới hạn cho phép của biến đó.
- Kiểm tra nếu tt=0 thì bật 8 led sáng ở Port B. Ngược lại nếu tt=1 thì gọi chương trình con hiệu ứng tắt dần đã được trang bị trước đó.
Chúc các bạn có một kỳ thi thành công…!!!