ช่วยดูโปรแกรมให้หน่อยครับ นับถอยหลัง CCS 16f877
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: ช่วยดูโปรแกรมให้หน่อยครับ นับถอยหลัง CCS 16f877  (อ่าน 5861 ครั้ง)
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« เมื่อ: ธันวาคม 12, 2011, 12:44:06 pm »

ต้องการใส่ปุ่ม Start และเมื่อโปรแกรมนับถึง 0 ทั้ง sec,min ให้โปรแกรมหยุดนับ  แล้วก้อทำไมผมกดปุ่ม + เพิ่มค่าพอค่า sec มากกว่า 59 ทำไมมัน +ค่า min เพิ่มละครับ  แต่กดปุ่ม -ลบ ก้อได้ปกติ
งงง   

ช่วยหน่อยครับ


บันทึกการเข้า

Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #1 เมื่อ: ธันวาคม 12, 2011, 12:45:57 pm »

นี่โปรแกรมครับ




//**********************//
//Timer1 16f877 Segment //
//**********************//

#include <16f877.h>
#fuses   HS,NOLVP,NOWDT,NOPROTECT
#use  delay (clock = 20M)

char segment[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,};

unsigned int tick=0;

int sec=10,min=1;

void delay();

#int_timer1
void timer1_ISR(void)
{
 
   //tick++;
      if(tick>=20)
      {
           sec--;
           tick=0;
      }
     
     
}
//******************************************

void delay()
{
   delay_ms(50);
}

void main()
{
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER1);
   
   setup_timer_1(T1_internal| T1_DIV_BY_4);
   set_timer1(0);
   
   set_tris_c(0x00);
   set_tris_b(0x00);
   

   while(1)
   {
   
    if(!input(pin_d7))
      {
         sec++;
      }
    else if(sec>59)
      {
         min++;
         sec=0;
      }
     
    if(!input(pin_d6))
      {
         sec--;
      }
    else if(sec<0&&min!=0)
      {
         min--;
         sec=59;
      }
    else

   
      output_b(segment[min/10%10]);
      output_high(pin_c0);
      output_low(pin_c1);
      output_low(pin_c2);
      output_low(pin_c3);
      delay();
     
      output_b(segment[min%10]);
      output_high(pin_c1);
      output_low(pin_c0);
      output_low(pin_c2);
      output_low(pin_c3);
      delay();
     
      output_b(segment[sec/10%10]);
      output_high(pin_c2);
      output_low(pin_c0);
      output_low(pin_c1);
      output_low(pin_c3);
      delay();
     
      output_b(segment[sec%10]);
      output_high(pin_c3);
      output_low(pin_c0);
      output_low(pin_c1);
      output_low(pin_c2);
      delay();
     
   }
}
บันทึกการเข้า
JUB
Full Member
member
**

คะแนน81
ออฟไลน์ ออฟไลน์

กระทู้: 1157



« ตอบ #2 เมื่อ: ธันวาคม 12, 2011, 01:13:13 pm »

เพราะว่า
โค๊ด:
    else if(sec>59)
      {
         min++;
         sec=0;
      }
บันทึกการเข้า
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #3 เมื่อ: ธันวาคม 12, 2011, 02:07:11 pm »

โทดทีครับพิมพ์ผิด

พอกด บวกค่าsec ถึง 60 ค่า min มันไม่เพิ่มครับ  รบกวนหน่อย 
แล้วจะใส่ ปุ่ม start ทำไงครับ
บันทึกการเข้า
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #4 เมื่อ: ธันวาคม 12, 2011, 03:42:34 pm »

จะสั่ง ให้ TIMER1 เริ่มนับ หยุดนับ ทำยังไงครับ  รบกวนหน่อย
บันทึกการเข้า
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #5 เมื่อ: ธันวาคม 12, 2011, 03:45:12 pm »

ปุ่มเซตเวลา ผมทำได้แล้วครับ  เหลือแต่ปุ่ม START  แล้วก้อเวลานับถึง 0 ให้ส่งออก port



//**********************//
//Timer1 16f877 Segment //
//**********************//

#include <16f877.h>
#fuses   HS,NOLVP,NOWDT,NOPROTECT
#use  delay (clock = 20M)

char segment[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f,};

unsigned int tick=0;

int sec=10,min=1;

void delay();

#int_timer1
void timer1_ISR(void)
{
 
   tick++;
      if(tick>=20)
      {
           sec--;
           tick=0;
      }
       
}
//******************************************

void delay()
{
   delay_ms(50);
}

void main()
{
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER1);
   
   setup_timer_1(T1_internal| T1_DIV_BY_4);
   set_timer1(0);
   
   set_tris_c(0x00);
   set_tris_b(0x00);
   

   while(1)
   {
   
    if(!input(pin_d7))
      {
         sec++;
      }
    if(!input(pin_d6))
      {
         sec--;
      }
    if(sec>59 || sec==60)
      {
         min++;
         sec=00;
      }
     
    else if(sec<=0)
      {
         min--;
         sec=59;
      }

   
      output_b(segment[min/10%10]);
      output_high(pin_c0);
      output_low(pin_c1);
      output_low(pin_c2);
      output_low(pin_c3);
      delay();
     
      output_b(segment[min%10]);
      output_high(pin_c1);
      output_low(pin_c0);
      output_low(pin_c2);
      output_low(pin_c3);
      delay();
     
      output_b(segment[sec/10%10]);
      output_high(pin_c2);
      output_low(pin_c0);
      output_low(pin_c1);
      output_low(pin_c3);
      delay();
     
      output_b(segment[sec%10]);
      output_high(pin_c3);
      output_low(pin_c0);
      output_low(pin_c1);
      output_low(pin_c2);
      delay();
     
   }
}
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: