Đánh giá chủ đề:
  • 55 Vote(s) - Trung bình 2.89
  • 1
  • 2
  • 3
  • 4
  • 5
Giup dum em...???
Bài viết: #1
Qua mấy pửa dày công nghiên cứu và sao chép...
Em đã có được cái này:
1. Thư viện lcd.h



#define DATA_O P1OUT // PORT xuat du lieu
#define CTRL_DDR P1DIR // Thanh ghi dieu huong cua PORT 1 (phu thuoc vao CTRL)
#define CTRL P1OUT // PORT 1 cua VXL se ket noi voi chan dieu khien cua LCD
#define DATA_I P1IN // PORT nhap du lieu
#define RS 0 // Chan RS cua LCD noi voi chan 0 cua PORT 1 (PB0)
#define RW 1 // Chan RW cua LCD noi voi chan 1 cua PORT 1 (PB1)
#define EN 2 // Chan EN cua LCD noi voi chan 2 cua PORT 1 (PB2)
#define sbi(port, bit) port |= (1<<bit)
#define cbi(port, bit) port &= ~(1<<bit)
// sbi & cbi : dung de set & clear 1 bit trong 1 thanh ghi
// RS = 0: chon thanh ghi lenh, RS = 1:thanh ghi du lieu
// RW = 0: ghi du lieu, RW = 1: doc du lieu
// 0x28: giao tiep 4 bit, 2 dong voi font 5x8
// -----------------------------------------------------------------------------
// Cac ham Write_LCD & Read_LCD & Wait_LCD la ham ho tro trong LCD
void Write_LCD(unsigned char ch)
{
unsigned char temp_mask, HNib, LNib;
temp_mask = 0x0F & CTRL; // Giu lai 4 bit thap de vao temp_mask
HNib = ch & 0xF0; // Ghi 4 bit cao cua ch vao HNib
LNib = ch << 4; // ghi 4 bit thap cua ch vao LNib
//ghi 4 bit cao
DATA_O = HNib | temp_mask;
sbi(CTRL, EN);
cbi(CTRL, EN); // Tao xung canh xuong cho chan EN
//ghi 4 bit thap
DATA_O = LNib | temp_mask;
sbi(CTRL, EN);
cbi(CTRL, EN);
}
unsigned char Read_LCD()
{
unsigned char HNib, LNib;
CTRL_DDR = 0x0F; // set huong cho 4 bit cao (do dang dung che do 4 bit)
//doc 4 bit cao
cbi(CTRL, EN); // xoa chan EN
sbi(CTRL, EN); // set chan EN len muc 1 de LCD chuan bi lam viec...
HNib = DATA_I & 0xF0; // Thuat mat na(mask): giu 4 bit cao, che 4 bit thap
//doc 4 bit thap
cbi(CTRL, EN);
sbi(CTRL, EN);
LNib = DATA_I>>4;
return (HNib | LNib); // Ket hop 4 bit cao & 4 bit thap
}
void Wait_LCD()
{
unsigned char check_busy_flag;
cbi(CTRL, RS);
sbi(CTRL, RW);
while(1)
{
check_busy_flag = (1<<7) & Read_LCD();
if(check_busy_flag == 0x00) break;
}
// _delay_ms(2);
cbi(CTRL, RW);
CTRL_DDR = 0xFF;
}
void Clr_LCD() // Ham xoa LCD
{
cbi(CTRL, RS);
cbi(CTRL, RW);
Write_LCD(0x01); // 0x01 la ma lenh mac dinh trong LCD: xoa man hinh hien thi
Wait_LCD();
}
void Setup_LCD() // Cai dat cho LCD
{
CTRL_DDR = 0xFF;
// PORTB = 0xFF;
cbi(CTRL, RS); //chon thanh ghi lenh
cbi(CTRL, RW); //che do ghi
Write_LCD(0x02); // Tro ve dau dong
Wait_LCD();
//dat che do: 2 line, font 5x8, 4 bit
Write_LCD(0x28);
Wait_LCD();
//bat hien thi
Write_LCD(0x0C);
Wait_LCD();
//dich hien thi sang trai
Write_LCD(0x06);
Wait_LCD();
}
void Putchar_LCD(unsigned char ch) // Hien thi 1 ki tu tren LCD
{
sbi(CTRL, RS);
cbi(CTRL, RW);
Write_LCD(ch);
Wait_LCD();
}
void Print_LCD(char* str, unsined char L) // Hien thi 1 chuoi ki tu tren LCD
{
unsigned char i;
for(i=0;i<L;i++)
if(str[i]>0) Putchar_LCD(str[i]);
else Putchar_LCD(' ');
}
void Move_LCD(unsigned char y, unsigned char x) // Di chuyen den dong y, cot x
{
unsigned char add;
add = 64*(y - 1) + (x - 1) + 0x80; // tinh ma lenh - 0x80: set dia chi DDRAM
cbi(CTRL, RS);
cbi(CTRL, RW);
Write_LCD(add);
Wait_LCD();
}
void Cursor_On_LCD()
{
cbi(CTRL, RS);
cbi(CTRL, RW);
Write_LCD(0x0E); //Nhap nhay con tro, tat con tro
Wait_LCD();
}
void Cursor_Off_LCD()
{
cbi(CTRL, RS);
cbi(CTRL, RW);
Write_LCD(0x0C); // Bat hien thi, nhap nhay con tro
Wait_LCD();
}


2.Và em đã viết thử cái này:




#include "io430.h"
#include "lcd.h"
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR = 0xFF;
Clr_LCD();
Setup_LCD();
Move_LCD(1,1);
Print_LCD("OH MY GOD");
}

---->> Và cuối cùng nó báo lỗi này...???


main.c
Fatal Error[Pe1696]: cannot open source file "lcd.h" D:\Gakon\Vi Xu Li\New folder\main.c 2
searched: "D:\Khoa\Vi Xu Li\New folder\"
searched: "C:\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\430\inc\dlib\"
searched: "C:\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\430\inc\"
searched: "C:\Program Files\IAR Systems\Embedded Workbench 6.0 Kickstart\430\inc\dlib\c\"
Error while running C/C++ compiler
Done. 1 error(s), 0 warning(s)


Nhưng rõ ràng là em đã add cái lcd.h vào Project này rồi mà...??? Pó tay luôn mấy pác oy???





Bài viết: #2
Trên diễn đàn đã có các bài viết giao tiếp LCD cả loại 4bit và 8bit bạn xem thử nhé! Chúng ta không cần phải tạo thư viện LCD vẫn giao tiếp được nhé bạn!
website: www.eplusi.net
Phone: 0907 042 549
Mail: info@eplusi.net
Bài viết: #3
Đây là code giao tiếp 4bit đây:

//
// MSP430 LCD interface
//
// | LCM |
// LCM Pin # | Function | MSP Pin #
//----------------------------

// PIN 5 | RW | GND
// PIN 4 | RS | P1.0
// PIN 6 | EN | P1.1
// PIN 14 | DB7 | P1.7
// PIN 13 | DB6 | P1.6
// PIN 12 | DB5 | P1.5
// PIN 11 | DB4 | P1.4

Pin #16 | GND
Pin #15 | Vcc
Pin #3 | Outout from potentiometer for LCD contrast
Pin #1 | GND
Pin #2 | Vcc

Code ở đây các bạn download xem tham khỏa nhé:
.txt   LCD 4bit.txt (Kích thước: 5.46 KB / Tải về: 55)


Đi tới chuyên mục:


Thành viên đang xem chủ đề: 1 Khách