![]() |
|
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 |
Đệ tử 1 túi
Tham gia ngày: Aug 2011
Bài gửi: 24
: |
hỏi về hiển thị LCD
các bác ơi cho em hỏi sự khác nhau giữa giao tiếp lcd 4 bít với giao tiép 8 bit
các bác giải thích rõ ràng cho em với.kể cả phần cứng lẫn phần lạp trình. em vừa làm mấy bài vi du ve hiển thị lcd nhưng chẳng hiểu sao khi mô phỏng lại chẳng hiển thị dc j cả. Các bác test giúp em 2 doạn code này với. sao nó k hiển thị lên dc // VD1 : Hien thi dong chu "MARUKO" #include <16f877A.h> #device *=16 #use delay(clock = 20M) #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT #define LCD_ENABLE_PIN PIN_D3 #define LCD_RS_PIN PIN_D1 #define LCD_RW_PIN PIN_D2 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include <lcd.c> void main(){ lcd_init(); lcd_putc("MARUKO"); while(1); } VÀ ĐOẠN CODE NÀY NỮA. // VD1 : Hien thi dong chu "MARUKO" #include <16f877A.h> #device *=16 #use delay(clock = 20M) #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT #define LCD_ENABLE_PIN PIN_D3 #define LCD_RS_PIN PIN_D1 #define LCD_RW_PIN PIN_D2 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include <LCD.C> void main(void) { lcd_init(); delay_ms(100); while (1) { lcd_clear(); delay_ms(100); lcd_puts("maruko"); lcd_gotoxy(0,1); lcd_puts("12345"); delay_ms(100); } } ĐOẠN CODE NÀY TRÌNH DỊCH CỨ BÁO LỖI NHƯ Ở TRONG FILE ẢNH ẤY |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
đoạn code sau báo lỗi vì không có lệnh lcd_puts chỉ có lệnh lcd_putc không có lệnh lcd_clear() thay bằng lệnh này lcd_putc('\f') Code:
#include <16f877A.h> #device *=16 #use delay(clock = 20M) #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT #define LCD_ENABLE_PIN PIN_D3 #define LCD_RS_PIN PIN_D1 #define LCD_RW_PIN PIN_D2 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include <LCD.C> void main(void) { lcd_init(); delay_ms(100); while (1) { lcd_putc('\f');//xóa màn hình delay_ms(500); lcd_putc("maruko"); delay_ms(500); lcd_gotoxy(1,2);//hàng 2 cột 1 lcd_putc("12345"); delay_ms(500); } } nhớ khai báo lại giá trị thạnh anh trên proteus là 20M.
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Aug 2011
Bài gửi: 24
: |
bác tdm ơi.bác nói đoạn code đầu vẫn hiển thị bình thường nhyưng sao em nạp code vào thì chẳng thấy nó hiển thị j cả, mặc dù em đã đẻ tần số thạch anh 20mhz như bác nói/chỉ thấy lcd sáng thôi.em cũng thấy đoạn code đó k có chỗ nào sai cả.bác có thể xem lại giup em dc k.bác thử nạp code đầu tiên vào mạch mô phỏng em up lên xem mạch mô phỏng em gửi lên có khỏi sai k.
nhân tiện nhờ bác giải thích cho em về lạp trình thì xuất dữ liệu ra lcd 4 và 8 bít khác nhau ntn vậy.em mới tìm hiểu pic nên gaợ nhiều khó khăn quá.mong các bác giúp đỡ em em cảm ơn các bác nhiều thay đổi nội dung bởi: maruko, 04-08-2011 lúc 11:47 PM. |
![]() |
![]() |
![]() |
#4 | |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
Code:
#include <16f877A.h> #device *=16 #use delay(clock = 20M) #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT #define LCD_ENABLE_PIN PIN_D3 #define LCD_RS_PIN PIN_D1 #define LCD_RW_PIN PIN_D2 #define LCD_DATA4 PIN_D4 #define LCD_DATA5 PIN_D5 #define LCD_DATA6 PIN_D6 #define LCD_DATA7 PIN_D7 #include <lcd.c> void main(){ lcd_init(); lcd_putc("MARUKO"); while(1) { } } xuất dữ liệu ra lcd 4bit :dữ liệu đưa ra 2 lần. vd: Code:
void lcd_send_byte(BYTE address, BYTE n) { lcd_output_rs(0); while ( bit_test(lcd_read_byte(),7) ) ; lcd_output_rs(address); delay_cycles(1); lcd_output_rw(0); delay_cycles(1); lcd_output_enable(0); lcd_send_nibble(n >> 4);//truyền 4bit cao lcd_send_nibble(n & 0xf);//truyền 4bit thấp }
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
![]() |
![]() |
![]() |
#5 | |
Đệ tử 1 túi
Tham gia ngày: Mar 2010
Bài gửi: 12
: |
Trích:
LCD 4 bit 8 bit thực chất chỉ khác nhau vế số chân thôi. 4 bit thì dùng 4 chân D4=>D7 còn 8 bit thì dùng D0=>D7 khi lập trình bạn chỉ cần gắn include <lcd_4bit.c> hoặc include <lcd_8bit.c> là chạy ok ah. bạn lên mạng down 2 thư viện 4 bit và 8 bít về sửa chân cho đúng là được. |
|
![]() |
![]() |
![]() |
#6 |
Đệ tử 1 túi
Tham gia ngày: Aug 2011
Bài gửi: 24
: |
bác tmd ơi, sao em nạp code đó vào mà vẫn k thấy lcd hiển thị. nó chỉ sáng k thôi.liệu có phải do phần mềm proteus của em có lỗi k bác .nó cứ như trong ảnh em up lên ấy
|
![]() |
![]() |
![]() |
#7 |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
lấy thử file hex trong file gửi kèm chạy thử xem nó có hiển thị không.
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
![]() |
![]() |
![]() |
#8 |
Đệ tử 1 túi
Tham gia ngày: Aug 2011
Bài gửi: 24
: |
cảm ơm anh tmd em hiển thị dc rồi
em nạp file hex anh up nên thì hiển thị dc.còn file hex của em thì k hiển thị dc tại trình dịch của em có vấn đề .em gỡ ra rồi cài lại thì dc anh ah cảm ơn anh rất nhiều |
![]() |
![]() |
![]() |
#9 |
Nhập môn đệ tử
Tham gia ngày: Mar 2011
Bài gửi: 7
: |
Hi all.
Xin cac bac chi giao.cho minh hoi de dieu khien con tro dich chuyen tren LCD bang CCS thi lam the nao?minh chua hieu lam,bac nao biet thi giup minh voi nhe. Thank! |
![]() |
![]() |
![]() |
#10 | |
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
Code:
#include <16f877A.h> #device *=16 #use delay(clock = 20M) #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT #define LCD_ENABLE_PIN PIN_B5 #define LCD_RS_PIN PIN_B7 #define LCD_RW_PIN PIN_B6 #define LCD_DATA4 PIN_B4 #define LCD_DATA5 PIN_B3 #define LCD_DATA6 PIN_B2 #define LCD_DATA7 PIN_B1 #include <lcd.c> void main(){ int i; while(1) { lcd_init(); lcd_send_byte(0, 0x0e);//hien thi con tro delay_ms(1000); for(i=0;i<=15;i++) { lcd_send_byte(0, 0x14);//dich con tro sang phai một ô delay_ms(1000); } } }
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
![]() |
![]() |
![]() |
#11 |
Nhập môn đệ tử
Tham gia ngày: Feb 2010
Bài gửi: 4
: |
Cám ơn nhiều.
Em cũng đang cần nó. Thân! |
![]() |
![]() |
![]() |
#12 | |
Đệ tử 1 túi
Tham gia ngày: Mar 2010
Bài gửi: 12
: |
Trích:
#DEVICE *=16 ADC = 10 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT #USE DELAY (CLOCK = 12000000) #INCLUDE <lcd_lib_4bit.C> #byte PORTA = 0x05 #byte PORTB = 0x06 #byte PORTC = 0x07 #byte PORTD = 0x08 #byte PORTE = 0x09 #byte TRISA = 0x85 #byte TRISB = 0x86 #byte TRISC = 0x87 #byte TRISD = 0x88 #byte TRISE = 0x89 void main() { TRISA = 0xFF; // PORTA DOC ADC TRISB = 0x0F; // PORTB XUAT DU LIEU DK LCD TRISC = 0x00; TRISD = 0x00; // PORTD XUAT DATA LEN LCD TRISE = 0x00; PORTA = 0X00; PORTB = 0X0F; PORTC = 0X00; PORTD = 0X00; output_bit (pin_D2, 0); // DK RS output_bit (pin_D3, 1); // DK CS lcd_init(); lcd_putcmd(0x01); lcd_putcmd(0x81); printf(lcd_putchar,"hello"); lcd_putcmd(0xC0); printf(lcd_putchar,"maruko"); delay_ms(500); } code như trên đã chạy bạn xem lai nha |
|
![]() |
![]() |
![]() |
#13 |
Đệ tử 1 túi
Tham gia ngày: Sep 2009
Bài gửi: 13
: |
bạn ơi cho mình hỏi muốn nhấp nháy 1 chữ trên lcd thì câu lệnh phải ntn vậy mình đang cần gấp
thank thay đổi nội dung bởi: trinhdieuhvktqs, 15-08-2011 lúc 01:43 AM. |
![]() |
![]() |
![]() |
|
|