กรกฎาคม 19, 2019, 10:34:18 pm *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: สอบถามเกี่ยวกับการรับค่าจากอินพุต  (อ่าน 1905 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
siwatid999
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 11


| |
« เมื่อ: มิถุนายน 04, 2016, 05:45:52 pm »

รบกวนถามหน่อยครับ พอดี ผมต้องการให้การรับค่าจากอินพุท แล้วก็ การกดรหัสผ่าน ทำงานไปพร้อมกัน แต่ในโค๊ดมีปัญหาคือ เมื่อเข้าสู่ฟังชั่น if(on==0)  มันจะทำงานแค่รับค่าจากอินพุทอย่างเดียว กดรหัสผ่านไม่ได้ จากปัญหานี้ ผมขอคำแนะนำหน่อยครับ(โค๊ดส่วนนี้ผมคัดมาแต่ปัญหาที่เกิดเพื่อความง่ายในการดู) โปรเจคผมเหลืออีกนิดเดียวแล้ว ติดตรงนี้ (ผมจะทำให้มัน รอรับรหัสผ่านแล้วก็รอรับอินพุต ทำงานพร้อมๆกันเลยครับ)
ขอความกรุณาด้วยครับผม

Code: (c)
#include <16f877a.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#fuses HS,NOLVP,NOWDT,NOPROTECT
#use delay(clock=4000000)
#define lcd_data_port getenv("sfr:portd")
#define lcd_enable_pin pin_d0
#define lcd_rs_pin pin_d1
#define lcd_rw_pin pin_d2
#define use_portb_kbd true
#include <lcd.c>
#include <kbd4x4_1.c>
#use rs232(baud =9600, xmit = PIN_C6, rcv = PIN_C7,errors,stream=GSM,errors)
char i=0;
char CMTI[]={'C','M','T','I','\0'};
char C;
char var;
char buffer[80]={'C','M','T','I','\0'};
char kp;
char code1[5]={'1','2','3','4'};
char user1[5]={'1','2','3','4'};
char phone1[11],phone2[11];
char on=1;
int save=0,cnt;
int password=1;
int b=0;
int sw1;
int sw2;
int sw3;
int a,p;
int n=0;

void senser()
{
   output_high(PIN_C5);
   while(1)
   {
   sw1=input(PIN_C3);  
   if((sw1==0)&&(a==1))
   {                      
   printf("0831765562");
   delay_ms(100);
   putc(0x0D);  
   a=0;
   }
   else
   {
   a=1;
   delay_ms(200);
   }
   }
}
void pass()
{
kp =0;
save=0;
lcd_putc("\f");
lcd_gotoxy(1, 1);
lcd_putc("\fEnter  Code");
lcd_gotoxy(1, 2);
printf(lcd_putc,">");
while(true)
{
kp = kbd_getc();  
      if(kp!=0)                   // if key captured
      {  
         //printf(lcd_putc,"*");
         lcd_putc(kp);// print captured key to lcd          
         code1[save]=kp;
         phone2[save]=kp;
         save++;
               if(kp=='*')
               {
               if(cnt<3 && (strncmp(code1,user1,4)==0))
               {
               lcd_putc("\f");                      
               lcd_gotoxy(1, 1);
               lcd_putc("\f\nACCESS GRANTED");              
               delay_ms(500);              
               lcd_putc("\f");
               lcd_gotoxy(1, 1);            
               printf(lcd_putc,"Welcome");
               lcd_gotoxy(1, 2);              
               output_low(PIN_C5);
               save = 0;
               password=0;
               n=1;  
               on=1;
               output_low(PIN_C4);
               }
               if(password==0)
               {
               save=0;
               lcd_gotoxy(1, 1);
               lcd_putc("\f1.CHANG PASS");                                        
               lcd_gotoxy(1, 2);
               lcd_putc("\n2.CHANG PHONE");              
               delay_ms(500);
               }            
               else
               {  
               lcd_putc("\f\nLock PASSWORD");
               delay_ms(100);
               lcd_putc("\fEnter  Code");
               lcd_gotoxy(1, 2);
               printf(lcd_putc,">");              
               cnt++;            
               save=0;
               }  
               save=0;
               }              
               if(cnt>=3)
               {                
                  lcd_putc("\fLock PASSWORD");
               }
                              
                  if(password==0)
                  {
                  if(kp =='1')
                  {
                  save=0;
                  lcd_gotoxy(1, 1);
                  lcd_putc("\fEnter  Pass");
                  lcd_gotoxy(1, 2);
                  printf(lcd_putc,">");
                  b=1;
                  password=1;
                  }                                                                                                    
                  if(kp=='2')
                  {
                  save=0;
                  lcd_gotoxy(1, 1);
                  lcd_putc("\fEnter  Phone");
                  lcd_gotoxy(1, 2);
                  printf(lcd_putc,">");
                  b=2;
                  password=1;
                  }
                
                  if(kp=='A')
                  {
                  save=0;
                  lcd_gotoxy(1, 1);
                  lcd_putc("\fLock Home");                                                  
                  password=1;
                  on=0;              
                  output_low(PIN_C2);              
                  }                                
                  }
                   if(on==0)
                  {
                    output_high(PIN_C4);
                    senser();
                    on=2;
                    
                  }
      }
}
                
}

void main()
{
   ENABLE_INTERRUPTS(GLOBAL); // Enable Interrupts
   ENABLE_INTERRUPTS(INT_RDA); // Enable Serial Interrupts
   printf("A");
   delay_ms(100);
   printf("T");
   delay_ms(100);
   putc(0x0d);
   delay_ms(500);
   lcd_init();
   kbd_init();
   port_b_pullups(true);  
   while(1)
      {              
         pass();  
      }
}
                
บันทึกการเข้า
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« ตอบ #1 เมื่อ: มิถุนายน 07, 2016, 02:40:07 pm »

ฟังก์ชั่น senser() นั่น ทำงานเสร็จเมื่อไร่ครับ?
ใส่

Code: (c)
while(1)
{
}

ไว้ และไม่มี คำสั่งใดๆ ที่บอกว่า ให้หลุดจาก while(1)
บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
siwatid999
Newbie
*
ออฟไลน์ ออฟไลน์

กระทู้: 11


| |
« ตอบ #2 เมื่อ: มิถุนายน 07, 2016, 03:54:48 pm »

แก้ไข ได้แล้วครับ ขอบคุณครับผม
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: