Pages: [1]   Go Down
Print
Author Topic: ช่วยหน่อยครับเรื่องทามเมอร์  (Read 6255 times)
0 Members and 5 Guests are viewing this topic.
rmutkee55
มาใหม่
*
Offline Offline

Posts: 1


Email
« 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();
   }
}


* 1111112.JPG (124.49 KB, 879x507 - viewed 1775 times.)
Logged
Pages: [1]   Go Up
Print
 
Jump to: