giúp code LCD
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);
}
|