Pages: [1]   Go Down
Print
Author Topic: ขอคำปรึกษาหน่อยครับ LCD ขึ้นแถบดำๆ  (Read 8927 times)
0 Members and 1 Guest are viewing this topic.
topshared
มาใหม่
*
Offline Offline

Posts: 6


Email
« on: March 04, 2013, 01:21:34 AM »

http://pic.free.in.th/id/adf9e476077f88a62d35af805e0714c0

พอดีผมต่อวงจรดันรูป ใช้ PIC 16F877A ต่อเข้ากับจอ LCD
แล้วทีนี้จอ LCD ผมแสดงผลออกมาเป็นแถบดำๆ เลยอยากได้คำแนะนำเรื่องโคเดหน่อยครับ ไม่รู้ว่าโค้ดผมผิดหรือเปล่า

Code:
#include <16F877A.h>
#include "Mce_lcd.c"

#fuses  HS,NOLVP,NOWDT,NOPROTECT
#use    delay (clock = 20000000)
#use    fast_io(D)

float McE;
int i;

void main(){
   
   set_tris_d(0B00000000);   
   
   lcd_init();
   delay_ms(1000);
   McE = 1234.432;
   i   = 234;
   
   while (TRUE){
      printf(lcd_putc,"\fMcE = %1.3f",McE);
      printf(lcd_putc,"\ni = %u",i);
      delay_ms(500);
   }
}
« Last Edit: March 04, 2013, 01:24:35 AM by topshared » Logged
topshared
มาใหม่
*
Offline Offline

Posts: 6


Email
« Reply #1 on: March 04, 2013, 01:23:41 AM »

Code:
#use delay (clock = 20000000)

struct lcd_pin_map {
         BOOLEAN rs;               
         BOOLEAN enable;       
         BOOLEAN rw;             
         BOOLEAN unused;           
         int     data : 4;       
  } lcd;

  #byte lcd   = 8   

  #define set_tris_lcd(x)   set_tris_d(x)

  #define lcd_type 2     
  #define lcd_line_two 0x40 

  byte const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0x0c, 1, 6};

 struct lcd_pin_map const LCD_WRITE = {0, 0};
 struct lcd_pin_map const LCD_READ = {0, 15};   

 void lcd_send_nibble( byte n ) {
 lcd.data = n;
 delay_cycles(1);
 lcd.enable = 1;

 delay_us(2);
 lcd.enable = 0;

 }

 void lcd_send_byte( byte address, byte n) {
 lcd.rs = 0;
 delay_us(500);
 lcd.rs = address;
 delay_cycles(1);

 lcd_send_nibble(n >> 4);
 lcd_send_nibble(n & 0x0f);
 }

 void lcd_gotoxy( byte x, byte y) {
 byte address;
 if(y != 1)
    address = lcd_line_two;
 else
    address = 0;
 address += x-1;
 lcd_send_byte(0,0x80|address);
 }

 void lcd_init() {
 byte i;
 set_tris_lcd(LCD_WRITE);
 set_tris_d(0B00000000);
 lcd.rs = 0;

 delay_ms(15);
 for (i=1; i<=3; ++i) {
     lcd_send_nibble(3);
     delay_ms(5);
 }
 lcd_send_nibble(2);
 for (i=0; i<=3; ++i)
     lcd_send_byte(0,LCD_INIT_STRING[i]);
 }

 void lcd_putc( char c ) {
    switch (c) {
       case '\f'   : lcd_send_byte(0, 1);
                     delay_ms(2);            break;
       case '\n'   : lcd_gotoxy(1,2);        break;
       case '\b'   : lcd_send_byte(0,0x10);  break;
       case '\p'   : lcd_gotoxy(9,2);        break;
       default     : lcd_send_byte(1,c);     break;
    }
 }
Logged
samarters
Jr. Member
**
Offline Offline

Posts: 31


Email
« Reply #2 on: March 04, 2013, 03:29:19 PM »

ลองใช้งาน LCD ในเว็บดูครับสามารถใช้งานได้ดี
http://thaimicrotron.com/Referrence/LCD/LCD-Module5.htm
Logged
MicroX
Global Moderator
Full Member
*****
Offline Offline

Posts: 103


Senior


Email
« Reply #3 on: March 04, 2013, 07:23:23 PM »

LCD แสดงผลออกมาเป็นแถบดำๆ ไม่ขาดไม่แหว่ง แสดงว่าสุขภาพ LCD ยังดีอยู่ครับ
ส่วนโค๊ดถ้าคุณเอามาจากหนังสือ ก็ไม่น่าจะผิดครับ ให้ลองตรวจเรื่องพอร์ตที่ใช้อีกที ว่าตรงหรือเปล่า
Logged
topshared
มาใหม่
*
Offline Offline

Posts: 6


Email
« Reply #4 on: March 05, 2013, 04:49:17 PM »

ตอนนี้ LCD ติดละครับ ^^ พอดีสายที่ต่อเข้า LCD มันขาดไป 2 เส้ยเลยทำให้ LCD มันขึ้นแถบดำๆ
ขอบคุณสำหรับคำแนะนำนะครับ
Logged
Pages: [1]   Go Up
Print
 
Jump to: