امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 2
  • 1
  • 2
  • 3
  • 4
  • 5
توضیح برنامه
نویسنده پیام
leilooooon آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: شهریور ۱۳۹۵

تشکرها : 0
( 1 تشکر در 1 ارسال )
ارسال: #1
توضیح برنامه
سلام
ظهرتون بخیر
مطالبتون واقعا مفید و کاربردی هست ممنون از زحماتی که میکشین.
من یک برنامه نویسی تابلوروان به زبان c دارم 
تو خواندن برنامه c مشکل دارم فایل پروتئوس رو کامل فهمیدم میشه خواهش کنم بهم توضیح بدین تا متوجه بشم باید تا چندروز دیگه ارائه بدم.
خیلی لطف میکنین اگه کمکم کنین.
۰۱-شهریور-۱۳۹۵, ۱۴:۱۲:۱۶
ارسال‌ها
پاسخ
alimogmov آفلاین
مدیر بخش
*****

ارسال‌ها: 456
موضوع‌ها: 36
تاریخ عضویت: اردیبهشت ۱۳۹۰

تشکرها : 867
( 940 تشکر در 393 ارسال )
ارسال: #2
RE: توضیح برنامه
درود و سلام

پرونده (فایل) یا کد را ارسال کنید تا با ایرانویجی ها یک فکری بکنیم و شاید پاسخکی هم.

۰۲-شهریور-۱۳۹۵, ۰۶:۵۵:۲۶
ارسال‌ها
پاسخ
تشکر شده توسط : babyy
leilooooon آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: شهریور ۱۳۹۵

تشکرها : 0
( 1 تشکر در 1 ارسال )
ارسال: #3
RE: توضیح برنامه
سلام
واقعا ممنون که کمکم میکنین.

کد php:
<include <mega8.h#
<include <delay.h#
<include <i2c.h#
<include <m2s.h#
<include <ds1307.h#
<include <stdio.h#
<include <1wire.h#

<include <ds18b20.h#
 
include "74hc595.h" 
در دستورات زیر نام یک پین از میکرو تغییر میدهیم و در برنامه از همین نام استفاده میکنیم

کد php:
#define OE PORTB.1
#define MR PORTB.3 
متغییر های مورد نیاز در برنامه را تعریف میکنیم

کد php:
;int ys,ms,ds
;unsigned char ds1820_devices
[unsigned char rom_codes[MAX_DS1820][9
;unsigned char temp,dis=0
;int n
// Declare your global variables here
;unsigned char a,hour,min,sec,week_day,day,month,year
unsigned char buf[32],i=0,j
// Declare your global variables here
;{unsigned char col[9]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 
کد های عدد از صفر تا 9 و علامت ها در درون این ثابت میباشد و برای نمایش یک عدد کد آن را از درون این ثبات میخوانیم .

کد php:
\}=[]const unsigned char TEXT 
 
 
   \    
// ..@@@@..,0x3C
  \    // .@....@.  0x42
  \    // .@....@.0x42, 
\    // ..@@@@.. 0x3C,    
\    // ........  0x00,  
\    // ........ 0x00,  
 \    // .@...@.. 0x22, 
 \    // .@@@@@@. 0x7E, 
\    // .@...... 0x02,  
 \    // ........ 0x00, 
 \    // .@...@.. 0x22, 
\    // .@@...@. 0x46,  
  \    // .@.@..@. 0x4A,
 \    // .@..@@.. 0x32, 
\    // ........ 0x00,  
 \    // ..@..@.. 0x24, 
 \    // .@....@. 0x42, 
\    // .@..@.@. 0x52,  
 \    // ..@@.@.. 0x2C, 
\    // ........

 0x00 
 0x18
,  \    // ...@@...
 0x28,  \    // ...@.@..
 0x7E,  \    // .@@@@@@.
 0x08,  \    // ...@....
 0x00,  \    // ........
 0x74,  \    // ..@.@@@.
 0x52,  \    // .@..@.@.
 0x52,  \    // .@..@.@.
 0x4C,  \    // ..@@..@.
 0x00,  \    // ........
 0x3C,  \    // ..@@@@..
 0x52,  \    // .@.@..@.
 0x52,  \    // .@..@.@.
 0x0C,  \    // ..@@....
 0x00,  \    // ........
 0x40,  \    // ......@.
 0x4E,  \    // .@@...@.
 0x50,  \    // ...@@.@.
 0x60,  \    // .....@@.
 0x00,  \    // ........
 0x2C,  \    // ..@@.@..
 0x52,  \    // .@..@.@.
 0x52,  \    // .@..@.@.
 0x2C,  \    // ..@@.@..
 0x00,  \    // ........
 0x30,  \    // ....@@..
 0x4A,  \    // .@.@..@.
 0x4A,  \    // .@..@.@.
 0x3C,  \    // ..@@@@..
 0x00,  \    // ........
 0x40,  \    // ......@.
 0x40,  \    // ......@.
 0x7E,  \    // .@@@@@@.
 0x40,  \    // ......@.
 0x40,  \    // ......@.
 0x3C,  \    // ..@@@@..
 0x42,  \    // .@....@.
 0x42,  \    // .@....@.
 0x24,  \    // ..@..@..
 0x00,  \    // ........
 0x02,  \    // .@......
 0x04,  \    // ..@.....
 0x08,  \    // ...@....
 0x10,  \    // ....@...
 0x20,  \    // .....@..
 0x00,  \    // ........
 0x36,  \    // .@@.@@..
 0x36,  \    // .@@.@@..
 0x00,  \    // ........
 0x00,   \    // ........
 0x00,  \    // ........
 0x00,  \    //........
 0x00,  \    // ........
 0x00,  \    // ........
 0x00,   \    // ........ 
 
 0x00
,  \    // ........
 0x20,  \    // .@@.@@..
 0x50,  \    // .@@.@@..
 0x20,  \    // ........
 0x00,   \    // ........
 
  0x00
,  \    // ........
 0x04,  \    // .@@.@@..
 0x04,  \    // .@@.@@..
 0x04,  \    // ........
 \    // ........ 0x04,   
 }; 
 
 در این زیر برنامه کد مربوط به عدد مثلا ساعت درون متغییر آرایه ای 32 خانه ای که هر خانه مربوط به یک ستون هست قرار میگیرد .

کد php:
void dat_col(unsigned char v){
   a=a*5;
   a=i+a;
   buf[i+v]=TEXT[a];

 
زیر برنامه مربوط به تایمر صفر که میکرو هر 1 میلی ثانیه به این زیر برنامه پرش کرده و دستورات در درون این زیر برنامه را اجرا میکند و عدد و علامت ها را در دات ماتریس نمایش میدهد.

کد php:
interrupt [TIM0_OVFvoid timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x00;
n++;
// Place your code here 
در دستور زیرمقدار دما از سنسور خوانده میشود

کد php:
 if(dis==1){
 if(n>500){n=0;
 temp=ds18b20_temperature(&rom_codes[0][0]);  } }
 if(dis==0){
     if(n>100){
     n=0
در دستور زیر ساعت از آیسی ds1307 خوانده میشود

کد php:
     rtc_get_time(&hour,&min,&sec);
     }}
    
      
if(dis>=2){
     if(n>100){
     n=0
در دستور زیر تاریخ میلادی از آیسی خوانده میشود
 
کد php:
  rtc_get_date(&week_day,&day,&month,&year);

     }} 


 در دستورات زیر اطلاعات در دات ماتریس نمایش داده میشود
 هر ستون توسط آیسی 2803 صفر میشود و اطلاعات  الیدی های که میخواهند روشن شوند توسط آیسی 74595 ارسال میشود     
 

کد php:
          for(i=0;i<8;i++){
           MR=0;
          MR=1;
          OE=1 
      PORTD
=col[i];
      for(j=4;j>0;j--){
       send_to_74hc595(buf[((j*8)+i-8)]);
     
           
      
}
                                             
          OE
=0;
           delay_us(500);
       
         PORTD
=0X00;
       
       
}   
 

تابع اصلی برنامه

کد php:
void main(void)

در دستورات زیر برای پیکره بندی پورت های میکرو میباشد

کد php:
 init_774hc595();
DDRD=0XFF;
PORTD=0X00;
DDRB=0XFE;
DDRC=0X00;
PORTC=0XFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125/000 kHz
TCCR0=(0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x00;
 
 
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=1;
 
// Bit-Banged I2C Bus initialization
// I2C Port: PORTC
// I2C SDA bit: 2
// I2C SCL bit: 1
// Bit Rate: 100 kHz
// Note: I2C settings are specified in the
// Project|Configure|C Compiler|Libraries|I2C menu.
i2c_init();
 
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: On
// Square wave frequency: 1Hz
rtc_init(0,1,0);
 
// 1 Wire Bus initialization
// 1 Wire Data port: PORTB
// 1 Wire Data bit: 0
// Note: 1 Wire port settings are specified in the
// Project|Configure|C Compiler|Libraries|1 Wire menu.
w1_init(); 
در دستورات زیر دما و زمان از آیسی و سنسور خوانده میشود

کد php:
ds1820_devices=w1_search(0xf0,rom_codes);
  temp=ds18b20_temperature(&rom_codes[0][0]);
  rtc_get_time(&hour,&min,&sec);
   rtc_get_date(&week_day,&day,&month,&year);
#asm("sei")
while (1)
      {
  
      
         TIMSK
=0
در دستور زیر اگر کلید مربوط به تعویض نمایش اطلاعات فشار داده شود به یک متغییر یک واحد اضافه میشود و اگر از 5 بیشتر شود صفر میشود و طبق این متغییر که در ادامه دستورات هست ساعت یا دما یا تاریخ میلادی و شمسی نمایش داده میشود .

کد php:
         if(PINC.5==0){     
         dis
++;
         for(i=0;i<32;i++)buf[i]=0;
         if(dis>5)dis=0;
         delay_ms(500);} 
اگر این کلید فشار داده شود طبق متغییر که نشان میدهد ساعت یا تاریخ در حال نمایش در دات ماتریس هست آن را تغییر میدهد و یک واحد به آن میافزاید اگر ساعت نمایش داده میشود یک واحد به ساعت اضافه میشود و اگر تاریخ نمایش داده میشود یک واحد به متغییر ماه اضافه میشود و اگر سال میلادی نمایش داده میشود یک واحد به متغییر سال اضافه میشود  

کد php:
               if(PINC.3==0){
               if(dis==0){
               hour++;
               delay_ms(300);
               if(hour>23)hour=0;
               rtc_set_time(hour,min,0);} 
              
                
if(dis==2){
               month++;
               delay_ms(300);
               if(month>12)month=1;
               rtc_set_date(1,day,month,year);}
              
                  
if(dis==3){
               year++;
               delay_ms(300);
               if(year>20)year=15;
               rtc_set_date(1,day,month,year);}
              
                

        اگر این کلید فشار داده شود طبق متغییر که نشان میدهد ساعت یا تاریخ در حال نمایش در دات ماتریس هست آن را تغییر میدهد و یک واحد به آن میافزاید اگر ساعت نمایش داده میشود یک واحد به دقیقه اضافه میشود و اگر تاریخ نمایش داده میشود یک واحد به متغییر روز اضافه میشود
      

کد php:
         if(PINC.4==0){
         if(dis==0){
         min++;
         delay_ms(300);
         if(min>59)min=0;
         rtc_set_time(hour,min,0);
         }
           if(dis==2){
               day++;
               delay_ms(300);
               if(month<7){
               if(day>31)day=1;}
               else{
               if(day>30)day=1;}
               rtc_set_date(1,day,month,year);}
        
         

     
در دستور زیر اگر متغییر dis=0  باشد ساعت در دات ماتریس نمایش داده میشود به این صورت که دهگان ویکان هر متغییر درون متغییر a  قرار میگیرد و مکان نمایش آن که در چه ستونی باشد در ورودی زیر برنامه dat_col  مشخص میشود و میکرو به این زیر برنامه پرش میکند و کد های اعداد را در میخواند و در دات ماتریس نمایش میدهد    

کد php:
           if(dis==0){
           for(i=0;i<5;i++){
           a=hour/10;                             
           dat_col
(2);
           a=hour%10;
           dat_col(8);
           a=min/10;
           dat_col(20);
            a=min%10;
           dat_col(26);
           if(PINC.0==0)
           a=13;       
           
else
           a=14;
           dat_col(14);
        
           
} } 
          در دستور زیر اگر متغییر dis=1  باشد دما در دات ماتریس نمایش داده میشود به این صورت که دهگان ویکان هر متغییر درون متغییر a  قرار میگیرد و مکان نمایش آن که در چه ستونی باشد در ورودی زیر برنامه dat_col  مشخص میشود و میکرو به این زیر برنامه پرش میکند و کد های اعداد را در میخواند و در دات ماتریس نمایش میدهد    
 

کد php:
           if(dis==1){
           for(i=0;i<5;i++){
           a=10;
           dat_col(2);
           a=temp/10;
           dat_col(9);
           a=temp%10;
           dat_col(15);
           a=15;
           dat_col(20);
           a=11;
           dat_col(25);
           }
           
      در دستور زیر اگر متغییر dis=2  باشد تاریخ میلادی در دات ماتریس نمایش داده میشود به این صورت که دهگان ویکان هر متغییر درون متغییر a  قرار میگیرد و مکان نمایش آن که در چه ستونی باشد در ورودی زیر برنامه dat_col  مشخص میشود و میکرو به این زیر برنامه پرش میکند و کد های اعداد را در میخواند و در دات ماتریس نمایش میدهد        

کد php:
            if(dis==2){
           for(i=0;i<5;i++){
            a=month/10;                            
           dat_col
(2);
           a=month%10;
           dat_col(8);
           a=day/10;
           dat_col(21);
            a=day%10;
           dat_col(27);
           a=16;       
           dat_col
(13);
           }
           
                در دستور زیر اگر متغییر dis=3  باشد سال میلادی در دات ماتریس نمایش داده میشود به این صورت که دهگان ویکان هر متغییر درون متغییر a  قرار میگیرد و مکان نمایش آن که در چه ستونی باشد در ورودی زیر برنامه dat_col  مشخص میشود و میکرو به این زیر برنامه پرش میکند و کد های اعداد را در میخواند و در دات ماتریس نمایش میدهد        
 
کد php:
           if(dis==3){
           for(i=0;i<5;i++){
            a=2;                            
           dat_col
(5);
           a=0;
           dat_col(11);
           a=year/10;
           dat_col(17);
            a=year%10;
           dat_col(23);
         
           
}
           

                 در دستور زیر اگر متغییر dis=4  باشد تاریخ میلادی به شمسی تبدیل در دات ماتریس نمایش داده میشود به این صورت که دهگان ویکان هر متغییر درون متغییر a  قرار میگیرد و مکان نمایش آن که در چه ستونی باشد در ورودی زیر برنامه dat_col  مشخص میشود و میکرو به این زیر برنامه پرش میکند و کد های اعداد را در میخواند و در دات ماتریس نمایش میدهد        
 

کد php:
            if(dis==4){
            m2s(year,month,day,&ys,&ms,&ds);
           for(i=0;i<5;i++){
           a=ms/10;                            
           dat_col
(2);
           a=ms%10;
           dat_col(8);
           a=ds/10;
           dat_col(21);
            a=ds%10;
           dat_col(27);
           a=12;       
           dat_col
(14);
         
           
}
           

         
در دستور زیر اگر متغییر dis=5  باشد سال شمسی  در دات ماتریس نمایش داده میشود به این صورت که دهگان ویکان هر متغییر درون متغییر a  قرار میگیرد و مکان نمایش آن که در چه ستونی باشد در ورودی زیر برنامه dat_col  مشخص میشود و میکرو به این زیر برنامه پرش میکند و کد های اعداد را در میخواند و در دات ماتریس نمایش میدهد        
 
 
کد php:
           if(dis==5){
           for(i=0;i<5;i++){
            a=1;                            
           dat_col
(5);
           a=3;
           dat_col(11);
           a=ys/10;
           dat_col(17);
            a=ys%10;
           dat_col(23);
         
           
}
           }
          
           delay_us
(1);
            TIMSK=1;
         
       
  
       
      
}

(آخرین ویرایش در این ارسال: ۰۲-شهریور-۱۳۹۵, ۱۲:۱۴:۰۶، توسط babyy. دلیل ویرایش: افرودن کدها در داخل تگ!!!!! )
۰۲-شهریور-۱۳۹۵, ۱۰:۳۷:۰۵
ارسال‌ها
پاسخ
تشکر شده توسط : Ghoghnus
leilooooon آفلاین
تازه وارد

ارسال‌ها: 3
موضوع‌ها: 1
تاریخ عضویت: شهریور ۱۳۹۵

تشکرها : 0
( 1 تشکر در 1 ارسال )
ارسال: #4
RE: توضیح برنامه
سلام
واقعا از محبتتون ممنونم
فقط اینکه این توضیحاتی رو که فرمودین تو یک فایل ورد داشتم.
فکر میکردم میشه به صورت خطی توضیح بدین.
 (;  (;  (;  (;  (;
۰۳-شهریور-۱۳۹۵, ۰۹:۳۳:۵۶
ارسال‌ها
پاسخ
alimogmov آفلاین
مدیر بخش
*****

ارسال‌ها: 456
موضوع‌ها: 36
تاریخ عضویت: اردیبهشت ۱۳۹۰

تشکرها : 867
( 940 تشکر در 393 ارسال )
ارسال: #5
RE: توضیح برنامه
درود و سلام

نخست آیا برنامه بدون اشکال شبیه سازی و بدون خطاست؟

دوم اینکه شما هر تکه از کد را بریدید و خودتان شرح دادید پس پرسشتان چه میشود. آیا نگاهتان این است که همین تکه کدها را خط به خط شرح دهیم؟

اگر فضولی نباشد سطح آشنایی با زبان C را بیان می کنید؟

سپاس

.

(آخرین ویرایش در این ارسال: ۰۴-شهریور-۱۳۹۵, ۰۸:۳۹:۳۳، توسط alimogmov.)
۰۴-شهریور-۱۳۹۵, ۰۸:۰۸:۲۴
ارسال‌ها
پاسخ
تشکر شده توسط : babyy, Ghoghnus


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Question [سوال] تحلیل و توضیح کد سی پلاس پلاس haricanboy 3 3,593 ۲۸-آذر-۱۳۹۲, ۱۶:۰۶:۲۹
آخرین ارسال: haricanboy
Question ### توضیح یه قطعه برنامه نسبتا ساده (جهت ارایه برای استاد !! ) #### IT.M@N 2 3,107 ۱۷-اردیبهشت-۱۳۹۱, ۱۰:۴۶:۱۲
آخرین ارسال: sjh
  درخواست ساخت الگوریتم توضیح داده شده mkh55 19 14,293 ۲۴-فروردین-۱۳۸۸, ۲۱:۱۹:۲۳
آخرین ارسال: mkh55

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS