Ðề tài: Sửa lỗi
View Single Post
Old 15-10-2008, 09:24 AM   #15
tungnh
Đệ tử 5 túi
 
Tham gia ngày: Sep 2007
Bài gửi: 94
:
Em thử vẫn vẫn cảnh báo như vậy anh ạ . Em thử chương trình khác nó cũng cảnh báo như vậy nhưng vẫn chạy, còn chương trình LCD thì nó vẫn không chịu hiển thị. Anh xem lại cho em chương trình LCD xem sao.
Code:
 
#include "p30f4012.h"

	_FOSC(CSW_FSCM_OFF & FRC_PLL4);		//Clock = 32 MHz
	_FWDT(WDT_OFF);
	_FBORPOR(MCLR_EN & PBOR_OFF & PWMxL_ACT_HI &  PWMxH_ACT_HI);
	_FGS(CODE_PROT_OFF);
             _FICD(ICS_NONE);

//------------------------------------------------------------------------------
//Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh)

#define	ms_count	125			//So dem tuong ung voi 1 ms, cho timer 1

#define	EN			LATB2			//Tin hieu Enable cho LCD, chan RB2               //
#define	RS			LATB1			//Tin hieu Reset cho LCD, chan RB1                //  
#define	D4			LATF2		//Cac tin hieu Data cho LCD, chan RE0..RE3 (D4..D7)	  //                                                            //     														  //		                                                         //
#define	LCD_TRISD4	TRISD4
#define	D5			LATF3
#define	LCD_TRISD5	TRISD5
#define	D6			LATE4
#define LCD_TRISD6	TRISD6
#define	D7			LATE5
#define LCD_TRISD7	TRISD7                                                       //																				  //	

#define	LCD_homeL1	0x80			//Ve dau dong 1
#define	LCD_homeL2	0xC0			//Ve dau dong 2

//Cac prototype cho cac chuong trinh con
void Init_PORTS(void);				//Khoi tao cac cong I/O
void Init_TMR1(void);				//Khoi tao Timer 1
void Delay_ms(unsigned int);		//Tao tre mot so ms
void Init_LCD(void);				//Khoi tao LCD
void LCD_cmd4(unsigned char);		//Xuat lenh ra LCD qua giao tiep 4-bit
void LCD_dat4(unsigned char);		//Xuat du lieu ra LCD qua giao tiep 4-bit

//Bang hang so trong ROM
const unsigned char __attribute__ ((space(psv), address (0x0400))) 
	//Chuoi ky tu se xuat ra LCD
	Chuoi1[]="Hello world!\0";		//Chuoi ky tu se duoc xuat ra LCD

//Cac bien toan cuc
unsigned char time_out, idx;

//------------------------------------------------------------------------------
//Chuong trinh chinh
int main(void) {
	Init_TMR1();				//Khoi tao cho TMR1
	Init_PORTS();				//Khoi tao cac cong I/O
	_PSV=1;
	PSVPAG = __builtin_psvpage(Chuoi1);
	idx = 0;
	Delay_ms(50);
	Init_LCD();
	Delay_ms(500);
	while (Chuoi1[idx]) {		//Xuat chuoi ra dong thu nhat cua LCD
		LCD_dat4(Chuoi1[idx++]);
		Delay_ms(1);
	};
	LCD_cmd4(LCD_homeL2);
	Delay_ms(1);
	idx = 0;
	while (Chuoi1[idx]) {		//Xuat chuoi ra dong thu hai cua LCD
		LCD_dat4(Chuoi1[idx++]);
		Delay_ms(1);
	};
	while (1) {			//Vong lap chinh
	};
}

//Chuong trinh con khoi tao Timer 1
//TMR1 duoc dung de dem so ms troi qua, o muc xung 8 Mips (fcy = 8 MHz)
//------------------------------------------------------------------------------
void Init_TMR1(void) {
	TMR1 = 0;			//Xoa so dem trong TMR1
	PR1 = ms_count;		//TMR1 tran moi ms
	_T1IF = 0;			//Xoa co ngat cua Timer 1
	T1CON = 0x0020;		//Dung fcy lam clock, prescale = 1:64, tat Timer 1
	_T1IE = 1;			//Cho phep ngat Timer 1
}

//Chuong trinh con khoi tao cac cong I/O, de noi voi LED
//------------------------------------------------------------------------------
void Init_PORTS(void) {
							LATFbits.D4 = 0;
							LATFbits.D5 = 0;
							LATEbits.D6 = 0;
							LATEbits.D7 = 0;
							_TRISF2 = 0;
							_TRISF3 = 0;	//Cac chan du lieu LCD la ngo ra
							_TRISE4 = 0;
							_TRISE5 = 0;
							//LATFbits.LCD_BL = 1;
							//_TRISF3 = 0;			//RF3 la ngo ra, noi vao back light LED
							LATBbits.EN = 0;
							_TRISB2 = 0;			//RE8 la ngo ra, noi vao Enable cua LCD
							//LATDbits.LCD_RW = 0;
							//_TRISD0 = 0;			//RD0 la ngo ra, noi vao R/W cua LCD
							LATBbits.RS = 0;
							_TRISB1 = 0;			//RD1 la ngo ra, noi vao Reset cua LCD
}

//Chuong trinh con delay bang timer 1, nhan 1 tham so la so ms can delay
//------------------------------------------------------------------------------
void Delay_ms(unsigned n) {
	PR1 = n*ms_count;			//Dat nguong tran vao PR1
	time_out = 0;				//Xoa co het thoi gian cho
	T1CONbits.TON = 1;			//Bat timer 1
	while (time_out == 0);		//Cho den khi het thoi gian cho
	T1CONbits.TON = 0;			//Tat timer 1
	TMR1 = 0;
}

//Chuong trinh con khoi tao module LCD
//------------------------------------------------------------------------------
void Init_LCD(void)
{
	Delay_ms(1);		// Delay 1 mS
	LCD_cmd4(0x32); 	// 4 bits interface
	LCD_cmd4(0x28); 	// Display 2 rows, font of sistem is 5x7
	LCD_cmd4(0x0e); 	// Display and blink the cursor
	LCD_cmd4(0x01); 	// Clear screen and return to the head of the first line
	LCD_cmd4(0x06); 	// Shift all display to the right
	Delay_ms(3);		// Delay 3 mS
}
void Write2Pins(unsigned char Nibber)
{
	LATEbits.D7 = (Nibber & 0x08)>>3;
	LATEbits.D6 = (Nibber & 0x04)>>2;
	LATFbits.D5 = (Nibber & 0x02)>>1;
 	LATFbits.D4 = (Nibber & 0x01);
}

//Chuong trinh con xuat lenh o che do 4 bit
//------------------------------------------------------------------------------
void LCD_dat4(unsigned char Data)
{
	unsigned char LowNibble,HighNibble;
	LowNibble 	= Data & 0x0f;
	HighNibble 	= (Data & 0xf0)>>4;

	Write2Pins(HighNibble);
	LATBbits.RS = 0;
	LATBbits.EN = 1;
	LATBbits.EN = 0;
	Write2Pins(LowNibble);
	LATBbits.EN = 1;
	LATBbits.EN = 0;

	Delay_ms(11);
}


//Chuong trinh con xuat du lieu o che do 4 bit
//------------------------------------------------------------------------------
void LCD_cmd4(unsigned char Str)
{
	unsigned char LowNibble,HighNibble;
	LowNibble 	= Str & 0x0f;
	HighNibble 	= (Str & 0xf0)>>4;

	Write2Pins(HighNibble);
	LATBbits.RS = 0;
	LATBbits.EN = 1;
	LATBbits.EN = 0;
	Write2Pins(LowNibble);
	LATBbits.EN = 1;
	LATBbits.EN = 0;

	Delay_ms(11);
}
//Chuong trinh xu ly ngat Timer 1
//------------------------------------------------------------------------------
void _ISR _T1Interrupt(void) {
	_T1IF = 0;			//Xoa co ngat
	time_out = 1;
}

thay đổi nội dung bởi: tungnh, 15-10-2008 lúc 09:52 AM.
tungnh vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn