Đánh giá chủ đề:
  • 89 Vote(s) - Trung bình 3
  • 1
  • 2
  • 3
  • 4
  • 5
Code giao tiếp giữa MSP430 và LCD theo phương thức 4bit
Bài viết: #1
Code giao tiếp giữa MSP430 và LCD theo phương thức 4bit.
TẢI VỀ TẠI ĐÂY:


Tập tin đính kèm
.txt   LCD 4bit.txt (Kích thước: 4.16 KB / Tải về: 85)
Trả lời
Bài viết: #2
(21-05-2012, 01:45 AM)muahoanang3102 Đã viết: You are not allowed to view links. Register or Login to view.Code giao tiếp giữa MSP430 và LCD theo phương thức 4bit.
Bạn ơi, cái code LCD 4 bit của bạn sao mình nạp xuống cứ báo lỗi dòng : lcd_write_cmd(0x18); ở gần cuối ctrinh.
Bạn sửa lại cho mình với. Mình bỏ đoạn đó đi mà LCD cứ chạy lung tung, k bit ra chữ j nữa. Cám ơn bạn trc.Khi mình sửa lcd_write_cmd(0x18); thành
put_cmd(0x18); và thêm __delay_cycles(10000000) thì dòng chữ mới xuất hiện , tuy nhiên nó không đứng yên mà lại dịch sang trái từng cột. Vậy làm sao để chúng đứng yên đây các bạn? Help me with..............
Trả lời
Bài viết: #3
Chào bạn,
cái hàm lcd_write_cmd(0x18) không có nên nó mới báo lỗi đó bạn, bạn sửa lại thành put_cmd(0x18) là đúng rồi đó. Dòng chữ trên LCD dịch là do hàm put_cmd(0x18), mã lệnh 0x18 là mã làm cho màn hình hiển thị dịch. bạn xem chi tiết trong datasheet của LCD thì sẽ thấy rõ. Nếu bạn muốn làm cho màn hình đứng yên thì bỏ lệnh put_cmd(0x18).
Chúc các bạn thành công!
Trả lời
Bài viết: #4
Các bạn ơi giúp mình xem code này cho LCD 4 bit sao nó cứ dịch qua trái quài à. Ai làm cho nó đứng lại với được k? Thanks/


//http://electronicctu.net
#include <msp430g2553.h>

//*******************dinh nghia BIT************************
union reg
{ unsigned char _byte; //khai bao 1byte
struct bit
{ //dinh nghia bit trong byte vua khai bao
unsigned char b0:1; //bit 0 trong byte
unsigned char b1:1; //bit 1 trong byte
unsigned char b2:1; //bit 2 trong byte
unsigned char b3:1; //bit 3 trong byte
unsigned char b4:1; //bit 4 trong byte
unsigned char b5:1; //bit 5 trong byte
unsigned char b6:1; //bit 6 trong byte
unsigned char b7:1; //bit 7 trong byte
} _bit;
};
union reg* P2_dir=(union reg*)0x2a; //khai bao dia chi o nho
union reg* P2_out=(union reg*)0x29;
union reg* P2_sel=(union reg*)0x2e;

//**************************define PIN_LCD*******************
#define RS P2_out->_bit.b5 //0-->thanh ghi lenh lenh;1-->thanh ghi data
#define EN P2_out->_bit.b4 //phan biet giua 2lan gui data

#define DATA_4 P2_out->_bit.b0
#define DATA_5 P2_out->_bit.b1
#define DATA_6 P2_out->_bit.b2
#define DATA_7 P2_out->_bit.b3

// *************misc display defines-************************************************
#define line_1 0x80
#define line_2 0xC0
#define clr_scr 0x01

//********************delay************************
void delay(unsigned long int t)
{
unsigned long int i=0;
for(i=0;i<t;i++);
}
//********************LCD Funtion***********************
//********************tao xung*******************************************
void enable()
{
EN=1;
delay(10);
EN=0;
delay(20);
}
//**********convert data-->send to PIN of microcontrol****************************
void set_data_lsb(unsigned char data) //ham gui byte data thap
{
unsigned char convert=0;

convert=data&0x01;
if(convert==0x01)DATA_4=1;
else DATA_4=0;
convert=data&0x02;
if(convert==0x02)DATA_5=1;
else DATA_5=0;
convert=data&0x04;
if(convert==0x04)DATA_6=1;
else DATA_6=0;
convert=data&0x08;
if(convert==0x08)DATA_7=1;
else DATA_7=0;
}

void set_data_msb(unsigned char data) //ham gui byte data cao
{
unsigned char convert=0;

convert=data&0x10;
if(convert==0x10)DATA_4=1;
else DATA_4=0;
convert=data&0x20;
if(convert==0x20)DATA_5=1;
else DATA_5=0;
convert=data&0x40;
if(convert==0x40)DATA_6=1;
else DATA_6=0;
convert=data&0x80;
if(convert==0x80)DATA_7=1;
else DATA_7=0;
}

//************************HAM GUI LENH******************************************
void put_cmd(unsigned char cmd)
{
RS=0; //chon thanh ghi lenh
set_data_msb(cmd);
enable();
set_data_lsb(cmd);
enable();

}
//**************************ham gui data*************************************
void lcd_putchar(unsigned char data)
{
RS=1;
set_data_msb(data);
enable();
set_data_lsb(data);
enable();

}

void lcd_putsf(char *s)
{
while(*s)
{
lcd_putchar(*s);
s++;
};
}
//****************************ham khoi tao lcd*************************
void lcd_init()
{
delay(100);
RS=0; // che do gui lenh
set_data_lsb(0x03);
enable();
enable();
enable();
set_data_lsb(0x02);
enable();
put_cmd ( 0x28 ); //cd 4bit,2dong,5x7
put_cmd ( 0x0c); //bat hien thi,tat con tro
put_cmd ( 0x06 ); //* entry mode set, increment & scroll left
put_cmd ( 0x01 ); //* clear display
}
//************************************************
//**************************************************
void main()
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
P2_dir->_byte=0xff; //port1 la dau ra
lcd_init();
put_cmd(clr_scr);
while(1)
{
put_cmd(line_1);
lcd_putsf("MSP430");
lcd_putchar(0x3d);
put_cmd(line_2);
lcd_putsf("DANG VU MINH DUNG");
__delay_cycles(1000000);
put_cmd(0x18);
};
}
Trả lời
Bài viết: #5
anh cho em hỏi 2 dòng lệnh này ạh:em thấy biểu là chọn tần số 1MHz nhưng em vẫn không hiểu tại sao?anh chỉ giúp em với ạh.thanks in advance


BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ; // Set DCO step + modulation
Trả lời
Bài viết: #6
có anh chị nào biết chỉ rõ em với ạh! 24
Trả lời
Bài viết: #7
bạn xem các code mẫu đó bạn! viết và mô phổng thử đi!
Trả lời
Bài viết: #8
em chạy được rùi nhưng em thấy 2 dòng lệnh này mà chưa biết cách tính ra tần số đó vì em xem trong thanh ghi thì cũng không thấy có chỉ xem đcượ trong file main.h thì thấy họ define là 1MHz nhưng chưa biết cách tính ra
Trả lời
Bài viết: #9
Chào bạn, hai dòng đó là hai dòng khai báo để MSP430 hoạt động với dao động nội 1MHz( đâu có tính gì đâu bạn), bạn không thích thì cứ bỏ nó đi, MSP430 vẫn hoạt động bình thường nhưng với tần số dao động khác!
Chúc các bạn thành công!
Trả lời
Bài viết: #10
Bạn ơi cho mình hỏi khi mình test thử code này thì hàng đầu tiên luôn hiện thêm dấu " = ".Mình test code dòng đầu tiên luôn hiện ra là MSP$430 = .Mọi người giải đáp giùm em với ạ1
Trả lời


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


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