- Beranda
- Komunitas
- Tech
- Programmer Forum
Mau tanya maksud dari program menangkap data dari LCD oleh mikro


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
}
}
}
}
#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


Komentar yang asik ya


Komentar yang asik ya
Komunitas Pilihan