Title: ช่วยหน่อยครับเรื่องทามเมอร์ Post by: rmutkee55 on September 17, 2010, 05:13:35 PM คือแบบนี้นะครับ ผมจะเขียนtimer ปิดเปิดเครื่องใช้ไฟฟ้า มี 9 โหมด
โหมดที่ 1 เปิด อุปกรณ์ 1 โหมดที่ 7 เปิด อุปกรณ์ 4 โหมดที่ 2 ปิด อุปกรณ์ 1 โหมดที่ 8 ปิด อุปกรณ์ 4 โหมดที่ 3 เปิด อุปกรณ์ 2 โหมดที่ 9 ตั้งเวลา อุปกรณ์ IC DS1307 โหมดที่ 4 ปิด อุปกรณ์ 2 โหมดที่ 5 เปิด อุปกรณ์ 3 โหมดที่ 6 ปิด อุปกรณ์ 3 มี สวิต 4 ตัว sw1 = โชว์เวลาในไอซี ds1307(คล้ายๆกับรีเซ็ตนั่นเอง) sw2 = ปรับโหมด โดยนับได้0-9 แล้ว จะโชว์ที่ 7-segment 2 หลักโชว์ตลอดเมื่อกดปุ่มจะนับขึ้น sw3 = เป็นเป็นตัวปรับ ระหว่าง ชม.กับ นาที(อีกนัยนึงก็คือปรับระหว่างดิจิต4ดิจิตเลือนทีละ2บิต)กำหนดจากตัวแปร sw3 ทั้งหมดที่เลื่อนระหว่างดิจิต sw4 = ใช้กดตั้งเวลา โดยใน หลักของ digitนาที จะนับได้ถึง59 digit ชม. นับได้ 23 เรื่องที่ผมจะให้ช่วยมีดังนี้นะครับ 1. ผมว่าผมออกแบบโปรแกรมน่าจะถูกต้องนะครับ แต่ลองซิมมูเลทใน proteus ไม่ผ่านอ่ะคับ มันขึ้นเลข 000000 หมด ทีแรกถูกมันก็ถูกนะครับ แต่ เวลากดปรับโหมดที่ sw2มันก็ไม่โชว์เลข ที่sw3 ปรับหลักมันก็ปรับถูกนะครับ แล้วกด sw4 ตั้งเวลานี่มันนับมั่วเลย นับแต่ 8 อย่างเดียว 2.คือว่าเป็นที่โปรแกรม proteus รึปล่าวครับ ผมใช้เวอร์ 7.2 มันไม่ละเอียดพอ พอเป็นไปได้ไม๊ครับ 3.ผมได้ลองเทสในส่วน sw1,sw2,sw3 แล้ว แต่ในส่วน sw4 เทสไม่ได้เพราะมันจะอ้างอิงจากตัวแปร ผมจึ้งทำการเทสโดยลองเขียนโปรแกรมรัน 7-seg 6หลักดูมันก็รันได้ถูกต้องแต่ในโปรแกรมผมมันรันไม่ถูกช่วยเช็คทีนะครับ อาจมีอะไรผิดก็ได้ ผมจนปัญญาละครับ 4.ผมยังไม่ลองเทสกับอุปกรณ์จริง ผมคิดว่าอาจจะทำงานได้นะครับอันนี้ไม่รู้ยังไม่ลอง 5.ผมใช้ 7segment common แอโนดครับ ต่อวงจรไม่น่าจะผิดนะครับดูให้หน่อยนะครับพี่ๆ #include < REG51.h > sbit s1 = P3^4; sbit s2 = P3^5; sbit s3 = P3^6; sbit s4 = P3^7; sbit digit1 = P1^7; sbit digit2 = P1^6; sbit digit3 = P1^5; sbit digit4 = P1^4; sbit digit5 = P1^3; sbit digit6 = P1^2; code unsigned char display[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char mode = 0 ; unsigned char a,aa,b,bb,c,cc,d,dd,set = 0 ; unsigned char a1,a2,aa1,aa2,b1,b2,bb1,bb2,c1,c2,cc1,cc2,d1,d2,dd1,dd2,set1,set2 = 0 ; unsigned char seg1,seg2,seg3,seg4,seg5,seg6 = 1 ; unsigned char c3 ; void delay(int tick) { int i,j ; for (i=0;i<tick;i++) for (j=0;j<250;j++); } void sw_1() { if(s1==0) { delay(55); if(s1==0) { mode=0; seg3 = set1%10; seg4 = set1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); seg5 = set2%10; seg6 = set2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); }}} void sw_2() { if(s2==0) { delay(55); if(s2==0) { if(mode<10) {mode++;} if(mode==10) {mode=0;} }}} void mul_sw2() { seg1 = mode%10; seg2 = mode/10; digit1 = 1; digit2 = 0; P0 = display[seg1]; delay(10); digit1 = 0; digit2 = 1; P0 = display[seg2]; delay(10); } void sw_3() { c3=mode; if(s3==0) { delay(55); if(s3==0) { switch(c3) { case 1 : if(a<3) {a++;} if(a == 3) {a=0;} break; case 2 : if(aa<3) {aa++;} if(aa == 3) {aa=0;} break; case 3 : if(b<3) {b++;} if(b==3) {b=0;} break; case 4 : if(bb<3) {bb++;} if(bb==3) {bb=0;} break; case 5 : if(c<3) {c++;} if(c==3) {c=0;} break; case 6 : if(cc<3) {cc++;} if(cc==3) {cc=0;} break; case 7 : if(d<3) {d++;} if(d==3) {d=0;} break; case 8 : if(dd<3) {dd++;} if(dd==3) {dd=0;} break; case 9 : if(set<3) {set++;} if(set==3) {set=0;} break; } }}} void sw_4() { if(s4==0) { delay(55); if(s4==0) { switch(mode) { case 1 : switch(a) { case 1 : if(a1<60) {a1++;} if(a1==60) {a1=0;} seg3 = a1%10; seg4 = a1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); break; case 2 : if(a2<24) {a2++;} if(a2==24) {a2=0;} seg5 = a2%10; seg6 = a2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); break; } break; case 2 : switch(aa) { case 1 : if(aa1<60) {aa1++;} if(aa1==60) {aa1=0;} seg3 = aa1%10; seg4 = aa1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); break; case 2 : if(aa2<24) {aa2++;} if(aa2==24) {aa2=0;} seg5 = aa2%10; seg6 = aa2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); break; } break; case 3 : switch(b) { case 1 : if(b1<60) {b1++;} if(b1==60) {b1=0;} seg3 = b1%10; seg4 = b1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); break; case 2 : if(b2<24) {b2++;} if(b2==24) {b2=0;} seg5 = b2%10; seg6 = b2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); break; } break; case 4 : switch(bb) { case 1 : if(bb1<60) {bb1++;} if(bb1==60) {bb1=0;} seg3 = bb1%10; seg4 = bb1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); break; case 2 : if(bb2<24) {bb2++;} if(bb2==24) {bb2=0;} seg5 = bb2%10; seg6 = bb2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); break; } break; case 5 : switch(c) { case 1 : if(c1<60) {c1++;} if(c1==60) {c1=0;} seg3 = c1%10; seg4 = c1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); break; case 2 : if(c2<24) {c2++;} if(c2==24) {c2=0;} seg5 = c2%10; seg6 = c2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); break; } break; case 6 : switch(cc) { case 1 : if(cc1<60) {cc1++;} if(cc1==60) {cc1=0;} seg3 = cc1%10; seg4 = cc1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); break; case 2 : if(cc2<24) {cc2++;} if(cc2==24) {cc2=0;} seg5 = cc2%10; seg6 = cc2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); break; } break; case 7 : switch(d) { case 1 : if(d1<60) {d1++;} if(d1==60) {d1=0;} seg3 = d1%10; seg4 = d1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); break; case 2 : if(d2<24) {d2++;} if(d2==24) {d2=0;} seg5 = d2%10; seg6 = d2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); break; } break; case 8 : switch(dd) { case 1 : if(dd1<60) {dd1++;} if(dd1==60) {dd1=0;} seg3 = dd1%10; seg4 = dd1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); break; case 2 : if(dd2<24) {dd2++;} if(dd2==24) {dd2=0;} seg5 = dd2%10; seg6 = dd2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); break; } break; case 9 : switch(set) { case 1 : if(set1<60) {set1++;} if(set1==60) {set1=0;} seg3 = set1%10; seg4 = set1/10; digit3 = 1; digit4 = 0; P0 = display[seg3]; delay(10); digit3 = 0; digit4 = 1; P0 = display[seg4]; delay(10); break; case 2 : if(set2<24) {set2++;} if(set2==24) {set2=0;} seg5 = set2%10; seg6 = set2/10; digit5 = 1; digit6 = 0; P0 = display[seg5]; delay(10); digit5 = 0; digit6 = 1; P0 = display[seg6]; delay(10); break; } break; } }}} void main(void) { P0 = 0x00; digit1 = 0; digit2 = 0; digit3 = 0; digit4 = 0; digit5 = 0; digit6 = 0; while(1) { sw_1(); sw_2(); mul_sw2(); sw_3(); sw_4(); } } |