Em mới học về PÍC6F877A và LCD 16x2. Hôm nay ngồi làm thử về bài tập hiển thị nút bấm trên LCD 16x2. Ví dụ có 8 nút bấm thì ứng với mỗi nút LCD sẽ hiển thị ra lần lượt 1,2,3,4,...Nhưng khi em code và mô phỏng thử thì không hiểu sao khi bấm thì nó hiện số 1 nhưng khi thả nút ra thì nó lại mất số 1 đi. Ai giúp em sửa chỗ này vs ạ. Đoạn code của e đây, ở đây em chưa làm hết 8 nút mà chỉ mới có 1 nút để thử thôi.
#include <def_16f877a.h>
#fuses PUT, NOWDT, NOPROTECT, NOLVP, HS
#use delay(clock = 20000000)
#use fast_io(c)
#define rs RB0
#define rw RB1
#define e RB2
#define dk_lcd trisb
#define data portc
#define dk_data trisc
void comwrt()
{
rs = 0;
rw = 0;
e = 1;
e = 0;
delay_ms(1);
}
void datawrt()
{
rs = 1;
rw = 0;
e = 1;
e = 0;
delay_ms(1);
}
void int_port()
{
dk_lcd = 0;
dk_data = 0;
}
void int_lcd()
{
data = 0x01;
comwrt();
data = 0x06;
comwrt();
data = 0x38;
comwrt();
data = 0x0c;
comwrt();
}
void button()
{
data = 0x80;
comwrt();
if(input(PIN_D0) == 0)
{
delay_ms(10);
if(input(PIN_D0) == 0)
{
data = 0x31; //Hien thi so 1
datawrt();
delay_ms(100);
}
while(input(PIN_D0) == 0);
}
}
void main()
{
while(1)
{
int_port();
int_lcd();
button();
}
}
#include <def_16f877a.h>
#fuses PUT, NOWDT, NOPROTECT, NOLVP, HS
#use delay(clock = 20000000)
#use fast_io(c)
#define rs RB0
#define rw RB1
#define e RB2
#define dk_lcd trisb
#define data portc
#define dk_data trisc
void comwrt()
{
rs = 0;
rw = 0;
e = 1;
e = 0;
delay_ms(1);
}
void datawrt()
{
rs = 1;
rw = 0;
e = 1;
e = 0;
delay_ms(1);
}
void int_port()
{
dk_lcd = 0;
dk_data = 0;
}
void int_lcd()
{
data = 0x01;
comwrt();
data = 0x06;
comwrt();
data = 0x38;
comwrt();
data = 0x0c;
comwrt();
}
void button()
{
data = 0x80;
comwrt();
if(input(PIN_D0) == 0)
{
delay_ms(10);
if(input(PIN_D0) == 0)
{
data = 0x31; //Hien thi so 1
datawrt();
delay_ms(100);
}
while(input(PIN_D0) == 0);
}
}
void main()
{
while(1)
{
int_port();
int_lcd();
button();
}
}
Comment