หัวข้อ: ช่วยดูโปรแกรมให้หน่อยครับ นับถอยหลัง CCS 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ ธันวาคม 12, 2011, 12:44:06 pm ต้องการใส่ปุ่ม Start และเมื่อโปรแกรมนับถึง 0 ทั้ง sec,min ให้โปรแกรมหยุดนับ แล้วก้อทำไมผมกดปุ่ม + เพิ่มค่าพอค่า sec มากกว่า 59 ทำไมมัน +ค่า min เพิ่มละครับ แต่กดปุ่ม -ลบ ก้อได้ปกติ
งงง shocked2 shocked2 ช่วยหน่อยครับ หัวข้อ: Re: ช่วยดูโปรแกรมให้หน่อยครับ นับถอยหลัง CCS 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ ธันวาคม 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(); } } หัวข้อ: Re: ช่วยดูโปรแกรมให้หน่อยครับ นับถอยหลัง CCS 16f877 เริ่มหัวข้อโดย: JUB ที่ ธันวาคม 12, 2011, 01:13:13 pm เพราะว่า
โค๊ด: else if(sec>59) หัวข้อ: Re: ช่วยดูโปรแกรมให้หน่อยครับ นับถอยหลัง CCS 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ ธันวาคม 12, 2011, 02:07:11 pm โทดทีครับพิมพ์ผิด
พอกด บวกค่าsec ถึง 60 ค่า min มันไม่เพิ่มครับ รบกวนหน่อย แล้วจะใส่ ปุ่ม start ทำไงครับ หัวข้อ: Re: ช่วยดูโปรแกรมให้หน่อยครับ นับถอยหลัง CCS 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ ธันวาคม 12, 2011, 03:42:34 pm จะสั่ง ให้ TIMER1 เริ่มนับ หยุดนับ ทำยังไงครับ รบกวนหน่อย
หัวข้อ: Re: ช่วยดูโปรแกรมให้หน่อยครับ นับถอยหลัง CCS 16f877 เริ่มหัวข้อโดย: Dumrong007 ที่ ธันวาคม 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(); } } |