Cám ơn các bạn nhiều,mình đã biết sai rồi.Nhưng khi mô phỏng bằng Proteuss thì không như ý muốn,LCD cứ lặng thinh.Đây là mạch mô phỏng

code:#include <16F877A.h>
#include <DEFS_16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#define RS RD0
#define RW RD1
#define E RD2
#define LCD PORTC
/*Ham yeu cau goi lenh dieu khien LCD*/
void comnwrt(void)
{
RS = 0;
RW = 0;
E = 1;
E = 0;
delay_ms(1);
}
/*Ham yeu cau goi du lieu hien thi len LCD*/
void datawrt(void)
{
RS = 1;
RW = 0;
E = 1;
E = 0;
delay_ms(1);
}
#int_RB
void ngat_RB(void)
{
if(RBIE && RBIF)
{
if (RB4==0)
{
while(RB5==1)
{
LCD = 0x83;
comnwrt();
LCD = 'X';
datawrt();
}
}
if (RB5==0)
{
while(RB4==1)
{
LCD = 0xC3;
comnwrt();
LCD = 'K';
datawrt();
}
}
}
}
void main(void)
{
set_tris_b(0b00110000);
set_tris_c(0);
set_tris_d(0);
LCD = 0x38; // Hai hang, ma tran dot 5*7, 8 bit interface
comnwrt();
LCD = 0x0C; // Bat hien thi, tat con tro
comnwrt();
while(true)
{
}
}
Mình làm mạch này chủ yếu để hiểu cơ bản và tiếp tục làm phần kết hợp keypadphone và LCD ,mạch nhu cầu như sau

Mình cần :nhấn phím trên keypad thì LCD sẽ hiển thị trên LCD và khi nhấn button thì nó xóa một ký tự hiển thị .Mình có tham khảo source code trong CCS nhưng chả biết dùng như thế nào,đây là code ứng dụng:
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#include <lcd.c>
#include <kbd.c>
void main() {
char k;
lcd_init();
kbd_init();
lcd_putc("\fReady...\n");
while (TRUE) {
k=kbd_getc();
if(k!=0)
if(k=='*')
lcd_putc('\f');
else
lcd_putc(k);
}
}