اطلاعیه

Collapse
No announcement yet.

سورس برنامه ی منیو بر روی lcd کاراکتری بیسیک و کدویژن

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    سورس برنامه ی منیو بر روی lcd کاراکتری بیسیک و کدویژن

    سلام دوستان پروژه منیو رو اپ کردم که کسایی که لازم دارن استفاده کنن

    توضیح رو اول گذاشتم چون اگه ابتدا با الگوریتم اشنا بشیم یاد گیری و فهمیدن طرز کار برنامه سریع میشه

    مراحل کار :NO: :
    1- چهار بیت بالا پایین چپ راست معرفی می کنیم
    2- با زدن دکمه ها این بیت ها رو صفر یا یک می کنیم یعنی با زدن دکمه بالا ...بیت بالا 1 و بیت پایین 0 خواهد شد و برای دیگر دکمه ها به همین شکل
    3- یه تابع برای تشخیص مکان نما ...مکان نما که نمیشه گفت ولی همون کار رو میکنه این تابع میاد به بیت ها نگا میکنه و از دستور ساده if استفاده میکنه و میگه اگه بیت بالا و بیت راست یک هست مکان نما رو ب پشت کلمه ی تایمر میبره و دکمه ی ok رو برای ورود به برنامه تایمر تنظیم می کنه
    4- برنامه های دلخواه که از قبل نوشته شده و توسط الگوریتم بالا به برنامه ها سوئیچ می کنیم

    این یه تصویر گیف از شبیه ساز پروتئوس

    این هم ویدئو از کارکرد مدار روی برد بورد
    http://www.aparat.com/v/viMfG
    برنامه رو در پست بعدی میزارم که شلوغ نشه

    #2
    پاسخ : سورس برنامه ی منیو بر روی lcd کاراکتری بیسیک و کدویژن

    این سورس برنامه بیسیک و کد ویژن همراه پرتئوس
    http://s6.picofile.com/file/8208641292/menu.rar.html
    اینم برنامه به صورت نوشته برای کسایی که ثبت نام نکردن
    کد:
    $regfile = "M16def.dat"
    $crystal = 1000000
    '***********************configs
    Config Adc = Single , Prescaler = Auto
    Config Single = Scientific , Digits = 2
    Config Portc = Input
    Config Portb = Output
    Config Pina.0 = Input
    '***********************cursor
    Cursor Off
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , Rs = Portd.5 , E = Portd.4
    '****************************dims
    Dim A As Word
    Dim C As Single
    Dim H As Byte
    Dim M As Byte
    Dim S As Byte
    Dim U As Bit
    Dim D As Bit
    Dim R As Bit
    Dim L As Bit
    Dim I As Byte
    Dim W As Byte
    Dim Z As Byte
    Dim V As Byte
    '*******************declare
    Declare Sub Dysplay
    '****************************chars
    Deflcdchar 6 , 1 , 3 , 7 , 15 , 7 , 3 , 1 , 32
    Deflcdchar 5 , 8 , 12 , 14 , 15 , 14 , 12 , 8 , 32
    Deflcdchar 4 , 32 , 32 , 32 , 32 , 1 , 2 , 4 , 32
    Deflcdchar 3 , 7 , 32 , 1 , 1 , 17 , 9 , 6 , 32
    Deflcdchar 2 , 1 , 5 , 5 , 5 , 5 , 5 , 25 , 32
    Deflcdchar 1 , 16 , 16 , 16 , 17 , 17 , 14 , 32 , 10
    '******************* debounce
    Config Debounce = 40
    '********************** start
    Menu:
     Cls
    Locate 1 , 1
    Lcd Chr(5)
    Locate 1 , 7
    Lcd Chr(6)
    Call Dysplay
     Do
        Debounce Pinc.4 , 1 , Light
     Debounce Pinc.1 , 1 , Move_down
     Debounce Pinc.2 , 1 , Move_right
    '************************************const state past than press key's
    U = 1
    D = 0
    R = 0
    L = 1
    Loop
    '**************chang state
    Move_down:
    U = 0
    D = 1
     jmp state
    '**************
    Move_right:
    R = 1
    L = 0
     jmp state
    '**************
    Move_left:
    R = 0
    L = 1
     jmp state
    '**************
    Move_up:
    U = 1
    D = 0
     jmp state
    '********************************state
    State:
     Do
    If U = 1 And L = 1 Then
     jmp menu1
    End If
    If U = 1 And R = 1 Then
     jmp menu2
    End If
    If D = 1 And L = 1 Then
     jmp menu3
    End If
    If D = 1 And R = 1 Then
     jmp menu4
    End If
     Loop
    '**************
    Menu1:
     Cls
    Locate 1 , 1
     Lcd Chr(5)
    Locate 1 , 7
     Lcd Chr(6)
     Call Dysplay
      Do
         Debounce Pinc.4 , 1 , Light
      Debounce Pinc.1 , 1 , Move_down
      Debounce Pinc.2 , 1 , Move_right
     Loop
    '**************************
    Menu2:
     Cls
    Locate 1 , 10
     Lcd Chr(5)
     Locate 1 , 16
    Lcd Chr(6)
    Call Dysplay
     Do
         Debounce Pinc.4 , 1 , 1timer
      Debounce Pinc.1 , 1 , Move_down
      Debounce Pinc.3 , 1 , Move_left
     Loop
    '*****************************
    Menu3:
     Cls
    Locate 2 , 1
     Lcd Chr(5)
    Locate 2 , 9
    Lcd Chr(6)
    Call Dysplay
     Do
         Debounce Pinc.4 , 1 , Volt_meter
      Debounce Pinc.0 , 1 , Move_up
      Debounce Pinc.2 , 1 , Move_right
     Loop
    '***************************
    Menu4:
    Cls
    Locate 2 , 10
     Lcd Chr(5)
    Locate 2 , 16
    Lcd Chr(6)
    Call Dysplay
     Do
         Debounce Pinc.4 , 1 , Tasbih
      Debounce Pinc.0 , 1 , Move_up
      Debounce Pinc.3 , 1 , Move_left
     Loop
    '**************************************dysplay
    Dysplay:
    Locate 1 , 2
     Lcd "light"
    Locate 1 , 11
     Lcd "timer"
    Locate 2 , 2
     Lcd "voltmtr"
    Locate 2 , 11
     Lcd "tasbih"
    Return
    '***********************************************************************
    Light:
     Cls
     Do
    Locate 1 , 1
     Lcd Chr(5)
     Lcd "flash light"
    Locate 2 , 8
     Lcd "led rotate"
         Debounce Pinc.4 , 1 , Led_light
       Debounce Pinc.1 , 1 , M_led_rotate
       Debounce Pinc.2 , 1 , M_led_rotate
       Debounce Pinc.5 , 1 , Menu
     Loop
     '***********************
    Led_light:
    Cls
    W = 8
    Z = 8
    Locate 2 , 1
    Lcd "press to chang"
     Do
      Set Portb.0
      Locate 1 , 1
    Lcd "hi=" ; Z ; "ms " ; "low=" ; W ; "ms"
    
    
      Waitms Z
      Reset Portb.0
         Debounce Pinc.5 , 1 , Light
    Waitms W
      If Pinc.0 = 1 Then
       W = W + 4
       Waitms 150
       Elseif Pinc.1 = 1 Then
       W = W - 4
       Waitms 150
       Elseif Pinc.2 = 1 Then
       Z = Z + 4
       Waitms 150
       Elseif Pinc.3 = 1 Then
       Z = Z - 4
       Waitms 150
      End If
     Loop
     '***********************
    M_led_rotate:
    Cls
     Do
     Locate 2 , 7
      Lcd Chr(5)
      Locate 2 , 8
      Lcd "led rotate"
     Locate 1 , 2
     Lcd "flash light"
    
         Debounce Pinc.4 , 1 , Led_rotate
      Debounce Pinc.0 , 1 , Light
      Debounce Pinc.3 , 1 , Light
     Loop
     '***********************
    Led_rotate:
     Cls
    
    Locate 2 , 1
    Lcd "press ok to stop"
    W = 64
     Do
     Locate 1 , 1
     Lcd "speed =" ; W ; "ms "
      Portb = &B01
     For I = 1 To 8
       Rotate Portb , Left
       Waitms W
       Debounce Pinc.5 , 1 , 1reset
         Debounce Pinc.4 , 1 , Stop_led_jmp_to_up_down
      If Pinc.2 = 1 Then
       W = W + 4
       Waitms 50
      Elseif Pinc.3 = 1 Then
       W = W - 4
       Waitms 50
      End If
    
    Next I
     Loop
    '************************
    1reset:
     Portb = &B00000000
    jmp light
    '************************
    Stop_led_jmp_to_up_down:
    Cls
    Lcd "press up or"
    Locate 2 , 7
    Lcd "down"
     Do
         Debounce Pinc.5 , 1 , Led_rotate
      Debounce Pinc.0 , 1 , Rotate_up
      Debounce Pinc.1 , 1 , Rotate_down
     Loop
    '************************
    Rotate_up:
     Cls
    Lcd "rotate up"
     Rotate Portb , Right
     Do
         Debounce Pinc.5 , 1 , Led_rotate
      Debounce Pinc.0 , 1 , Rotate_up
      Debounce Pinc.1 , 1 , Rotate_down
    Loop
    Rotate_down:
     Cls
    Lcd "rotate down"
     Rotate Portb , Left
     Do
         Debounce Pinc.5 , 1 , Led_rotate
      Debounce Pinc.0 , 1 , Rotate_up
      Debounce Pinc.1 , 1 , Rotate_down
     Loop
    '************************************************************************
    1timer:
     Do
     Cls
      For H = 0 To 12
      For M = 0 To 59
     Cls
       For S = 0 To 59
    Locate 1 , 10
     Lcd "PORTA"
    Locate 2 , 1
     Lcd "timer"
    Locate 2 , 7
     Lcd H ; ":" ; M ; ":" ; S
    Locate 1 , 2
     Lcd Chr(4)
     Lcd Chr(3)
     Lcd Chr(2)
     Lcd Chr(1)
    Waitms 975
      Debounce Pinc.5 , 1 , Menu
      Next S
      Next M
     Next H
     Loop
    '*************************************************************************
    Volt_meter:
    Do
    Cls
    Start Adc
    For V = 1 To 20
    A = Getadc(0)
    Waitms 1
    Next V
    C = A / 20
    C = A / 204.6
    Stop Adc
    Locate 1 , 1
    Lcd A ; " per 1023"
    Locate 2 , 1
    Lcd "volt="
    Locate 2 , 6
    Lcd C ; "V"
    Waitms 200
    Debounce Pinc.5 , 1 , Menu
    Loop
    End
    '***********************************************************************
    Tasbih:
    Cls
     Do
     For I = 1 To 40
     Locate 1 , 1
    Lcd "ya allah"
     Shiftlcd Right
    Waitms 100
     Debounce Pinc.5 , 1 , Menu
     Next I
    Loop
    کد:
    /*
     * menu.c
     *
     * Created: 7/23/2015 6:57:17 AM
     * Author: pouria21elec
     */
    
    #include <io.h>
    #include <delay.h>
    #include <alcd.h>
    #include <stdio.h>
    //bit up,down,left,right=0 ;
    bit up = 1;
    bit right = 0;
    bit down =0; 
    bit left = 1 ;
    flash char pouria[]={'b','e','s','m',' ','a','l','l','a','h',};
    flash char avr[]={'m','o','h','a','m','a','d',' ','r','s','o','l','a','l','a','h'};
    void light ();
    void timer ();
    void voltmeter();
    void zekr ();
    void state ();
    void key_scan();
    
    
    void lcd_menu(void){
    lcd_gotoxy(1,0);
    lcd_putsf("light");
    lcd_gotoxy(11,0);
    lcd_putsf("timer");
    lcd_gotoxy(1,1);
    lcd_putsf("voltmetr");
    lcd_gotoxy(11,1);
    lcd_putsf("zekr");
    }
    
    
    
    void main(void){
    
    DDRC = 0x00;
    PORTC = 0xff;
    DDRB = 0Xff;
    lcd_init(16);
    lcd_menu();
    state();
     }
      void key_scan(void){
             
          if(PINC.0 == 1){      
            up=1;
            down=0;
            while(PINC.0 == 1){;} 
             state();
          }
          
          if(PINC.1 == 1){
             down=1;
             up = 0 ;
             while(PINC.1 == 1){;}
             state();
          }
          
          if(PINC.2 == 1){
             right=1;
             left=0; 
             while(PINC.2 == 1){;}
             state(); 
          }
          
          if(PINC.3 == 1){
             left=1;
             right=0;
             while(PINC.3 == 1){;}
             state();
          }      
        
       }
      
      
       
      void state (void){
      
        if(up == 1 && left == 1)
       {
         lcd_clear();
         lcd_menu();
         lcd_gotoxy(0,0);
         lcd_putchar('>');
         do
         {
          if(PINC.4 == 1){light();}      
          if(PORTC > 0xc0){ key_scan();}
         } 
         while(1);
        }
        if(up == 1 && right == 1)
       {
         lcd_clear();
         lcd_menu();
         lcd_gotoxy(10,0);
         lcd_putchar('>');
         do
         {
         if(PINC.4 == 1){timer();}     
         if(PORTC > 0xc0){ key_scan();}
         }
         while(1);
        }
        if(down == 1 && left == 1)
       {
         lcd_clear();
         lcd_menu();
         lcd_gotoxy(0,1);
         lcd_putchar('>');
         do
         {
         if(PINC.4 == 1){voltmeter();}
         if(PORTC > 0xc0){key_scan();}
         }
         while(1);
        } 
       
        if(down == 1 && right == 1)
       {
         lcd_clear();
         lcd_menu();
         lcd_gotoxy(10,1);
         lcd_putchar('>');
         do
         {
         if(PINC.4 == 1){zekr();}
         if(PORTC > 0xc0){key_scan();}
         }
         while(1);
        } 
       
     }  
       void light(void)
       {
         lcd_clear();
         lcd_putsf("light");
        while(1){
         PORTB.1 = 1;
         delay_ms(500);
         PORTB.1 = 0;
         delay_ms(500);
         if(PINC.5 == 1 ){ main();}
        }
       }
       void timer(void)
     {
       {  
          char b[16];
          int s=0,m=0,h=0;
          lcd_init(16);
          lcd_clear();
          lcd_gotoxy(0,0);
          lcd_putsf("be name khoda");
          delay_ms(1000);
          lcd_clear() ;      
          while (1)
          {
           s++;
           if (s>59){s=0;m++;}
           if (m>59){m=0;h++;}
           if (h>23){h=0;m=0,s=0;}
            sprintf(b,"%d:%d:%d  ",h,m,s); 
            lcd_gotoxy(0,0);
            lcd_puts(b);
            delay_ms(997);
            if(PINC.5 == 1){main();}
         } 
       }
     }
     
     void voltmeter(void){
        while(1)
        {
          lcd_clear();
          lcd_putsf("v = x");
          
          while(1)
          {
          if(PINC.5 == 1){ main();}
          }
         }
       } 
       
       void zekr (void){
       char i ;
         lcd_clear();
         lcd_gotoxy(0,0);
        lcd_putsf("zekr :");
        while (1){
          for(i=0;i<=9;i++)
          {  
            lcd_gotoxy(i,1);
            lcd_putchar(pouria[i]);
            delay_ms(100);
            if(PINC.5 == 1){main();}   
          }
              
         delay_ms(500); 
         
          for(i=16;i>=0;i--)
          {  
            lcd_gotoxy(i,1);
            lcd_putchar(avr[i]);
            delay_ms(50);
            if(PINC.5 == 1){main();}   
          } 
         delay_ms(500);
          for(i=16;i>=0;i--)
          {  
            lcd_gotoxy(i,1);
            lcd_putsf(" ");
            delay_ms(100);
            if(PINC.5 == 1){main();}   
          }
         }
     }
    :redface:
    برنامه بیسیک کامل تره و فیلم و گیف از رو بیسیک گرفته شده
    یه توصیه هم ب کسایی که می خوان شرو کنن حتما از زبان سی استفاده کنن چون اگه یاد بگیرید به 70 80 درصد کل زبان های برنامه نویسی اشنا میشید زبان بیسیک هم بد نیست و زبان شیرینیه منتها سورس به زبان سی بیشتره و محدودیت برنامه نویسیه کمتری داره
    برنامه سی بالا دوتا وارنینگ داره کسی وقت کرد طرز رفع وارنینگ رو بهم بگه من زیاد با کدویژن اشنا نیستم و تازه شروع به یاد گیری کردم :read:

    دیدگاه


      #3
      پاسخ : سورس برنامه ی منیو بر روی lcd کاراکتری بی&#1

      بگو warning ها چی بوده بلد باشم میگم مشکل کجاست. ( حال کامپایل ندارم )

      معمولا یا یه تابع تعریف کردید ازش استفاده نکردید که بعد از کامپایل حذف میشه .
      یا یه متغیر تعریف کردید ازش استفاده نکردید یا ...



      میکروش چیه ؟
      چرا نام میکرو include نشده ؟
      اِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
      کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

      دیدگاه


        #4
        پاسخ : پاسخ : سورس برنامه ی منیو بر روی lcd کاراکتری بی

        نوشته اصلی توسط " سید محمد "
        بگو warning ها چی بوده بلد باشم میگم مشکل کجاست. ( حال کامپایل ندارم )

        معمولا یا یه تابع تعریف کردید ازش استفاده نکردید که بعد از کامپایل حذف میشه .
        یا یه متغیر تعریف کردید ازش استفاده نکردید یا ...



        میکروش چیه ؟
        چرا نام میکرو include نشده ؟

        عکس بالا وارنینگ کامپایلره
        میکرو از اتیمگا 16 استفاده کردم وقتی پروژه جدید رو ساختم میکرو رو انتخاب کردم دیگه نیازی به اینکلود نبود
        اگه مشل رو بهم بگی کمک بزرگی کردی

        دیدگاه


          #5
          پاسخ : سورس برنامه ی منیو بر روی lcd کاراکتری بیسیک و کدویژن

          سلام کسی نتونست مشکل وارنینگ ها رو بگه اصلا دلیل این نوع وارنینگ ها چی می تونه باشه ؟

          دیدگاه


            #6
            پاسخ : سورس برنامه ی منیو بر روی lcd کاراکتری بی&#1

            نوشته اصلی توسط pouria23
            سلام کسی نتونست مشکل وارنینگ ها رو بگه اصلا دلیل این نوع وارنینگ ها چی می تونه باشه ؟
            من خودم تا حالا باهاش مواجه نشده بودم . شما پرسیدی دیدم جالبه یه سرچی براش زدم .

            این لینک خیلی ساده درباره recursive (بازگشتی ) توضیح داده .( انگلیسیه ولی ساده است )
            recursive یعنی حالتی که از درون تابع خودش صدا زده بشه و یه حالت لوپ بوجود بیاد .
            http://www.cprogramming.com/tutorial/c/lesson16.html


            البته این برای علت وارنینگ بود .
            بخش اول میگه از stack برای 2 تا تابع main , state استفاده نمیکنه که این بخش رو درست نفهمیدم . سرچ هم نتیجه نداد .


            اِنَّ الَّذِینَ یُحِبُّونَ أَنْ تَشِیعَ الْفاحِشَهُ فِی الَّذِینَ آمَنُوا لَهُمْ عَذابٌ أَلِیمٌ فِی الدُّنْیا وَ الْآخِرَهِ وَ اللَّهُ یَعْلَمُ وَ أَنْتُمْ لا تَعْلَمُونَ.
            کسانى که دوست دارند زشتی ها در میان مردم با ایمان شیوع یابد عذاب دردناکى براى آنها در دنیا و آخرت است، و خداوند میداند و شما نمی‏دانید. (نور19)

            دیدگاه

            لطفا صبر کنید...
            X