Lập trình nút nhấn, Điều khiển led đơn sáng 10s bằng Timer0,Lập trình Pic

lap-trinh-nut-nhan-dieu-khien-led-don-10s-dung-timer0-lap-trinh-pic
Lập trình nút nhấn được xem là một trong các bài tập về lập trình khó chịu bởi có nhiều phương pháp cũng như nhiều trạng thái để lập trình như: một chức năng, 2 chức năng, nhiều hơn 2 chức năng, một dạng đặt  biết là một nút nhấn có thể sử lý được nhiều công việc như: đếm số lần nhấn để sử lý công việc hoặc thời gian nhấn nút. Có hai loại chính là nhấn giữ hoặc nhấn nhả, thông thường nút nhấn nhả được sử dụng nhiều trong các đề tài. Nút nhấn có nhiều loại và có thời gian dội phím khác nhau vì vậy khi lập trình phải lưu ý để đảm bảo tính ổn định lâu dài cho hệ thống.

Mua linh kiện điện tử tại Điện tử Nhật Tùng

Liên hệ làm mạch  Phone: 0967.551.477 Zalo: 0967.551.477 Email: dientunhattung@gmail.com Địa Chỉ: 171/25 Lê Văn Thọ, P8, Gò Vấp, Tp HCM Chi tiết: Nhận làm mạch và đồ án Điện tử  
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ết khóa học lập trình vi điều khiển online

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:

Hướng dẫn Tải và Cài đặt phần mềm giải nén Winrar

Video Lập trình nút nhấn, Điều khiển led đơn sáng 10s bằng Timer0

Blog Lập trình nút nhấn, Điều khiển led đơn sáng 10s bằng Timer0

Đề bài lập trình Nút nhấn:

lap-trinh-nut-nhan-dieu-khien-led-don-10s-dung-timer0-lap-trinh-pic-de-bai

Bài giải lập trình Nút nhấn:

Phần cứng chương trình lập trình Nút nhấn:

  • Yêu cầu đề bài đưa ra chỉ cần đọc tín hiệu từ nút nhấn sau đó xuất ra cho Led đơn sáng 10s  theo thời gian định thời từ Timer0.
  • Sử dụng dao động ngoài thạch anh 12M gắn vào chân OSC1 OSC2. Đây là mô phỏng nên mình lười không gắn vào.
  • Sử dụng 4 Led đơn được điều khiển độc lập phụ thuộc vào nút nhấn. Tính trở 330 tham khảo tại 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ậtMua Linh kiện
Pic16F887Pic16F877
Led đơnLed đơn
Điện trởĐiện trở
Nút nhấnNút nhấn
Thạch anhThạch anh
 

lap-trinh-nut-nhan-dieu-khien-led-don-10s-dung-timer0-lap-trinh-pic

Phần mềm lập trình Nút nhấn:

Khai báo thư viện tiền sử lý của lập trình Nút nhấn:

  • Vi điều khiển hiện tại mình đan dùng là Pic16F887
  • Hiện dùng thạch anh ngoài và thạch anh ngoài khai báo 12M bằng lệnh #Fuses  HS  và  #delay(clock=12M).  
  • Địa chỉ biến cờ tràn của timer00x0b.2 tức là địa chỉ 0x0b và vị trí 2. Tên thanh ghi TMR0IF vì vậy việc định nghĩa đúng tên làm rõ được chức năng của biến đan dùng, nếu các bạn không nhớ tên có thể định nghĩa bất cứ tên mà bạn mong muốn chỉ cần tuân thủ các điều kiện đặt tên.
  • Đị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. Khi chương trình có trạng thái đối lập nhau thì nên khai báo biến 1bit để dễ lập trình.
lap-trinh-nut-nhan-dieu-khien-led-don-10s-dung-timer0-lap-trinh-pic-khai-bao

Chương trình con lập trình nút nhấn:

Chương trình kiểm tra nút nhấn

  • Chương trình kiểm tra nút nhấn đơn giản khi nhấn nút thì nút nhấn trả về 0 theo phần cứng kết nối, thì trả về tt0=1 để cho phép sáng đèn, dem=0 bắt đầu đếm thời gian quy định là 10s.
  • Tương tự cho các nút nhấn còn lại nhưng khi trả về là tt1 và dem1,….
lap-trinh-nut-nhan-dieu-khien-led-don-10s-dung-timer0-lap-trinh-pic-chuong-trinh-nut-nhan

Chương trình đếm thời gian 10s sáng đèn

  • Kiểm tra nếu tt0=1 tức có nhấn nút thì chương trình đếm bắt đầu đếm. Cứ sau 0.1ms thì giá trị dem0 tăng lên một đơn vị xem phần tính toán bên dưới chương trình chính. Khi giá trị nhỏ hơn 100000 tức chưa đủ 10s thì luôn bật led vị trí RC0 sáng, khi đạt ngưỡng 100000 tức đủ 10s thì cho tt0=0 và tắt led vị trí RC0, ngược lại tt0=0 luôn gán giá trị dem0=0 và tắt led chân RC0.
  • Tương tự cho các chương trình đếm thời gian còn lại,….
lap-trinh-nut-nhan-dieu-khien-led-don-10s-dung-timer0-lap-trinh-pic-chuong-trinh-con-dem-tgian

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 lập trình nút nhấ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 xuất dữ liệu cho led đơn vì vậy xuất khởi tạo là 0x00. Port B kết nối với nút nhấn để đưa tín hiệu vào cho Vi điều khiển nên khởi tạo là 0xff.
  • Sử dụng timer0 để đếm thời gian 10s nên khai báo t0_internal và sử dụng bộ chia timer02. từ đó suy ra cách tính: 12M/4=3M sử dụng bộ chia 4 là chia của phần cứng do nhà sản xuất quy định. 3M/2=1.5M sử dụng bộ chia 2 của timer0, từ đó suy ra f = 1.5M   => T = 2/3uS. Timer0 đếm 8bit => 2^8 = 256 xung    => t0 max = 2/3uS x 256 = 512/3ms  ≈ 0.1706ms. Nên sử dụng số 512/3ms để tính đừng quy đổi ra xấp xỉ sẽ dẫn đến sai số. Chọn thời gian tràn timer00.1ms    => bắt đầu đếm từ 106.
  • Kiểm tra nút nhấn có được nhấn không nếu có sẽ trả về kết quả ttdem tương ứng.
  • Kiểm tra nếu TMR0IF=1 timer0 đã đếm tràn tức timer0 đã đếm tới ngưỡng 255 thì tiến hành xóa cờ tràn tức cho TMR0IF=0, sau đó khởi tạo lại Timer0 về 106 để chu kỳ sau được 0.1ms.
  • Cuối cùng gọi các chương trình đếm thời gian thực hiện, cứ sau 0.1ms thì sẽ tăng lên một giá trị theo điều kiện đã được lập trình trong chương trình con.

lap-trinh-nut-nhan-dieu-khien-led-don-10s-dung-timer0-lap-trinh-pic-chuong-trinh-chinh

Chúc các bạn có một kỳ thi thành công…!!!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *