các anh ơi giúp em đoạn code lcd này vơi. Em biên dich chạy ngon lành nhưng khi nạp vào mạch mô phỏng thì không chạy.
em cảm ơn!
#include"p24fj128ga010.h"
#define delay 250
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & FWDTEN_OFF)
_CONFIG2(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRIPLL)
/*************************************/
#define lcd_en LATBbits.RB13
#define lcd_rs LATBbits.RB14
#define lcd_rw LATBbits.RB15
#define lcd_db7 LATBbits.RB3
#define lcd_db6 LATBbits.RB2
#define lcd_db5 LATBbits.RB1
#define lcd_db4 LATBbits.RB0
#define lcd_tris TRISB
/************************************/
void T1_init();
void delay_ms(unsigned int time);
void lcd_config();
void lcd_write(unsigned char lenh);
void lcd_b(unsigned char data);
void lcd_putchar( char ch);
void lcd_putstring( char *st);
void lcd_port();
unsigned char flag=0,i=0;
void T1_init()
{
TMR1=0;
PR1=delay;
T1CON=0x8000;
_T1IF=0;
_T1IE=1;
}
void delay_ms(unsigned int time)
{
PR1=time*delay;
T1CONbits.TON=1;
flag=0;
while(flag==1);
T1CONbits.TON=0;
TMR1=0;
}
void lcd_b(unsigned char data)
{
_LATB14=1;
_LATB15=0;
//xuat 4 bit cao
_LATB3=(data>>7)&1;
_LATB2=(data>>6)&1;
_LATB1=(data>>5)&1;
_LATB0=(data>>4)&1;
//xuat 4 bit thap
_LATB3=(data>>3)&1;
_LATB2=(data>>2)&1;
_LATB1=(data>>1)&1;
_LATB0=(data)&1;
_LATB13=1;
for(i=0;i<2;i++)
_LATB13=0;
}
void lcd_write(unsigned char lenh )
{
_LATB14=0;
lcd_b(lenh);
delay_ms(10);
_LATB13=1;
for(i=0;i<2;i++)
_LATB13=0;
}
void lcd_putchar(char ch)
{
_LATB14=1;
_LATB15=0;
lcd_b(ch);
_LATB13=1;
for(i=0;i<2;i++)
_LATB13=0;
}
void lcd_putstring(char *st)
{
while(*st)
{
lcd_putchar(*st);
st++;
};
}
void lcd_config()
{
lcd_write(0x28);
delay_ms(1);
lcd_write(0x06);
delay_ms(1);
lcd_write(0x0C);
delay_ms(1);
lcd_write(0x01);
delay_ms(1);
lcd_write(0x02);
delay_ms(1);
lcd_write(0x08);
delay_ms(1);
lcd_write(0x0E);
delay_ms(1);
lcd_write(0x0F);
delay_ms(1);
lcd_write(0x80);
delay_ms(1);
lcd_write(0xC0);
delay_ms(1);
}
void lcd_port()
{
LATB=0;
lcd_tris=0X1FF0;
}
void _ISR_T1Interrupt(void)
{
_T1IF=0;
flag=1;
}
int main()
{
lcd_port();
delay_ms(10);
lcd_config();
delay_ms(50);
T1_init();
lcd_putstring("chu khanh");
delay_ms(10);
lcd_putstring("dt5-k55");
while(1);
}
em cảm ơn!
#include"p24fj128ga010.h"
#define delay 250
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & FWDTEN_OFF)
_CONFIG2(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMOD_HS & FNOSC_PRIPLL)
/*************************************/
#define lcd_en LATBbits.RB13
#define lcd_rs LATBbits.RB14
#define lcd_rw LATBbits.RB15
#define lcd_db7 LATBbits.RB3
#define lcd_db6 LATBbits.RB2
#define lcd_db5 LATBbits.RB1
#define lcd_db4 LATBbits.RB0
#define lcd_tris TRISB
/************************************/
void T1_init();
void delay_ms(unsigned int time);
void lcd_config();
void lcd_write(unsigned char lenh);
void lcd_b(unsigned char data);
void lcd_putchar( char ch);
void lcd_putstring( char *st);
void lcd_port();
unsigned char flag=0,i=0;
void T1_init()
{
TMR1=0;
PR1=delay;
T1CON=0x8000;
_T1IF=0;
_T1IE=1;
}
void delay_ms(unsigned int time)
{
PR1=time*delay;
T1CONbits.TON=1;
flag=0;
while(flag==1);
T1CONbits.TON=0;
TMR1=0;
}
void lcd_b(unsigned char data)
{
_LATB14=1;
_LATB15=0;
//xuat 4 bit cao
_LATB3=(data>>7)&1;
_LATB2=(data>>6)&1;
_LATB1=(data>>5)&1;
_LATB0=(data>>4)&1;
//xuat 4 bit thap
_LATB3=(data>>3)&1;
_LATB2=(data>>2)&1;
_LATB1=(data>>1)&1;
_LATB0=(data)&1;
_LATB13=1;
for(i=0;i<2;i++)
_LATB13=0;
}
void lcd_write(unsigned char lenh )
{
_LATB14=0;
lcd_b(lenh);
delay_ms(10);
_LATB13=1;
for(i=0;i<2;i++)
_LATB13=0;
}
void lcd_putchar(char ch)
{
_LATB14=1;
_LATB15=0;
lcd_b(ch);
_LATB13=1;
for(i=0;i<2;i++)
_LATB13=0;
}
void lcd_putstring(char *st)
{
while(*st)
{
lcd_putchar(*st);
st++;
};
}
void lcd_config()
{
lcd_write(0x28);
delay_ms(1);
lcd_write(0x06);
delay_ms(1);
lcd_write(0x0C);
delay_ms(1);
lcd_write(0x01);
delay_ms(1);
lcd_write(0x02);
delay_ms(1);
lcd_write(0x08);
delay_ms(1);
lcd_write(0x0E);
delay_ms(1);
lcd_write(0x0F);
delay_ms(1);
lcd_write(0x80);
delay_ms(1);
lcd_write(0xC0);
delay_ms(1);
}
void lcd_port()
{
LATB=0;
lcd_tris=0X1FF0;
}
void _ISR_T1Interrupt(void)
{
_T1IF=0;
flag=1;
}
int main()
{
lcd_port();
delay_ms(10);
lcd_config();
delay_ms(50);
T1_init();
lcd_putstring("chu khanh");
delay_ms(10);
lcd_putstring("dt5-k55");
while(1);
}
Comment