ก็ใช่16F877A นี้่ทำโปรเจคอยู่ครับ จะทำโปรเจ็คเป็นสูตรคูณเด็กๆครับ โดยเริ่มต้นให้ 7Segment แสดงตัวเลข 0 ทุกหลัก เมื่

กระทู้คำถาม
ก็ใช่16F877A นี้่ทำโปรเจคอยู่ครับ จะทำโปรเจ็คเป็นสูตรคูณเด็กๆครับ

    โดยเริ่มต้นให้ 7Segment แสดงตัวเลข 0 ทุกหลัก เมื่อกดสวิทต์ตัวแรก 7segmentแสดงเป็น สูตรคูน เช่น 5*4 รอ การกดคำตอบ จาก คีแพด แล้วจึง แสดงเป็น5*5 แล้วรอการใส่คำตอบจากคีแพด ครับ
     แต่ผมมีปัญหาที่ว่า เมื่อ 7segmentแสดงตัวเลขแล้ว  แล้วจะเขียนโปรแกรมอย่างไร ให้รอการกดคีแพด เลข ได้ครับ เช่น เมื่อแสดงเลข 4*5 แล้ว ต้องกดคำตอบ คือ เลข2 กับ เลข 0 แล้วแสดง เป็น5*5 ต่อไปครับ ช่วยตรอจสอบโปรแกรมให้หน่อยครับ ผมลองหลายวิธีแล้วครับ ไม่ได้ครับ ไม่รู้จะปรึกษาใครแล้ว เพราะผมศึกษา ccs ภาษา Cเองครับ พอดีไม่มีเรียนภาษา Cครับ ช่วยหน่อยครับ





#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use  delay(clock=20000000)

#define use_portb_kbd
#includE <kbd.c>
//#define time_Delay   1

BYTE CONST LED_MAP[17]={0x3F,0x06,0x5B,0x4F,0x66,
                        0x6D,0X7D,0x07,0x7F,0x6F,
                        0x77,0x7C,0x39,0x5E,0x79,
                        0x71,0x80};
void kbd_pullup_init();
void Display_Segs(char c );
void Display(char one,char two,char three);

void kbd_pullup_init()
{
     port_b_pullups(true);

}
void Display_Segs(char c)
{
   if(c=='*')
      output_d(0x5C);
      else
      if(c=='#')
      output_d(0x76);
      else
      output_d(LED_MAP[c-'0']);
}

void Display(char one ,char two,char three,char one1 ,char two2,char three3)
{
   Display_Segs(one);
   output_low(PIN_A0);
   delay_us(1);
   output_high(PIN_A0);
  
   Display_Segs(two);
   output_low(PIN_A1);
   delay_us(1);
   output_high(PIN_A1);
  
   Display_Segs(three);
   output_low(PIN_A2);
   delay_us(1);
   output_high(PIN_A2);
  
    Display_Segs(one1);
   output_low(PIN_A3);
   delay_us(1);
   output_high(PIN_A3);
  
   Display_Segs(two2);
   output_low(PIN_A5);
   delay_us(1);
   output_high(PIN_A5);
  
   Display_Segs(three3);
   output_low(PIN_E0);
   delay_us(1);
   output_high(PIN_E0);
}
void main()
{
   char k, pos1, pos2, pos3,pos4,pos5,pos6;                            // กำหนดตัวแปล 6หลักของ7Segment
  
   kbd_pullup_init();
   set_tris_d(0);
   output_d(0);
  
          pos1='0';                                                               //เริ่มต้นทุกหลักแสดงเลข0
          pos2='0';
          pos3='0';
          pos4='0';
          pos5='0';
          pos6='0';
  
   while (TRUE)
   {
      display(pos1,pos2,pos3,pos4,pos5,pos6);
      k=kbd_getc();
      
      if(k=='*')                                              //ถ้ามีการกดคีญ์แพดที่ปุ่ม *
      {
                                          
         pos2='2';                                              // หลักที่2 แสดงเลข 2                  
         pos6='6';                                             //หลักที่ 6 แดงเลข 6
      
      }

ปัญหาตรงนี้ครับ ทำอย่าไรครับเมื่อต้องการรอการกดเลขคำตอบ     เมื่่อ จอ 7Segment แสดงผล เป็น 2*6 แล้วรอการกดคำตอบจาก คีย์แพด
คือ เลข1กับเลข2 จะต้องทำอย่างไรครับ เรียกใช้ฟังช์ชั้นไหนครับ ช่วยดูให้ผมหน่อยครับ..


       if (output(pos2='2'&&pos6='6'))  ///////   ตั่งแต่ตรงนี้ครับ
            
           {      
            
            k!=='1';
               pos2='1';
            k!=='2';
               pos6='6';               //////     มาถึงตรงนี้ครับ
           }
        }
    }
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่