ก็ใช่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'; ////// มาถึงตรงนี้ครับ
}
}
}
ก็ใช่16F877A นี้่ทำโปรเจคอยู่ครับ จะทำโปรเจ็คเป็นสูตรคูณเด็กๆครับ โดยเริ่มต้นให้ 7Segment แสดงตัวเลข 0 ทุกหลัก เมื่
โดยเริ่มต้นให้ 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'; ////// มาถึงตรงนี้ครับ
}
}
}