PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 25-02-2010, 05:31 PM   #1
hang1988
Đệ tử 1 túi
 
Tham gia ngày: May 2008
Bài gửi: 21
:
LCD nối vào PORTB có được không?

Em giao tiếp LCD 4 bit với PIC30F4011 như sau : D4 đến D7 nối tương đương với RB0 đến RB3. Còn EN với RB4, RW với RB5, RS với RB6. Em làm hoài mà ko được? làm theo ví dụ của anh Nam với các chân khác thì được khi lắp vào chân này ko được? Mong các anh giúp!
Thạch anh ngoài 10Mhz

Code:
#include <p30f4011.h>
#include <string.h> // Thu vien chuoi ki tu chuoi ki tu
#include <stdio.h>
#include <libpic30.h>


//------------------------------------ConFig cho DsPic-------------------
	_FOSC(CSW_FSCM_OFF & XT_PLL8);
	_FWDT(WDT_OFF);
	_FBORPOR(PBOR_ON & BORV_20 & PWRT_64 & MCLR_EN);
	_FGS(CODE_PROT_OFF);
	//_FOSC(CSW_FSCM_OFF & FRC_PLL8);
	//	_FWDT(WDT_OFF);
	//	_FBORPOR(PBOR_OFF & MCLR_EN & PWMxL_ACT_HI & PWMxH_ACT_HI);
	//	_FGS(CODE_PROT_OFF);
//-----------------------------------------------------------------------
#define ms_count 125
#define EN 			LATBbits.LATB4
#define EN_tris 	TRISBbits.TRISB4
#define RW			LATBbits.LATB5
#define RW_tris		TRISBbits.TRISB5
#define RS			LATBbits.LATB6
#define RS_tris		TRISBbits.TRISB6

#define LCD_data 	LATB
#define LCD_tris	TRISB

#define LCD_clear		0x01
#define LCD_home		0x02 //tro ve dau dong
#define LCD_normal		0x06 // Che do nhap du lieu binh thuong
#define LCD_normal_s	0x07 // che do nhap du lieu va dich man hinh
#define LCD_off			0x08
#define LCD_on			0x0C
#define LCD_on_blink	0x0F // bat man hinh va con tro nhap nhay
#define LCD_chedo		0x28 // che do man hinh 2 dong giao tiep 4 bit
#define LCD_homeL1		0x80 // ve dau dong 1
#define LCD_homeL2		0xC0 // Ve dau dong 2

unsigned char time_out;
void Init_Port(void);
void Init_TMR1(void);
void Delay_ms(unsigned int n);
void LCD_cmd(unsigned char cmd);
void LCD_export(unsigned char export);
void LCD_position(char x , char y);
void LCD_WriteString(const char *str);

int main()
	{
		Init_TMR1();
		Init_Port();		
		Init_LCD();
		LATFbits.LATF1=1;
		TRISFbits.TRISF1=0;

	while(1)
		{
			LCD_Position(1,1);	
			LCD_WriteString("Pic");
			Delay_ms(1);
		//	LCD_Position(2,4);
			//LCD_WriteString("Welcome!");
		//	Delay_ms(1);
LATFbits.LATF1=0;
__delay32(900000);
LATFbits.LATF1=1;
__delay32(900000);
			}
}

void Init_TMR1(void)
	{
		TMR1=0; // xoa dem trong timer
		PR1 = ms_count;
		_T1IF = 0;
		T1CON = 0x0020; // 1:64
	    _T1IE=1; // cho phep ngat timer
	}  
void Init_Port(void)
	{
		LCD_data &= 0xFFF0;
		LCD_tris = 0xFFF0; // Chan du lieu LCD la ngo ra
		EN = 0;
		EN_tris = 0;	
		RW = 0;
		RW_tris = 0;
		RS = 0;
	    RS_tris = 0;
	}
void Delay_ms(unsigned int n)
	{
	__delay32(1000*n);
//	PR1=n*ms_count;
		//time_out=0;
		//T1CONbits.TON=1; // bat timer 1
		//while(time_out==0);
		//T1CONbits.TON=0;
		//TMR1 = 0;
	}
void Init_LCD(void)
	{
		LCD_cmd(LCD_chedo);
		Delay_ms(1);
		LCD_cmd(LCD_off);
		Delay_ms(1);
		LCD_cmd(LCD_normal);
		Delay_ms(1);
		LCD_cmd(LCD_on_blink);
		Delay_ms(1);
		LCD_cmd(LCD_clear);
		Delay_ms(1);
	}
void LCD_cmd(unsigned char cmd)
	{
		unsigned temp1,i;
		RW = 0;
		RS=0;
		temp1 = LCD_data & 0xFFF0;
		LCD_data = temp1|(cmd>>4); // Xuat 4 bit cao
		EN = 1;
		for(i=0;i<2;i++);
		EN=0;
		temp1 = LCD_data & 0xFFF0;
		LCD_data = temp1|(cmd & 0x0F);
		EN = 1;
		for(i=0;i<2;i++);
		EN = 0;
	}
void LCD_export(unsigned char export)
	{
		unsigned temp2,i1;
		RW=0;
		RS=1;
		temp2 = LCD_data & 0xFFF0;
		LCD_data = temp2|(export>>4); // Xuat 4 bit cao
		EN = 1;
		for(i1=0;i1<2;i1++);
		EN=0;
		temp2 = LCD_data & 0xFFF0;
		LCD_data = temp2|(export&0x0F);
		EN = 1;
		for(i1=0;i1<2;i1++);
		EN = 0;
	}
void _ISR _T1Interrupt(void)
	{
		_T1IF = 0 ; // xoa co ngat
		time_out = 1;
	}
void LCD_Position(char x, char y)
	{
				if(x==1)
			{
				LCD_cmd(LCD_homeL1+y-1);
				Delay_ms(10);
			}
		else
			{
				LCD_cmd(LCD_homeL2+y-1);
				Delay_ms(10);
			}
	return;
	}
void LCD_WriteString(const char *str)
{

	char ps;
	ps = *str;		
	while(ps>0)		
	{
		str++;			
		if (ps==0) break;
		Delay_ms(1);
		LCD_export(ps);		
    	ps = *str;		
	}
}

thay đổi nội dung bởi: namqn, 25-02-2010 lúc 10:12 PM. Lý do: định dạng code
hang1988 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 06:34 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam