Cám ơn anh Nam nhé, e đã sủa được rồi . Em đọc và sủa như sau:
const unsigned char __attribute__ ((space(auto_psv)))
chuoi0[]=" cty CEVT \0",
chuoi1[]= "Dat nhiet do = \0",
chuoi2[]=" Dat kp = \0",
chuoi3[]=" Dat ki = \0",
chuoi4[]=" Dat kd = \0",
chuoi5[]= " Nhiet do thuc = \0";
unsigned char __attribute__ ((space(auto_psv)))
s[15];
Em để tự động định địa chỉ.
Thưa anh, em muốn hỏi anh ở phần hiển thị LCD. Trong tutorial 4 của anh có sử dụng các tín hiệu data của LCD cho cổng E. Nhưng giờ em muốn nối thể này (tại em làm tiếp cái của người khác đang làm ) : Cổng F cho D4,D5 ; E4,E5 cho D6,D7. Giờ em khai báo như thế này có được không :
Code:
#define LCD_DAT1 LATE
#define LCD_TRIS1 TRISE
#define LCD_TAM LATF
#define LCD_TRIS2 TRISF
void Init_PORTS(void)
LCD_DAT1&= 0xFF;
LCD_TAM&= 0xF0;
LCD_TRIS1 = 0xFF;
LCD_TRIS2 = 0XF0;
còn ở hàm LCD_cmd4() và hàm LCD_dat4() thì em viết lại như sau:
void LCD_cmd4(unsigned char cmd) {
unsigned temp1, i;
//LATDbits.LCD_RW = 0;
LATBbits.LCD_RS = 0; //Dat che do xuat lenh
temp1 = LCD_DAT1 & 0xFF ; //Lay trang thai hien thoi cua LCD_DAT
LCD_DAT1 = temp1 | (cmd >> 4); //Xuat 4 bit cao
LATBbits.LCD_EN = 1; //Tao xung Enable
for (i = 0; i < 2; i++); //keo dai toi thieu 1 us
LATBbits.LCD_EN = 0;
temp1 = LCD_TAM & 0xF0; //Lay trang thai hien thoi cua LCD_DAT1
LCD_TAM = temp1 | (cmd & 0x0F); //Xuat 4 bit thap
LATBbits.LCD_EN = 1; //Tao xung Enable
for (i = 0; i < 2; i++); //keo dai toi thieu 1 us
LATBbits.LCD_EN = 0;
}
//Chuong trinh con xuat du lieu o che do 4 bit
//------------------------------------------------------------------------------
void LCD_dat4(unsigned char dat) {
unsigned temp2, i;
//LATDbits.LCD_RW = 0;
LATBbits.LCD_RS = 1; //Dat che do xuat du lieu
temp2 = LCD_DAT1 & 0xFF; //Lay trang thai hien thoi cua LCD_DAT
LCD_DAT1 = temp2 | (dat >> 4); //Xuat 4 bit cao
LATBbits.LCD_EN = 1; //Tao xung Enable
for (i = 0; i < 2; i++); //keo dai toi thieu 1 us
LATBbits.LCD_EN = 0;
temp2 = LCD_TAM & 0xF0; //Lay trang thai hien thoi cua LCD_DAT
LCD_TAM = temp2 | (dat & 0x0F); //Xuat 4 bit thap
LATBbits.LCD_EN = 1; //Tao xung Enable
for (i = 0; i < 2; i++); //keo dai toi thieu 1 us
LATBbits.LCD_EN = 0;
}
Mạc dù em biên dịch không báo lỗi nhưng khi nắp mạch thật thì không hiển thị được LCD. Mong anh giúp em !