รบกวนพี่ๆดูโค้ดโปรแกรมให้หน่อยครับว่าทามไมพอเอามาต่อจิงแล้วจอมันไม่แสดงผล ตอนนี้ผมต่อเฉพาะจออะครับส่
LSVคลังสมองออนไลน์ "ปีที่21"
เมษายน 20, 2024, 06:02:10 AM *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
 
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: รบกวนพี่ๆดูโค้ดโปรแกรมให้หน่อยครับว่าทามไมพอเอามาต่อจิงแล้วจอมันไม่แสดงผล ตอนนี้ผมต่อเฉพาะจออะครับส่  (อ่าน 7030 ครั้ง)
kumnan
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 5


อีเมล์
« เมื่อ: เมษายน 20, 2012, 02:27:59 AM »

#include <16F887.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES EC_IO                    //External clock
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPD                    //No EE protection
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOIESO                   //Internal External Switch Over mode disabled
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOWRT                    //Program memory not write protected
#FUSES BORV40                   //Brownout reset at 4.0V

#use delay(clock=20000000)

// 74145 PIN
#define SCAN_A    PIN_D0
#define SCAN_B    PIN_D1
#define SCAN_C    PIN_D2
#define SCAN_D    PIN_D3
// LCD PIN
#define LD1       PIN_A0
#define LD2       PIN_A1
#define LD3       PIN_A2
#define LD4       PIN_A3
#define EN        PIN_A4
#define RS        PIN_A5
// KEYPAD PIN
#define COL1      PIN_B1
#define COL2      PIN_B2
#define COL3      PIN_B3
#define ROW1      PIN_B4
#define ROW2      PIN_B5
#define ROW3      PIN_B6
#define ROW4      PIN_B7
// SERVO MOTOR PIN
#define SERVO     PIN_D4

#define SERVO2     PIN_D5

#include "LCD4.c"
#include "key.c"

unsigned int16 count_sensor;
unsigned int16 count_set1;
unsigned int16 count_set2;

unsigned int16 count_7seg1;
unsigned int16 count_7seg2;

unsigned int8 BUF7SEG1[5];
unsigned int8 BUF7SEG2[5];

unsigned int8 BUF_MENU1[5];
unsigned int8 BUF_MENU2[5];

//--------------------0----1----2----3----4----5----6----7----8----9---------C---------_----P---- ----
unsigned int8 BUFHEX [16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x01,0x39,0x08,0x40,0x73,0x00};  // HEX CODE 7 SEGMENT


/************************************************************/
void put_data_seg (unsigned  int16 data) // Êè¢éÍÁÙ, 7SEG ¤ÃÑéÅÐ 1 byte
{     
   output_c(data);
}
/************************************************************/
void clear_scan (void)
{
   output_high(SCAN_A);             // à¤ÃÕ ºÔµ áÊ¡¹
   output_high(SCAN_B);
   output_high(SCAN_C);
   output_high(SCAN_D);
}
/************************************************************/
void show_7seg (unsigned int8 digit1,digit2,digit3,digit4,digit5,digit6,digit7,digit8)
{
   unsigned int16 i;
//
   clear_scan();   
   put_data_seg (BUFHEX [ digit1 & 0x0f ] );      //Êè data 8 bit ËÅÑ¡·Õè 1
   output_low(SCAN_A);                            // áÊ¡¹ ËÅÑ¡·Õè 1
   output_low(SCAN_B);
   output_low(SCAN_C);
   output_low(SCAN_D);
   i=500; while(i--);                               // ˹èÇàÇÅÒáÊ´¼Å 
// 
   clear_scan();
   put_data_seg ( BUFHEX [ digit2 & 0x0f] );      //Êè data 8 bit ËÅÑ¡·Õè 2
   output_high(SCAN_A);                           // áÊ¡¹ ËÅÑ¡·Õè 2
   output_low(SCAN_B);
   output_low(SCAN_C);
   output_low(SCAN_D);
   i=500; while(i--);                                 // ˹èÇàÇÅÒáÊ´¼Å   
// 
   clear_scan();
   put_data_seg ( BUFHEX [ digit3 & 0x0f] );       //Êè data 8 bit ËÅÑ¡·Õè 3
   output_low(SCAN_A);                             // áÊ¡¹ ËÅÑ¡·Õè 3
   output_high(SCAN_B);
   output_low(SCAN_C);
   output_low(SCAN_D);
   i=500; while(i--);                                // ˹èÇàÇÅÒáÊ´¼Å   
// 
   clear_scan();
   put_data_seg ( BUFHEX [ digit4 & 0x0f] );      //Êè data 8 bit ËÅÑ¡·Õè 4
   output_high(SCAN_A);                           // áÊ¡¹ ËÅÑ¡·Õè 4
   output_high(SCAN_B);
   output_low(SCAN_C);
   output_low(SCAN_D);
   i=500; while(i--);                               // ˹èÇàÇÅÒáÊ´¼Å     
// 
   clear_scan();
   put_data_seg ( BUFHEX [ digit5 & 0x0f] );      //Êè data 8 bit ËÅÑ¡·Õè 5
   output_low(SCAN_A);                            // áÊ¡¹ ËÅÑ¡·Õè 5
   output_low(SCAN_B);
   output_high(SCAN_C);
   output_low(SCAN_D);
   i=500; while(i--);                                // ˹èÇàÇÅÒáÊ´¼Å   
// 
   clear_scan();
   put_data_seg ( BUFHEX [ digit6 & 0x0f] );      //Êè data 8 bit ËÅÑ¡·Õè 6
   output_high(SCAN_A);                           // áÊ¡¹ ËÅÑ¡·Õè 6
   output_low(SCAN_B);
   output_high(SCAN_C);
   output_low(SCAN_D);
   i=500; while(i--);                               // ˹èÇàÇÅÒáÊ´¼Å   
// 
   clear_scan();
   put_data_seg ( BUFHEX [ digit7 & 0x0f] );      //Êè data 8 bit ËÅÑ¡·Õè 7
   output_low(SCAN_A);                           // áÊ¡¹ ËÅÑ¡·Õè 7
   output_high(SCAN_B);
   output_high(SCAN_C);
   output_low(SCAN_D);
   i=500; while(i--);                                // ˹èÇàÇÅÒáÊ´¼Å   
// 
   clear_scan();
   put_data_seg ( BUFHEX [ digit8 & 0x0f] );      //Êè data 8 bit ËÅÑ¡·Õè 8
   output_high(SCAN_A);                           // áÊ¡¹ ËÅÑ¡·Õè 8
   output_high(SCAN_B);
   output_high(SCAN_C);
   output_low(SCAN_D);
   i=500; while(i--);                                // ˹èÇàÇÅÒáÊ´¼Å 
   clear_scan();
}
/************************************************************/
void servo_0 (int8 i)
{
   if(i==1)
   {
      output_high(SERVO);
      delay_us(2400);
      output_low(SERVO);
      delay_us(1760); 
   }
   if(i==2)
   {
      output_high(SERVO);
      delay_us(1499);
      output_low(SERVO);
      delay_us(1760); 
   }     
   if(i==3)
   {
      output_high(SERVO);
      delay_us(900);
      output_low(SERVO);
      delay_us(1790);     
   }     
}
/************************************************************/
void menu2 (void)
{
   unsigned int8 a,y; 
   unsigned int16 i;

   lcd_xy(2,1); printf(putl,"CONTAINER =0000");   
 
   a = 0;
   y = 12;
   
   BUF_MENU2[0] = '0';
   BUF_MENU2[1] = '0';
   BUF_MENU2[2] = '0';
   BUF_MENU2[3] = '0';
 
   while(true)
   {
      a = key();
      if(a==0);
      else if(a=='*'){
         lcd_xy(2,y); putl(BUF_MENU2[y-12]);
         if(y==12); else y--;
         i=1;
      }
      else if(a=='#')
      {
         lcd_xy(2,y); putl(BUF_MENU2[y-12]);
         count_set2  = (BUF_MENU2[0] & 0x0f) * 1000; 
         count_set2 += (BUF_MENU2[1] & 0x0f) * 100;
         count_set2 += (BUF_MENU2[2] & 0x0f) * 10;
         count_set2 += (BUF_MENU2[3] & 0x0f) * 1;
         delay_ms(500); return;
      }
      else
      {
         BUF_MENU2[y-12] = a;
         lcd_xy(2,y); putl(BUF_MENU2[y-12]);       
         if(y==15); else y++;
         i=1;
      }
//           
     if(i==1){lcd_xy(2,y); putl(BUF_MENU2[y-12]); }
     else if(i==600){ lcd_xy(2,y); putl('_'); }
     else if(i==1200) i=0;
     i++; delay_us(200);
   }
}
/************************************************************/
void menu1 (void)
{
   unsigned int8 a,y; 
   unsigned int16 i;
   lcd_clear();
   lcd_xy(1,1); printf(putl,"ENTER PILL=0000"); 
 
   a = 0;
   y = 12;
   BUF7SEG1[0]  = 0;
   BUF7SEG1[1]  = 0;
   BUF7SEG1[2]  = 0;
   BUF7SEG1[3]  = 0;
   BUF7SEG2[0]  = 0;
   BUF7SEG2[1]  = 0;
   BUF7SEG2[2]  = 0;
   BUF7SEG2[3]  = 0;
   
   BUF_MENU1[0] = '0';
   BUF_MENU1[1] = '0';
   BUF_MENU1[2] = '0';
   BUF_MENU1[3] = '0';
 
   while(true)
   {
      a = key();
      if(a==0);
      else if(a=='*'){
         lcd_xy(1,y); putl(BUF_MENU1[y-12]);
         if(y==12); else y--;
         i=1;
      }
      else if(a=='#')
      {
         lcd_xy(1,y); putl(BUF_MENU1[y-12]);
         count_set1  = (BUF_MENU1[0] & 0x0f) * 1000; 
         count_set1 += (BUF_MENU1[1] & 0x0f) * 100;
         count_set1 += (BUF_MENU1[2] & 0x0f) * 10;
         count_set1 += (BUF_MENU1[3] & 0x0f) * 1;
         delay_ms(500); return;
      }
      else
      {
         BUF_MENU1[y-12] = a;
         lcd_xy(1,y); putl(BUF_MENU1[y-12]);       
         if(y==15); else y++;
         i=1;
      }
//           
     if(i==1){lcd_xy(1,y); putl(BUF_MENU1[y-12]); }
     else if(i==600){ lcd_xy(1,y); putl('_'); }
     else if(i==1200) i=0;
     i++; delay_us(200);
   }
}
/************************************************************/
void start_count (void)
{
   unsigned int8 s,a;
   
   count_sensor = 0;
   count_7seg1  = 0;
   count_7seg2  = 0;
   BUF7SEG1[0]  = 0;
   BUF7SEG1[1]  = 0;
   BUF7SEG1[2]  = 0;
   BUF7SEG1[3]  = 0;
   BUF7SEG2[0]  = 0;
   BUF7SEG2[1]  = 0;
   BUF7SEG2[2]  = 0;
   BUF7SEG2[3]  = 0;

   s = 1;
   
   while(true)
   {
      if(count_7seg1 != count_sensor)
      {
         if(count_sensor == count_set1)
         {
            count_sensor = 0;
            count_7seg2++;
            if(s==1) s = 3;
            else     s = 1;
         }
         count_7seg1 = count_sensor;
         sprintf(BUF7SEG1,"%04ld",count_7seg1); 
         sprintf(BUF7SEG2,"%04ld",count_7seg2);
         

         if(count_7seg2 == count_set2)
         {
            while(true)
            {
               a = key();
               if(a=='#')return;
               servo_0(2);
            }
         }
      }
      servo_0(s);
   }
}
/************************************************************/
#int_EXT
void  EXT_isr(void)
{
   count_sensor ++;
}
/************************************************************/
#INT_TIMER0
void isr_timer0()
{
   show_7seg (BUF7SEG1[0],BUF7SEG1[1],BUF7SEG1[2],BUF7SEG1[3],
              BUF7SEG2[0],BUF7SEG2[1],BUF7SEG2[2],BUF7SEG2[3]);
}
/************************************************************/
void main (void)
{

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   set_timer0(207);
     
   enable_interrupts(int_timer0);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);

   key_start();
   lcd_init();
   lcd_xy(1,1);
   printf(putl," START");
   delay_ms(500);
   
   count_sensor = 0;
 
   while(true)
   {
      menu1();
      menu2();
      start_count();
   }
}


บันทึกการเข้า

kumnan
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 5


อีเมล์
« ตอบ #1 เมื่อ: เมษายน 20, 2012, 02:43:18 AM »

อันนี้เป็นตัวที่จำลองกับproteus ซึ่งก็ทามงานได้ปกติครับ
บันทึกการเข้า
kumnan
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 5


อีเมล์
« ตอบ #2 เมื่อ: เมษายน 20, 2012, 02:45:24 AM »

ตอนที่ผมต่อจอมันจะมีแต่ไฟเเบ็คไลน์ติดอะครับ แต่มันไม่แสดงข้อความอะไรเลยครับรบกวนพี่ๆๆช่วยดูให้ผมหน่อยครับ

ขอบคุณครับ
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #3 เมื่อ: เมษายน 20, 2012, 05:01:51 PM »

ทดสอบโปรแกรมแค่จอ lcd ก่อน มีปัญหากันเยอะ เป็นไปได้เขียน library เองดีที่สุด
บันทึกการเข้า
kumnan
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 5


อีเมล์
« ตอบ #4 เมื่อ: เมษายน 20, 2012, 09:05:43 PM »

ตัวนี้เป็น  liberty ของจออะครับ พี่ช่วยดูให้หน่อยนะครับ ว่ามีอะไรผิดไหมแต่ทำให้ proteus ก็ใช้งานได้ปกติ เลยงง มากครับ.....

//LCD.c
/***************************************************/
void enable_lcd(int t){   //lcd  enable
   int i;
   output_high(EN);
   for(i=0;i<t;i++)   i=i;
    output_low(EN);
   for(i=0;i<t;i++)   i=i;
}
/***************************************************/
void send_bit (unsigned char a){
   unsigned char b;

   b = a & 0x01;
   if(b) output_high(LD1);
   else  output_low(LD1);

   b = a & 0x02;
   if(b) output_high(LD2);
   else  output_low(LD2);

   b = a & 0x04;
   if(b) output_high(LD3);
   else  output_low(LD3);

   b = a & 0x08;
   if(b) output_high(LD4);
   else  output_low(LD4);


}
/***************************************************/
void lcd_command(unsigned char command){   //lcd  command
   send_bit (command>>4);
   enable_lcd(200);
   send_bit (command);
   enable_lcd(200);
}
/***************************************************/
void lcd_clear(void){ //lcd clear
   output_low(RS);

   send_bit (0);
   enable_lcd(200);
   send_bit (1);
   enable_lcd(200);

   output_high(RS);
}
/**************************************************/
void lcd_xy(unsigned char x,y){ //lcd x-y
   unsigned char row;
   if(x==1) row = 0x80;
   else if(x==2) row = 0xc0;
   else return;
   if(y==0 || y > 20) return;
   y = y -1;
   row = row+y;
   output_low(RS);

   send_bit (row>>4);
   enable_lcd(200);
   send_bit (row);
   enable_lcd(200);

   output_high(RS);
}
/**************************************************/
void putl(unsigned char data){  //lcd send one byte
   send_bit (data>>4);
   enable_lcd(70);
   send_bit (data);
   enable_lcd(70);
}
/**************************************************/
void lcd_init(void){ //lcd initialization
   output_low(RS);
      lcd_command(0x33);
      lcd_command(0x32);
      lcd_command(0x28);
      lcd_command(0x0c);
      lcd_command(0x06);
      lcd_command(0x01);
   output_high(RS);
}












บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #5 เมื่อ: เมษายน 20, 2012, 10:08:11 PM »

ลองเทียบกันอันนี้
โค๊ด:
/*
File name  :clcd.c
Program    :C-LCD 16x2 20x4 driver
Author     :Somlak Mangnimit
Date       :17/11/2011
*/

/*
--------------------
Library Call
--------------------
lcd_init();
lcd_write_command();
lcd_write_data();
lcd_print_string();
lcd_gotoxy();
*/

#ifndef _CLCD_C_
#define _CLCD_C_

#define LCD_RS  PORTCbits.RC0
#define LCD_RW  PORTCbits.RC1
#define LCD_E   PORTCbits.RC2

#define LCD_DB4 PORTBbits.RB0
#define LCD_DB5 PORTBbits.RB1
#define LCD_DB6 PORTBbits.RB2
#define LCD_DB7 PORTBbits.RB3
#define LCD_DDR TRISBbits.TRISB3

#define LCD_DB7_INPUT  LCD_DDR = 1;
#define LCD_DB7_OUTPUT LCD_DDR = 0;

/* delay msec */
void lcd_delay_msec(unsigned int ms){
    while(--ms!=0){__delay_ms(1);}
}

/* delay usec */
void lcd_delay_usec(unsigned int us){
    while(--us!=0){__delay_us(1);}
}

/* move data to lcd port */
void lcd_mov_dat(unsigned char d){
LCD_DB4 = (d&0x10)?1:0;
LCD_DB5 = (d&0x20)?1:0;
LCD_DB6 = (d&0x40)?1:0;
LCD_DB7 = (d&0x80)?1:0;
}

/* busy flag check */
void lcd_busy(void){
unsigned char busy;
lcd_mov_dat(0x00);
LCD_DB7_INPUT;
do{
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_E = 1;
    busy = LCD_DB7;
    LCD_E = 0;
    lcd_delay_usec(1);
    LCD_E = 1;
    lcd_delay_usec(1);
    LCD_E = 0;
}while(busy&0x01);
LCD_RW = 0;
LCD_DB7_OUTPUT;
}

/* internal reset write command */
void lcd_reset_command(unsigned char d){
lcd_busy();
LCD_RW = 0;
LCD_RS = 0;
LCD_E = 1;
lcd_mov_dat(d);
lcd_delay_usec(1); // hold data
LCD_E = 0;
}

/* write data or command */
void lcd_write_dorc(unsigned char dorc){
LCD_E = 1;
lcd_mov_dat(dorc);
lcd_delay_usec(1); // hold data
LCD_E = 0;
dorc <<= 4;
LCD_E = 1;
lcd_mov_dat(dorc);
lcd_delay_usec(1);  // hold data
LCD_E = 0;
}

/* write command */
void lcd_write_command(unsigned char c){
lcd_busy();
LCD_RW = 0;
LCD_RS = 0;
lcd_write_dorc(c);
}

/* write data */
void lcd_write_data(unsigned char d){
lcd_busy();
LCD_RW = 0;
LCD_RS = 1;
lcd_write_dorc(d);
}

/* write string */
void lcd_print_string(const unsigned char *d){
while(*d){lcd_write_data(*d++);}
}

/* write position */
void lcd_gotoxy(unsigned char x,unsigned char y){
if(x==0)x=0x80;
if(x==1)x=0xc0;
if(x==2)x=0x94;
if(x==3)x=0xd4;
lcd_write_command(x+y);
}

/* lcd initialisation */
void lcd_init(void){
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 0;
lcd_mov_dat(0x00);
lcd_delay_msec(15);
lcd_reset_command(0x30);
lcd_delay_msec(5);
lcd_reset_command(0x30);
lcd_delay_msec(1);
lcd_reset_command(0x30);
lcd_reset_command(0x20); //4bit
lcd_write_command(0x28); //function set
lcd_write_command(0x08); //display off
lcd_write_command(0x01); //display clear
lcd_write_command(0x06); //entry mode set
lcd_write_command(0x0c); //display on
}

#endif
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน337
ออฟไลน์ ออฟไลน์

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #6 เมื่อ: พฤษภาคม 13, 2012, 06:28:58 PM »

เลือกใช้ osc ภายในหรือเปล่า ดูจากวงจรแล้วไม่ได้ต่อคริสตอล แม้ไม่ได้ต่อแต่โปรแกรม proteus ก็ยังซิมการทำงานได้ แต่วงจรจริงจะไม่ทำงาน
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป:  

Powered by MySQL Powered by PHP Powered by SMF 1.1 RC2 | SMF © 2001-2006, Lewis Media

lsv2555Please follow the new website at https://www.pohchae.com

Valid CSS!