Lập Trình Nút Nhấn Cho Pic16F877A, Mplab Xc8: Lập Trình Nút Nhấn

Nói về nút nhấn (button) thì có lẽ chúng ta đã quá quen với nó rồi thậm chí chúng ta chúng ta còn tiếp xúc với nó hằng ngày nữa, ví dụ như : bàn phím máy tính, các thiết bị điều khiển tivi, máy điều hòa…..

Bạn đang xem: Lập trình nút nhấn cho pic16f877a

2. Các loại button.

Nút nhấn thường thì có kích thước 6 – 12mm tùy thuộc vào mục đích sử dụng các bạn có thể lựa chọn loại nút nhấn phù hợp với mục đích của mình.

Loại này tuy là 4 chân, nhưng thực chất cũng chỉ là 2 chân mà thôi, bạn xem hình dưới là rõ ngay.

Hiện nay trên thị trường có rất nhiều loại nút nhấn khác nhau và giá thành cũng khác nhau. Độ bền của nút nhấn cũng khá cao.3. Nút nhấn trong mô phỏng.a.Tích cực mức thấp.

b. Tích cực mức cao.

- Đây là ảnh mô phỏng protues.

- Đây là code chương trình.

Xem thêm: “ ma nữ kim so hyun đeo bám “pháp sư” taecyeon (2pm) đòi… hôn liền tù tì

#include #include #define _XTAL_FREQ 8000000 // if 4Mhz is XT#include // CONFIG#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)void main(void){ TRISA = 0X01; TRISB = 0X01; TRISD = 0X00; PORTD = 0X00; ADCON1 = 0x07; // off ADC while(1) { if(PORTAbits.RA0==0) { __delay_ms(100); if(PORTAbits.RA0==0) { PORTDbits.RD0=1; } } if(PORTBbits.RB0==1) __delay_ms(100); if(PORTBbits.RB0==1) { PORTDbits.RD0=0; } }}

Code và mô phỏng được làm trên
MPLAB X IDE và XC8 và
Protues 8.1


Tải tệp đính kèm:

2438-button_led_877a.rar (57.31K) ( Phí tải: Miễn phí )
Báo vi phạm bản quyền Báo lỗi
Thành viên không được phép chia sẻ tài liệu, tài liệu đính kèm bài viết (Có phí hoặc có bản quyền tác giả) cho người khác hoặc chia sẻ trên website khác.

*

counter1, đếm xung, điều chế xung, đồ án điện tử, đồ án iot, đồ án nhúng, hiển thị lcd, lập trình, lập trình lm35, lập trình pic, lập trình timer, lập trình uart, lcd1602, led đon, mạch điện tử, ngắt timer0, nhận làm đồ án, nút nhấn, nút nhấn đơn, pic16f877a, thiết kế mạch, timer0, timer1, tính timer0, truyền nhận, vi điều khiển

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 

gmail.com

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í

*


Mục lục

5 Bài giải lập trình Nút nhấn:6 Phần mềm lập trình Nút nhấn:6.2 Chương trình con lập trình nút nhấn:

Tải File bài giải


Tải Xuống
Pass giải nén: canthiepsomtw.edu.vn

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:

*

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

*

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à Pic16F887Hiện dùng thạch anh ngoài và thạch anh ngoài khai báo 12M bằng lệnh #Fuses HS#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.

*

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

Chương trình kiểm tra nút nhấnChươ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,….

*

Chương trình đếm thời gian 10s sáng đènKiể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,….

*

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/3u
S
.Timer0 đếm 8bit => 2^8 = 256 xung => t0 max = 2/3u
S 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.

*

Leave a Reply

Your email address will not be published. Required fields are marked *

x

Welcome Back!

Login to your account below

Retrieve your password

Please enter your username or email address to reset your password.