![]() |
|
Tài trợ cho PIC Vietnam |
Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Nhập môn đệ tử
Tham gia ngày: Jan 2010
Bài gửi: 4
: |
![]() - MỚI TẬP TÀNH NÊN CHƯA RÀNH LẮM, MONG ĐƯỢC CÁC A GIÚP ĐỠ NHIỆT TÌNH VỚI
CHẢ LÀ E LẬP TRÌNH GIAO TIẾP DÙNG NGẮT RB0, DÙNG 4 NÚT BẤM: TĂNG, GIẢM, QUAY THUẬN, QUAY NGỊCH -KHI BẤM THUẬN THÌ LCD HIỆN: QUAY THUẬN GIÁ TRỊ: X (BIẾN) => ĐÃ LÀM ĐƯỢC -KHI BẤM NGỊCH LCD HIỆN: QUAY NGHỊCH GIÁ TRỊ: X (BIẾN) => ĐÃ LÀM ĐƯỢC - VẤN ĐỀ LÀ KHI E BẤM TĂNG HOẶC GIẢM THÌ BIẾN X PHẢI THAY ĐỔI NHƯ LÀ: QUAY THUẬN GIÁ TRỊ: 1 HAY 2 , 3, 4, 5. E ĐANG BÓ TAY PHẦN NÀY. E ĐÃ CÓ TÌM HIỂU QUA LÀ MUỐN HIỆN THỊ LCD THÌ PHẢI ĐƯA MÃ ASCII VÀO LCD. NHƯNG KO BIẾT CHUYỂN GIÁ TRỊ LƯU TRONG BIẾN X THÀNH MÃ ASCII RỒI CÂU LỆNH VIẾT NHƯ THẾ NÀO CẢ. MONG CÁC A VIẾT HỘ E ĐOẠN CODE CHỖ TĂNG GIẢM HIỆN LCD VỚI, E XIN CẢM ƠN RẤT NHÌU. E GỬI CODE VÀ MÔ PHỎNG PROTUES ĐỂ CÁC A XEM HỘ. PHẦN RB6 RB7 IN ĐẬM E KO BIẾT VIẾT THẾ NÀO. #include <16F877A.h> #include <DEFS_16F877A.h> #fuses XT,NOWDT,NOPROTECT,NOLVP #use delay(clock=4000000) #define RS RB3 #define RW RB2 #define E RB1 #define LCD PORTD #use fast_io(b) #byte portb=0x06 #byte intcon=0x000B int x=0; /*Ham yeu cau goi lenh dieu khien LCD*/ void comnwrt(void) { RS = 0; RW = 0; E = 1; E = 0; delay_ms(1); } /*Ham yeu cau goi du lieu hien thi len LCD*/ void datawrt(void) { RS = 1; RW = 0; E = 1; E = 0; delay_ms(1); } // Chuong trinh ngat #int_RB void ngat_RB() { if((RBIF)&&(RBIE)) { //Kiem tra sw1 { if(RB4==0) { LCD = 0x01; // Xoa man hinh hien thi comnwrt(); delay_ms(10); LCD = 0x83; // Vi tri hang 1,cot 3 comnwrt(); delay_ms(1); LCD = 'Q'; // Xuat dong chu "QUAY THUAN" ra LCD datawrt(); LCD = 'U'; datawrt(); LCD = 'A'; datawrt(); LCD = 'Y'; datawrt(); LCD = ' '; datawrt(); LCD = 'T'; datawrt(); LCD = 'H'; datawrt(); LCD = 'U'; datawrt(); LCD = 'A'; datawrt(); LCD = 'N'; datawrt(); LCD = 0xC0; // Vi tri hang 2,cot 0 comnwrt(); LCD = 'G'; // Xuat dong chu "GIA TRI:" ra LCD datawrt(); LCD = 'I'; datawrt(); LCD = 'A'; datawrt(); LCD = ' '; datawrt(); LCD = 'T'; datawrt(); LCD = 'R'; datawrt(); LCD = 'I'; datawrt(); LCD = ':'; datawrt(); } } //Kiem tra sw2 { if(RB5==0) { LCD = 0x01; // Xoa man hinh hien thi comnwrt(); delay_ms(10); LCD = 0x83; // Vi tri hang 1,cot 3 comnwrt(); delay_ms(1); LCD = 'Q'; // Xuat dong chu "QUAY NGICH" ra LCD datawrt(); LCD = 'U'; datawrt(); LCD = 'A'; datawrt(); LCD = 'Y'; datawrt(); LCD = ' '; datawrt(); LCD = 'N'; datawrt(); LCD = 'G'; datawrt(); LCD = 'I'; datawrt(); LCD = 'C'; datawrt(); LCD = 'H'; datawrt(); LCD = 0xC0; // Vi tri hang 2,cot 0 comnwrt(); LCD = 'G'; // Xuat dong chu "GIA TRI:" ra LCD datawrt(); LCD = 'I'; datawrt(); LCD = 'A'; datawrt(); LCD = ' '; datawrt(); LCD = 'T'; datawrt(); LCD = 'R'; datawrt(); LCD = 'I'; datawrt(); LCD = ':'; datawrt(); } } //Kiem tra sw3 { if(RB6==0) { ++x; LCD = 0x01; // Xoa man hinh hien thi comnwrt(); LCD = 0xC8; // Vi tri hang 2,cot 8 comnwrt(); delay_ms(100); LCD='x'; datawrt(); delay_ms(100); } } //Kiem tra sw4 { if(RB7==0) { } } RBIF=0; //Xoa co ngat RB } } /*Ham main*/ void main(void) { set_tris_B(0b11110000); set_tris_D(0); enable_interrupts(global); // Cho phep ngat toan cuc enable_interrupts(int_RB); // Cho phep ngat RB ext_int_edge(H_to_L); // Ngat khi co xung cao xuong thap delay_ms(100); // Tao tre 100ms cho LCD khoi dong LCD = 0x38; // Hai hang, ma tran dot 5*7, 8 bit interface comnwrt(); LCD = 0x0C; // Bat hien thi, tat con tro comnwrt(); LCD = 0x82; // Vi tri hang 1,cot 3 comnwrt(); LCD = 'C'; // Xuat dong chu "CHUONG TRINH" ra LCD datawrt(); LCD = 'H'; datawrt(); LCD = 'U'; datawrt(); LCD = 'O'; datawrt(); LCD = 'N'; datawrt(); LCD = 'G'; datawrt(); LCD = ' '; datawrt(); LCD = 'T'; datawrt(); LCD = 'R'; datawrt(); LCD = 'I'; datawrt(); LCD = 'N'; datawrt(); LCD = 'H'; datawrt(); LCD = 0xC4; // Vi tri hang 2,cot 5 comnwrt(); LCD = 'S'; // Xuat dong chu "SAN SANG" ra LCD datawrt(); LCD = 'A'; datawrt(); LCD = 'N'; datawrt(); LCD = ' '; datawrt(); LCD = 'S'; datawrt(); LCD = 'A'; datawrt(); LCD = 'N'; datawrt(); LCD = 'G'; datawrt(); While(true) { } } |
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Jan 2010
Bài gửi: 4
: |
Cần giúp đỡ
Ko ai giúp e sao ? E sắp nộp đồ án rồi. Hu hu hu.
|
![]() |
![]() |
![]() |
#3 | |
Đệ tử 2 túi
Tham gia ngày: Mar 2007
Bài gửi: 44
: |
Trích:
Bạn xem mã ASCII của chữ số 1 là bao nhiêu, ví dụ xem ở chỗ này http://www.asciitable.com/ Như vậy chữ '0', '1' có thứ tự là 48, 49, Chữ 'A' có thứ tự là 65. Có nghĩa lệnh LCD = 'A'; của bạn tương đương LCD = 65; LCD = '0' tuơng đuơng LCD = 48; vậy muốn xuất giá trị x, x = 0..9 thì ==> LCD = x+ 48 ; Cách này mình đoán thôi, bạn thử xem đuợc không. Không đuợc thì cho mình xin lỗi. |
|
![]() |
![]() |
![]() |
#4 | |
Nhập môn đệ tử
Tham gia ngày: Sep 2011
Bài gửi: 2
: |
Trích:
|
|
![]() |
![]() |
![]() |
#5 |
Nhập môn đệ tử
Tham gia ngày: Dec 2010
Bài gửi: 2
: |
mình tưởng là muốn xuất ra từ "quay thuan" hay "quay nguoc" thì minh có thể lập trình cả cum từ và xuất ra luôn bằng lệnh
printf(lcd_putc," quay thuan"); hoặc printf(lcd_putc," quay ngươc"); sao lại phải xuất lệnh từng chữ cái vậy ah?? nhân tiện cho e hỏi là sao lúc em lập trình cho hiển thị ra LCD 16x2 thì luôn bị mất chữ ở cột 1 hàng 1 vậy????em toàn phải để dấu "cách" ở đó thui |
![]() |
![]() |
![]() |
#6 | |
Đệ tử 2 túi
|
Trích:
__________________
[email]toancdt09@gmail.com |
|
![]() |
![]() |
![]() |
|
|