cần giúp đỡ sửa code cho pic12f629 và nút nhấn:

tanphappc

Học sinh phổ thông
#1
chào các anh chị trên diễn đàn! anh, chị nào giúp em sửa lại đoạn code này với: em muốn bật nguồn thì led 1 nháy lặp đi lặp lại mãi, khi nhấn nút 1 cái thì chuyển qua led 2 nhấp nháy và cứ lặp đi lặp lại liên tục đến khi ta nhấn vào nút nhấn 1 cái thì chuyển qua led 3 nhấp nháy nếu ấn tiếp thì chuyển qua led 1 ....em cảm ơn nhiều!...
Mã:
#include <12F629.h>

#fuses NOMCLR, INTRC_IO,NOWDT,NOPROTECT, NOPUT, NOPROTECT, NOBROWNOUT, NOCPD

#use delay (clock=4000000)

int8 bien_led,bien=0,over_5s=0;

#define sw  PIN_A3                             

#define led_1 PIN_A0

#define led_2 PIN_A1

#define led_3 PIN_A2

#int_timer1

void timer_1()

  {

bien++;

if(bien==100)

{

bien=0;if(bien_led!=0)

over_5s=0xaa;

set_timer1(0x3CAF);

}}

void main()

{

SET_TRIS_A(0b00001000);

output_A(0xff);

bien_led=0;

setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1 );

set_timer1(0x3CAF);

enable_interrupts(GLOBAL);

enable_interrupts(INT_TIMER1);

while(1){

if(!input(sw))delay_ms(10);

if(!input(sw)){

if(over_5s==0xaa){bien_led=0;goto thoat;}

bien_led++;if(bien_led>3)bien_led=1;

thoat:

switch ( bien_led){

case 1:

      {

        output_high(led_1);delay_ms(150);

        output_low(led_1);delay_ms(750);

        output_high(led_1);delay_ms(150);

        output_low(led_1);delay_ms(750);

        output_high(led_1);delay_ms(150);

        output_low(led_1);delay_ms(750);

         break;

      }

case 2:

      {

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(200);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(750);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(200);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(750);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(200);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(750);

        break;

      }

case 3:

      {

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(750);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(750);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(750);

        break;

      }

}

while(!input(sw)){}

delay_ms(10);over_5s=0;bien=0;

}}}
 

Đính kèm

eva

Kỹ sư
#3
void main
bien_led =1;

................

while(1)
{
switch(bien_led)
{
case 1:
break;
case 2
break;
.................

}
}


/////////// nút bấm thì có thể đọc trong timer hoặc chia nhỏ delay ra rồi kiểm tra nút nhấn để sự kiện nhấn nút được kích hoạt tức thời.
 

tanphappc

Học sinh phổ thông
#4
Dạ em ảm ơn a/c eva nhé. Anh có thể sửa đoạn code đó cho em đc không? Vì mổi lần e nhấn nút thì case1 chỉ chạy được một lần thôi không lặp đi lặp lại được. Và đợi cho chạy xong case1 thì ấn phím mới có tác dụng chuyển sang case 2...giờ em muốn sửa sao cho cấp nguồn vào thì case 1 lặp đi lặp lại liên tục cho đến khi ta ấn nút thì chuyển sang case 2 rồi lặp đi lặp lại ở chế độ case2 , nhấn nút tiết thì chuyển sang case 3... Rồi quay lại case1...
Anh có thể sửa cho em để em dể hiểu hơn đc không a? Em cảm ơn anh....
 

tanphappc

Học sinh phổ thông
#5
chào các anh chị trên diễn đàn! anh, chị nào giúp em sửa lại đoạn code này với: em muốn bật nguồn thì led 1 nháy lặp đi lặp lại mãi, khi nhấn nút 1 cái thì chuyển qua led 2 nhấp nháy và cứ lặp đi lặp lại liên tục đến khi ta nhấn vào nút nhấn 1 cái thì chuyển qua led 3 nhấp nháy nếu ấn tiếp thì chuyển qua led 1 ....em cảm ơn nhiều!...
Mã:
#include <12F629.h>

#fuses NOMCLR, INTRC_IO,NOWDT,NOPROTECT, NOPUT, NOPROTECT, NOBROWNOUT, NOCPD

#use delay (clock=4000000)

int8 bien_led,bien=0,over_5s=0;

#define sw  PIN_A3                             

#define led_1 PIN_A0

#define led_2 PIN_A1

#define led_3 PIN_A2

#int_timer1

void timer_1()

  {

bien++;

if(bien==100)

{

bien=0;if(bien_led!=0)

over_5s=0xaa;

set_timer1(0x3CAF);

}}

void main()

{

SET_TRIS_A(0b00001000);

output_A(0xff);

bien_led=0;

setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1 );

set_timer1(0x3CAF);

enable_interrupts(GLOBAL);

enable_interrupts(INT_TIMER1);

while(1){

if(!input(sw))delay_ms(10);

if(!input(sw)){

if(over_5s==0xaa){bien_led=0;goto thoat;}

bien_led++;if(bien_led>3)bien_led=1;

thoat:

switch ( bien_led){

case 1:

      {

        output_high(led_1);delay_ms(150);

        output_low(led_1);delay_ms(750);

        output_high(led_1);delay_ms(150);

        output_low(led_1);delay_ms(750);

        output_high(led_1);delay_ms(150);

        output_low(led_1);delay_ms(750);

         break;

      }

case 2:

      {

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(200);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(750);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(200);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(750);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(200);

        output_high(led_2);delay_ms(150);

        output_low(led_2);delay_ms(750);

        break;

      }

case 3:

      {

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(750);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(750);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(200);

        output_high(led_3);delay_ms(150);

        output_low(led_3);delay_ms(750);

        break;

      }

}

while(!input(sw)){}

delay_ms(10);over_5s=0;bien=0;

}}}
 

Quảng cáo Google