View Single Post
Old 11-03-2009, 05:57 PM   #28
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi conglong View Post
Thầy Nam cho em hỏi: trong tutorial này thầy dung RE0->RE3 làm 4 chân data (D4->D7) của LCD , còn trong phần cứng của em , em dùng RE2 ->RE5 làm chân data cho LCD, vậy em phải làm sao để gi được dữ liệu cũng như lệnh cho LCD hả thầy , em đã thêm đoạn mã sau vào hàm " void LCD_cmd4(unsigned char cmd)" của thầy mà không được:

"#define LCD_LAT LATE //tin hieu Data cho LCD, chan RE2..RE5
#define LCD_TRIS TRISE //Tristate cua cac tin hieu Data
unsigned temp1,temp2,i;
LCD_RW_LAT = 0; //WRITE DATA TO LCD
LCD_RS_LAT = 0; //Dat che do xuat lenh
temp1 = LCD_LAT & 0xFFF0; //trang thai hien thoi cua LCD_LAT
temp2 = temp1 | (cmd >> 4);
LCD_LAT =(temp2<<2); //Xuat 4 bit cao ra RE5 toi RE2
LCD_EN_LAT = 1; //Tao xung Enable
for (i = 0; i < 2; i++); //keo dai toi thieu 1 us
LCD_EN_LAT = 0; "

Mong thầy giup em
Em cảm ơn thầy!
Trân trọng !
Trước hết, bạn phải đảm bảo là các chân RE2..RE5 là các ngõ ra, do đó cần điều chỉnh lại giá trị của LCD_TRIS trong hàm Init_PORTS() thành 0xFFC3.

Thứ hai, mặt nạ để đọc trạng thái hiện thời của LCD_LAT không còn là 0xFFF0 nữa, mà phải là 0xFFC3 (tức là phải dùng lệnh temp1 = LCD_LAT & 0xFFC3).

Thứ ba, xử lý xong dữ liệu cmd rồi mới OR với temp1 (tức là dùng temp2 = (cmd >> 4) << 2; rồi đến LCD_LAT = temp1 | temp2; ).

Tổng hợp điểm thứ hai và thứ ba, cần dùng các lệnh sau:
Code:
	temp1 = LCD_LAT & 0xFFC3;	 //trang thai hien thoi cua LCD_LAT
	temp2 = (cmd >> 4) << 2;
	LCD_LAT = temp1 | temp2;         //Xuat 4 bit cao ra RE5 toi RE2
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
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn