Kaskus

Tech

jidatseksiAvatar border
TS
jidatseksi
Mau tanya maksud dari program menangkap data dari LCD oleh mikro
Help me gan!!! Ane mau nanya maksud dari program yang ada dibawah ini gimana ia? mohon bantuannya gan

#include <io.h>
#include <delay.h>
#include "USART.h"
#include "int0.h"
#include "fifo.h"
#include "port.h"

#define ENABLE4BIT_P C
#define ENABLE4BIT_B 1
#define ENABLE4BIT_init() as_in_pullup(ENABLE4BIT)
#define ENABLE4BIT_is_active() !pin_input_is_set(ENABLE4BIT)

#define CAPTURE_PORT B
#define CAPTURE_init() { DDRB = 0x00; \
PORTB = 0xff; }
#define RS_P D
#define RS_B 4
#define RS_init() as_in_pullup(RS)
#define ir_is_select() !pin_input_is_set(RS)
#define RW_P D
#define RW_B 3
#define RW_init() as_in_pullup(RW)
#define is_write() !pin_input_is_set(RW)

void int0_fun();

void main(){
unsigned char data = 0;
char message[] = "\n\r#### LCD capture (c) 2013 ####\n\r";
char *p = message;

ENABLE4BIT_init(); //init pin pemilih mode 4bit/8bit
RS_init();
RW_init();
CAPTURE_init(); //init port capture
USART_init(); //inisialisasi serial UART


while(*p)
fifo_put(*p++);

delay_ms(1000);

int0_init(int0_fun); //inisialisasi interupsi eksternal 0

while(1){
if(fifo_get(&data)) //baca data
USART_putc(data); //kirim ke komputer lewat UART
}
}

void int0_fun(){
static char high_nible = 1; //penanda apakah nible atas
static char result = 0; //berisi hasil pembacaan 8 bit
static char new_char = 0; //penanda karakter baru

char data = pin(CAPTURE_PORT); //capture data

if(is_write()){
if(ENABLE4BIT_is_active()){
if(high_nible){ //jika nible atas
result = data & 0xf0; //simpan nible atas
high_nible = 0;
}
else{
result |= (data>>4); //simpan nible bawah
high_nible=1;
}
}
else{
result = data;
high_nible = 1;
}
//jika satu byte data sudah terbaca
if(high_nible){
//jika data berupa instruksi
if(ir_is_select()){
//dan instruksi berupa lcd_goto maka ubah menjadi ganti baris
if((result>=0x80 && result<=0x8f) || (result>=0xc0 && result<=0xcf)){
fifo_put('\n'); //simpan ke buffer
fifo_put('\r');
}
//dan instruksi berupa ubah alamat CGRAM
else if((result>=0x40 && result<=0x47)){
new_char = 1;
fifo_put('0');
fifo_put('x');
}
}
//jika data bukan berupa instruksi
else
//jika data berupa pattern untuk karakter baru
if(new_char){
char ascii[] = "0123456789ABCDEF";
fifo_put(ascii[result>>4]);
fifo_put(ascii[result & 0x0f]);
fifo_put(' ');
new_char = 0;
}
else{
//jika data adalah kode karakter baru
if(result<8)
result += 48; //ubah menjadi ascii
fifo_put(result); //simpan hasil pembacaan (mode 4bit) ke buffer
}
}
}

}
0
807
0
GuestAvatar border
Komentar yang asik ya
GuestAvatar border
Komentar yang asik ya
Komunitas Pilihan