PDA

View Full Version : hỏi về hiển thị LCD


maruko
04-08-2011, 02:40 AM
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

tdm
04-08-2011, 10:41 AM
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
đoạn code đầu vẫn hiển thị bình thường.
đ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')

#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);

}
}code trên 1,5s sẽ cập nhập lại màn hình.
nhớ khai báo lại giá trị thạnh anh trên proteus là 20M.

maruko
04-08-2011, 11:42 PM
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

tdm
05-08-2011, 03:20 PM
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
vẫn hiển thị bt:

#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 8bit :dữ liệu đưa ra một lần.
xuất dữ liệu ra lcd 4bit :dữ liệu đưa ra 2 lần.
vd:

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
}

maruko
06-08-2011, 10:57 AM
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

tdm
06-08-2011, 11:54 AM
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
lấy thử file hex trong file gửi kèm chạy thử xem nó có hiển thị không.

maruko
06-08-2011, 06:43 PM
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

Kansv
11-08-2011, 09:20 PM
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!

vukhuong73144
11-08-2011, 10:11 PM
Cám ơn nhiều.
Em cũng đang cần nó.
Thân!

tdm
12-08-2011, 10:48 PM
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!
đoạn code sau cứ 1s dịch chuyển con trỏ sang phải:

#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);
}

}
}

ocean_86
14-08-2011, 04:58 PM
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

chào bạn
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.

ocean_86
14-08-2011, 05:11 PM
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
#INCLUDE <16F877A.h>
#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

trinhdieuhvktqs
15-08-2011, 01:34 AM
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