Trích:
Nguyên văn bởi conglong
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,