Mua linh kiện điện tử Đ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:
Video Tạo xung bằng Delay Nút nhấn + Led + Led 7 đoạn
Blog Tạo xung bằng Delay Nút nhấn + Led + Led 7 đoạn
Đề bài tạo xung:
Bài giải tạo xung:
Phần cứng chương trình tạo xung: Phần cứng được vẽ theo đề bài và đề bài này đơn giản nên không có giải thích.Phần mềm tạo xung:
Khai báo thư viện tiền sử lý của tạo xung:
- Vi điều khiển hiện tại mình đan dùng là Pic16F887
- Hiện đan dùng thạch anh ngoài và thạch anh ngoài 20M bằng lệnh #Fuses hs và #delay(clock=20M)
- Đị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. Vì đây là bài thi nên việc định nghĩa chân phụ thuộc rất lớn vào nội dung đề bài.
- 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} “.
- Tên khai báo biến thì cái này tùy thuộc vào chức năng để khai báo cho phù hợp. Trong bài này có nút nhấn RUN đối lập với STOP vì thế bao giờ chúng ta cũng khai báo biến “int1 tt;“. Các biến còn lại phụ thuộc vào sự hổ trợ cho chương trình.
Chương trình con kiểm tra nút nhấn của tạo xung:
- Ở đây khi xem xét thấy nút RUN đối lập với nút STOP và chỉ có 1 chức năng khi nhấn vì thế hai nút nhấn cùng sử dụng một biến nhưng trả về 2 giá trị khác nhau.
- Đề yêu cầu khi ở chế độ STOP thì mới cho phép thực hiện nút ADJ vì thế khi tt=0 tức đan dừng thì tiến hành kiểm tra nút nhấn ADJ. Nút nhấn này thay đổi thời gian tạo trễ cho hàm tạo xung và thời gian cần tạo từ [0 – 9] theo yêu cầu đề bài. Từ đó ta biết được nút nhấn này có nhiều chức năng nên chúng ta cần chống dội cho nút nhấn. Thực hiện hàm chống dội như hình.
Chương trình chính thực hiện toàn bộ hoạt động của vi điều khiển dùng tạo xung
- Ban đầu khởi tạo PORT: Chương trình nút nhấn được gắn vào chân C1, C2 vì thế phải trả về mức cao cho hai chân này. Các chân còn lại cho mức thấp, Tương tự nút nhấn ADJ được nối vào Port A và chỉ sử dùng 1 nút nhấn nên set giá trị là 0xff. Port D gắn vào led 7 đoạn xuất tín hiệu ra ngoài từ đó set giá trị là 0x00.
- Giá trị ban đầu cho biến rất quan trọng, nếu không gán giá trị ban đầu thì giá trị biến đó sẽ Random một giá trị bật kỳ nằm trong khoảng giới hạn của biến. Phụ thuộc rất nhiều vào người lập trình quy định giá trị.
Tiến hành kiểm tra nút nhấn và xuất giá trị thời gian cần tạo trễ ra màn hình led 7 đoạn.
- Khi tt=1 tức đã được nhấn RUN tiến hành đếm thời gian. Cứ sau 100ms thì giá trị mgiay tăng lên một đơn vị, sau 10 lần tăng tương ứng với 1s. Đủ 1s thì tăng biến giayt lên một đơn vị đồng thời set giá trị mgiay=0 chuẩn bị cho chu kỳ tiếp theo. Tiếp theo kiểm tra xem nếu chỉnh giay=0 thì ngõ tạo xung luôn tắt và gán giayt=0, ngược lại thì chờ đến khi giayt=giay tiến hành đảo giá trị và gán giayt=0 chuẩn bị cho chu kỳ đảo tiếp theo.
- Theo yêu cầu đề thời gian xuất xung mức 1 bằng thời gian xuất xung mức 0 vì thế ở đâu phải chọn so sánh bằng để đảo giá trị.
- Ở đây không sử dụng delay theo thời gian giây quy định. Ví dụ “giay=5” thì “delay_ms(5000);” việc tạo trễ này sẽ làm cho việc kiểm tra nút nhấn sẽ bị treo trong thời gian 10s từ đó sẽ không đúng yêu cầu đề bài đưa ra. Vì thế việc sử dụng biến “mgiay” sẽ giúp chúng ta tạo trễ 100ms thì sau đó đã có thể kiểm tra nút nhấn làm cho chương trình nút nhấn không bị thời gian trễ quá lớn. Nhưng bù lại để lập trình được các bạn cần phải làm và tham khảo nhiều.
Chúc các bạn có một kỳ thi thành công…!!!