![]() |
|
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: Oct 2007
Bài gửi: 5
: |
Giúp mình một chút về LCD (chế độ 8Bit,dùng Pic18F4)
Mình dùng PIC8F4XXX kết nối với LCD 16x2.
Sơ đồ kết nối như sau : 8bit PORTC -> D0 - D7 của LCD RD0 -> RS GND -> RW RD2 -> E Khi mình nối chân A và K vào nguồn thì LCD có sáng đèn BackGround, nhưng mà mình không thể khởi tạo được LCD. Mình dùng chương trình như sau: Code:
LIST P=18F4523 ;directive to define processor #include <P18F4523.INC> ;processor specific variable definitions ORG 0x0020 COUNT_L RES 1 COUNT_H RES 1 #define RS PORTD,0 #define EN PORTD,2 #define LCD PORTC ORG 0x0000 GOTO MAIN ORG 0x0020 ;==================================== MAIN CLRF TRISC CLRF TRISD CLRF PORTC ;Đặt portC, portC là output CLRF PORTD CALL DELAY MOVLW H'38' ;Khởi tạo chế độ 8bit MOVWF LCD CALL WRITECMD MOVLW H'0F' ;Bật hiển thị, Cursor ON MOVWF LCD CALL WRITECMD MOVLW H'85' ;Di chuyển con trỏ MOVWF LCD CALL WRITECMD MOVLW 'F' ;Ghi dữ liệu MOVWF PORTC CALL WRITEDATA GOTO $ ;Dừng c.trình ;========================================= DELAY MOVLW D'255' MOVWF COUNT_L DL1 CALL DELAY2 DECFSZ COUNT_L,1 GOTO DL1 RETURN ;========================================= DELAY2 MOVLW D'255' MOVWF COUNT_H DL2 DECFSZ COUNT_H,1 GOTO DL2 RETURN ;========================================= WRITECMD BCF RS ; RS = 0 BSF EN ; EN = 1 NOP NOP BCF EN ; EN = 0 CALL DELAY RETURN ;========================================= WRITEDATA BSF RS ; RS = 1 CALL DELAY2 BSF EN ; EN = 1 NOP NOP BCF EN ; EN = 0 CALL DELAY RETURN ;========================================= END Vì nếu khởi tạo thành công thì sau khi send 2 lệnh 0x38 và 0x0F thì LCD phải có con trỏ nhấp nháy. Không biết có phải mình sai sót gì khi ra lệnh cho LCD ( có thể do xung chốt EN không?, hay có khi nào LCD hỏng không? - vì mình thấy đèn background của LCD vẫn sáng?) Mong các bạn giúp mình với ! thay đổi nội dung bởi: anhemFSA, 22-04-2008 lúc 09:17 PM. |
![]() |
![]() |
![]() |
#2 |
Trưởng lão PIC bang
|
Các module LCD mới thường cần được khởi tạo đầy đủ theo quy trình đã được tôi nói ở post #269 của luồng sau:
http://www.picvietnam.com/forum/show...?t=357&page=18 Bạn thử làm như vậy xem. LED background hoàn toàn không có liên hệ gì với board mạch điều khiển LCD (nó chỉ cần 2 chân A và K cho dãy đèn LED mắc nối tiếp/song song nhau, để chiếu sáng nền của LCD). Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
![]() |
#3 |
Nhập môn đệ tử
Tham gia ngày: Sep 2007
Bài gửi: 8
: |
theo mình thì nguồn cấp cho background phải thiết kế riêng ra. Nếu bạn dùng chung có thể là do sụt nguồn của PIC lên PIC không khởi tạo được LCD.
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 5 túi
Tham gia ngày: Jan 2008
Bài gửi: 96
: |
Tôi không rành hợp ngữ, nhưng tôi nghĩ bạn AnhemFSA nên xem lại các chỉ lệnh "ORG" trong đoạn code của mình !
Riêng lệnh "ORG 0x0020" dùng 2 lần, tôi nghĩ không ổn. Tôi đề nghị sữa code: ... COUNT_L RES 1 COUNT_H RES 1 #define RS PORTD,0 #define EN PORTD,2 #define LCD PORTC ORG 0x0000 GOTO MAIN ORG 0x0020 MAIN ... thay đổi nội dung bởi: minhsondaklak, 01-06-2008 lúc 07:20 PM. |
![]() |
![]() |
![]() |
#5 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 16
: |
khởi tạo LCD 4 hàng 20 cột
Các bạn chỉ bảo : mình dùng CCS 4.068 viết chương trình hiển thị trên LCD 4 hàng 20 cột , mình chỉ hiển thị được trên 2 hàng đầu thôi , còn 2 hàng cuối thì không được .
http://www.mediafire.com/?sharekey=5...538f5672f1b9df thay đổi nội dung bởi: tieulongnu, 15-10-2009 lúc 05:07 AM. |
![]() |
![]() |
![]() |
#6 | |
Đệ tử 4 túi
Tham gia ngày: Aug 2008
Bài gửi: 89
: |
Trích:
Code:
void lcd_gotoxy( BYTE x, BYTE y) { BYTE address=0x00; /* if(y!=1) address=lcd_line_two; else address=0; */ switch(y) { case 1 : address=0x00;break; case 2 : address=0x40;break; case 3 : address=0x14;break; case 4 : address=0x54;break; } address+=x-1; lcd_send_byte(0,0x80|address); }
__________________
Quang báo RG/RGB 6/8/12/16 bits màu Phone No: 0905.034.086 Email: lmquyen@gmail.com |
|
![]() |
![]() |
![]() |
#7 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 16
: |
#define lcd_line_two 0x40 // LCD RAM address for the second line
bạn ơi mình thấy trong thư viện lcd.c có dòng lệnh trên , nhưng sao theo mình biết thì hàng thứ 2 của LCD lại có địa chỉ 0xC0 |
![]() |
![]() |
![]() |
#8 | |
Đệ tử 4 túi
Tham gia ngày: Aug 2008
Bài gửi: 89
: |
Trích:
![]() Trong hàm lcd_gotoxy cho LCD 20x2 trên thì biến address sau khi được xác định bởi biến y sẽ được OR với lệnh WRITE DDRAM 0x80. Regards
__________________
Quang báo RG/RGB 6/8/12/16 bits màu Phone No: 0905.034.086 Email: lmquyen@gmail.com thay đổi nội dung bởi: cskiller, 15-10-2009 lúc 11:59 PM. |
|
![]() |
![]() |
![]() |
#9 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 16
: |
Cảm ơn bạn nhiều , mình đã được hiểu biết rõ
|
![]() |
![]() |
![]() |
#10 |
Đệ tử 5 túi
Tham gia ngày: Oct 2008
Bài gửi: 95
: |
các chương trình mẫu cho lcd_4bit
Các bạn có thể tham khảo các chương trình mẫu này , đây là các bài viết cho lcd 4 hàng 20 cột đã chạy trên mạch thật , dùng CCS4.068, các bạn cho nhận xét nha .
Tài liệu này được sưu tầm từ nguồn Đại Học Sư Phạm Kỹ Thuật và các nguồn khác ...Mong các bạn chỉ bảo thêm. |
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|