ايران ويج

نسخه‌ی کامل: سه حالت رقص led
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام بر دوستان
میخواستم دستوری با CodeVision بنویسم که سه حالت رقص led روی یکی از پورت ها اجرا کند و با یک کلید سه حالت عوض شود
یعنی وقتی روشن شد بایکی از حالتها روشن شود و هر بار کلید زده شد حالت عوض شود و در اخر دوباره به حالت اول برگردد
میخوام با دستورات حالت این کار بکنم (حلقه استفاده نشود)
با دستور if نوشتم ولی یه سری مشکلات داره.

017
حلقه باید باشه.
شما یه متغیر تعریف کن ، هر موقع که پین فلان 1 شد ، یک واحد به اون متغیر اضافه شه و با دستور switch برای مقادیر مختلف اون متغییر حالت رقص نورت عوض شه
متشکرم منظورم از حلقه دستور دیگری جزئ whil نباشد
اگه whil باشد مشکلی ندارد درسته با دستور switch میشه نوشت .
اگه دستور کلی شو داشتی بزار
متشکرم
شبیه سازتو با فایل کدویژن رو برام بفرست تا بنویسمش برات
متشکرم برنامه اش با دستور switch نوشتم
اینم کدش وفایل شبیه سازشو پیوست کردم


کد php:
#include <mega32.h>
#include <delay.h>

unsigned char i=0,s=0,a=1,d[4]={0x81,0x42,0x24,0x18};

void main(void)
{
// Declare your local variables here



while (1)
      {
      
      switch(
s){
      case 
0:
      
PORTA=a;
      
delay_ms(300);
      
a=a<<1;
      
      if(
a==0)
      
a=1;
      
      if(
PIND.0==0){
      
delay_ms(200);
      while(
PIND.0==0);
      
i=0;
      
s=1;}
      
      
      
      
      break;
      case 
1:
      
PORTA=d[i];
      
delay_ms(300);
      
i++; 
      
      if(
i==4)
      
i=0;
      
      
      if(
PIND.0==0){
      
delay_ms(200);
      while(
PIND.0==0);
      
a=1;
      
s=0;}
      
      
      
      }

      }

داداشه من بازم که همون اشتباه قبلیت رو تکرار کردی که !
گفتم برای پین وروردی باید DDR اون پین 0 باشه و بنا به نیازت اون پین رو pull up یا pull down کنی که بازم نکردی .
اما تو این پروژه از وقفه خارجی استفاده کردم که خیلی بهتر جواب میده ، تا if .
دلیلش رو میتونی بگی ؟
سلام
من منظورتو بازم متوجه نشدم اگه منظورت اینه که DDR اون پین 0 باشه یعنی ورودی باشه وپورت 1 باشه یعنی pull up فعال باشه که همین طور
اگه میشه بیشتر توضیح بده !!!!!
اما در مورد وقفه خارجی اره شما درست میگید با وقفه خارجی بهتر جواب میده ودقت بالا تری دارد در این شکی نیست ولی من در این جا میخوام از delay استفاده کنم
بازم کد کامل ترش میزارم
بازم اگه مشکلی داره بگید!!!
متشکرم .
کد php:
#include <mega32.h>
#include <delay.h>
unsigned char s=0,a=0b00000001 ,i=0,d[4]={0x81,0x42,0x24,0x18};
void main(void)
{
PORTA=0x00;
DDRA=0xFF;

PORTD=0x01;
DDRD=0x00;
while (
1)
      {
      switch(
s)
        {
        case 
0:
        
PORTA=a;
        
delay_ms(200);
        
a=a<<1;
        if(
a==0)
        
        
a=1;
        
        if(
PIND.0==0)
        {
        
delay_ms(200);
        while(
PIND.0==0);
        
i=0;
        
s=1;
        }
        break;
        case 
1:
        
PORTA=d[i];
        
delay_ms(200); 
        
i++;
        if(
i==4)
        {
        
i=0;
        }
        if(
PIND.0==0)
        {
        
delay_ms(200);
        while(
PIND.0==0);
        
a=1;
        
s=0;
        }
        }
        
        
        }
      
      

متشکرم از کدی که گذاشتیه کارم راه افتاد.