Tư vấn: 0979.466.469 / 0938.128.290

MENU

Giao tiếp LCD với AVR

Gia cong pcb 600*150px
Giao tiếp màn hình LCD với bộ vi điều khiển AVR theo chế độ bus dữ liệu 8 bit.

 

Giao tiếp LCD với AVR

Dưới đây là giao diện chế độ 8 bit của màn hình LCD với bộ vi điều khiển AVR.

1) Giao diện LCD với Avr Atmega8

 2) Giao diện LCD với Atmega32

Để kết nối LCD với Avr cần có bus dữ liệu 8 bit. Ngoài ra, chúng ta cần bus điều khiển 2 bit cho chế độ chỉ ghi hoặc bus điều khiển 3 bit cho chế độ Đọc cộng với ghi. Kết nối chân 1 của LCD với GND, chân 2 đến Vcc . Kết nối biến trở (2 đến 5 K Ohm) trên toàn bộ nguồn cung cấp và GND. Kết nối chân giữa của biến trở với chân 3 của LCD. Nếu muốn làm sáng đèn sau, nối chân LED- với GND và chân LED+ của màn hình LCD với nguồn Vcc bằng điện trở. Hình dưới đây là hai sơ đồ mạch!

Giao diện LCD với Avr Atmega8

Giao diện LCD với Atmega32

Trong mã C , chúng được khai báo  dưới các hàm 'LCD ()' và 'LCDcmd ()'

Để ngăn sự cố phải cho phép LCD hoàn thành việc thực hiện từng thao tác. Ở đây chúng ta sẽ sử dụng các vòng lặp trì hoãn có sẵn từ Thư viện studio AVR. Mỗi lệnh hoặc dữ liệu mất ít nhất 40uS để được thực thi. Vòng chờ dài nhất là 1,65mS.

Chương trình

#include

#include

#define DPORT PORTB // Định nghĩa  Port

#define DPDDR DDRB

#define CPORT PORTD //Định nghĩa tín hiệu Port

#define CPDDR DDRD

#define RS PD6 //Khai báo chân Reset

#define EN PD7 //Khai báo chân Enable

 

#define LCDClear 0x01 //Xóa màn hình LCD

#define LCD8bit 0x38 //Khởi tạo LCD chế độ 8 bit

#define LCDCursorOn 0x0f //Cho phép con trỏ

#define LCDSeek00 0x80 //Tìm con trỏ

void LCD(char ch);

void LCDcmd(void);

void LCDInitialize(void);

int main()

{ DPDDR=0xff;

CPDDR=0xf0;

_delay_ms(2000);

LCDInitialize();

LCD(‘C’);

LCD(‘i’);

LCD(‘r’);

LCD(‘c’);

LCD(‘u’);

LCD(‘i’);

LCD(‘t’);

LCD(‘s’);

LCD(‘ ’);

LCD(‘T’);

LCD(‘o’);

LCD(‘d’);

LCD(‘a’);

LCD(‘y’);

return 0;

}

void LCD(char ch)

{ DPORT=ch; // Gán giá trị vào các Port

CPORT=(1<

_delay_us(10);

CPORT=(1<

_delay_us(45);

}

void LCDcmd(char ch)

{ DPORT=ch;

CPORT=(0<

_delay_ms(10);

CPORT=(0<

_delay_ms(45);

if(ch==0x01||ch==0x02) // Nếu các lệnh là LCD Clear hoặc LCDSeek00 thì trì hoãn 2mS

_delay_ms(2);

}

void LCDInitialize(void)

{ LCDcmd(LCD8bit);

LCDcmd(LCDCursorOn);

LCDcmd(LCDClear);

LCDcmd(LCDSeek00);

}

Phía trên chỉ là chương trình cơ bản, sau đây sẽ là chương trình thực hiện thêm một số chức năng tốt hơn trong LCD với AVR là in ra màn hình LCD.

#include

#include

 

#define DPORT PORTB

#define DPDDR DDRB

 

Module điện tử 932*50

#define CPORT PORTD

#define CPDDR DDRD

 

#define RS PD6

#define EN PD7

 

#define LCDClear 0x01

#define LCD8bit 0x38

#define LCDCursorOn 0x0f

#define LCDSeek00 0x80

 

void LCD(char ch);

void LCDcmd(void);

void LCDInitialize(void);

void printStringLCD(char *str);

int printIntLCD(unsigned int i);

 

int main()

{ DPDDR=0xff;

CPDDR=0xf0;

 

_delay_ms(500);

LCDInitialize();

printStringLCD(“Circuits Today”);

_delay_ms(5000);

LCDcmd(LCDClear);

prinStringLCD(“Print an Integer”);

LCDcmd(0xc0);

printIntLCD(990);

return 0;

}

void LCD(char ch)

{ DPORT=ch;

CPORT=(1<

_delay_us(10);

CPORT=(1<

_delay_us(45);

}

void LCDcmd(unsigned char ch)

{ DPORT=ch;

CPORT=(0<

_delay_us(10);

CPORT=(0<

_delay_us(45);

if(ch==0x01||ch==0x02)

_delay_ms(2);

}

void LCDInitialize(void)

{ LCDcmd(LCD8bit);

LCDcmd(LCDCursorOn);

LCDcmd(LCDClear);

LCDcmd(LCDSeek00);

void printStringLCD(char *str)

{ int i=0;

while(str[i]!=’′)

{ DPORT=str[i];

LCD(ch);

i++;

}

}

int printIntLCD(unsigned int i)

{ static int a;

a=0;

if(i!=0)

{ printIntLCD(i/10);

LCD(‘0’+i%10);

a++;

}

return a;

}

Nguồn tham khảo: http://www.circuitstoday.com/lcd-interfacing-with-avr

 

 

 

 

 

Gia công pcb 932*150
Sản phẩm nổi bật
Chưa có dữ liệu
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading
0979 466 469
Bạn cần linh kiện mẫu ? 7-11 ngày