قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

Hussain800
:: مهندس متميز ::
تاريخ التسجيل: Apr 2012
المشاركات: 635
نشاط [ Hussain800 ]
قوة السمعة:
قديم 04-03-2019, 01:40 AM المشاركة 9   
افتراضي



السلام عليكم ورحمة الله وبركاته
بارك الله فيك اخى وبارك الله فيك على اهتمامك الكبير ولاكن للاسف الملف لم يشتغل معى الملف يبدو انو فيه خطا ما ؟؟ يعنى الارقام للدسبلى لم تظهر فقط يظهر ايام الاسبوع فقط ..
تانيا ياريت نشوف ملف السكتش انتا هنا وضعت ملف الهكس فقط .. فااا ياريت تورينا السكتش كومبايلر للاردوينو لكى نتمكن من التعديل عليه
لانو انا اشتغل برمجة الاردوينو و الدسبلى اللى عندى2.3 انش و كلو انود فاا اريد ان اغير فى الكود لكى يتناسب مع الدسبلى اللى عندى لانو انتا مبرمج على كومن كاتود .
وبارك الله فيك اخى وجزاك الله خير..
والله الموفق

اعلانات

ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 04-03-2019, 02:45 AM المشاركة 10   
افتراضي


لا اخي الكود مافي اي مشكلة بس انا لازم كان نوه انك اول مرة بتنزل الكود لازم تكبس set لمدة خمس ثواني لكي يتم الكتابة على eeprom لكي يعرف المتحكم ان كان سيعرض نظام 12 او 24 ساعة ولان الكتابة على eeprom تتم من داخل البرنامج فيجب عمل هذه الخطوة فقط عند اول مرة تحمل فيها الكود .
بالنسبة لوحدات الاظهار يلي انا مستخدمهم ايضا كوماند انود يمكنك التاكد.
اذا كانت وحدات الاظهار لديك صغيرة فيمكنك الاستغناء عن uln2803 و udn2981 والتعديل قليلا على الكود لان هذه الايسيات فقط لرفع التيار لتعمل مع وحدات الاظهار الكبيرة


التعديل الأخير تم بواسطة : ahmadazez بتاريخ 04-03-2019 الساعة 02:58 AM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 04-03-2019, 02:47 AM المشاركة 11   
افتراضي


كود:
#include <mega328.h>
#include <stdlib.h>
#include <delay.h>

#define SH PORTB.0    
#define DS PORTB.1       
#define ST PORTB.2

#define SH1 PORTB.3
#define DS1 PORTB.4       
#define ST1 PORTB.5
// I2C Bus functions
#include <i2c.h>

// DS1307 Real Time Clock functions
#include <ds1307.h>

unsigned char week[9]={128,64,32,16,8,4,2,0};  //مصفوفة لايام الاسبوع
unsigned char out_pw[7]={128,64,32,16,8,4};    //مصفوفة لتشغيل وحدات الاظهار
unsigned char seg0=~192,seg1=~249,seg2=~164,seg3=~176,seg4=~153,seg5=~146,seg6=~130, //مصفوفة الارقام التي تظهر على وحدات الاظهار
              seg7=~248,seg8=~128,seg9=~144,seg10=~255,seg11=~156,seg12=~198; 
unsigned char strh[6],strh12[6],strd[6],stry[6],strr[6]; //مصفوفات لوضع قيم اليوم والتاريخ والسنة بعد تحويلها من النظام الثنائي الى النظام العشري            
unsigned char wek,h,m,s,d2,m2,y2,h12,G1=0,conter=0,SET=0; //المتغيرات المستخدمة ضمن البرنامج             
unsigned char segmant_week,segmant,segmant1=0,segmant2=0,segmant3=0,segmant4=0,X=0,X1=0,Y=0,Z=0,W=0;                
unsigned int  Change=0,SET_CONTR=0,set_end=0;                                   
unsigned char TM=0,G=0,off=1,Se=0,INC=0,DEC=0,SEE=0,SEE1=0,Butt=0,Read_wek=0,memory1; 
unsigned int ADC_time=0,time12_24=0;
float hetr=0;
eeprom char memory;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{

  TCNT0=0xF8;
        
        Change++;
        conter++;
       if(SET!=0)SET_CONTR++; 
       if(SEE==1)set_end++;
       ADC_time++; 
       if(PIND.0==0&&TM==0)time12_24++;

}

// Voltage Reference: AREF pin
#define ADC_VREF_TYPE ((0<<REFS1) | (0<<REFS0) | (0<<ADLAR))

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}

void divide_h()   //تحويل قيمة متغيرات الوقت من الباينري ووضعها في متغيرات تمثل قيم الأحاد والعشرات 
       {
         strh[0]=(h/10);
         strh[1]=(h%10); 
         strh[2]=(m/10);
         strh[3]=(m%10);         
       } 
       
 void divide_h12()   //تحويل قيمة متغيرات الوقت من الباينري ووضعها في متغيرات تمثل قيم الأحاد والعشرات 
       {
         strh12[0]=(h12/10);
         strh12[1]=(h12%10); 
         strh12[2]=(m/10);
         strh12[3]=(m%10);         
       }      
  /////////////////////////////////////////////////////////////////////     
void divide_d()  //تحويل قيمة متغيرات التاريخ من الباينري ووضعها في متغيرات تمثل قيم الأحاد والعشرات 
       {
         strd[0]=(d2/10);
         strd[1]=(d2%10);
         strd[2]=(m2/10);
         strd[3]=(m2%10);
       }
    ////////////////////////////////////////////////////////////////////   
void divide_Y()    //تحويل قيمة متغيرات السنة  من الباينري ووضعها في متغيرات تمثل قيم الأحاد والعشرات 
      { 
        stry[0]=(2);
        stry[1]=(0);
        stry[2]=(y2/10);
        stry[3]=(y2%10);
      }       
 ///////////////////////////////////////////////////////////////
void out_data (unsigned char B)  //اخراج الداتا على الشيفت ريجيستر
    {
      switch (B)
          { 
                        
                          
            case 0: segmant=seg0;
              if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;} //لوضع الفاصلة عند عرض التاريخ فقط
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               }; break;
                              
            case 1: segmant=seg1; 
             if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;}
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break; 
                           
            case 2: segmant=seg2;
              if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;}
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break;
                            
            case 3: segmant=seg3;
              if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;}
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break; 
                           
            case 4: segmant=seg4; 
              if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;}
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break; 
                           
            case 5: segmant=seg5;
              if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;}
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break; 
                           
            case 6: segmant=seg6;
              if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;}
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break;  
                           
            case 7: segmant=seg7;
              if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;}
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break;  
                           
            case 8: segmant=seg8;
              if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;}
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break;  
                           
            case 9: segmant=seg9;
              if((Y==1||Y==3)&&(Change>=5000&&Change<8000)){segmant=segmant^0b10000000;}
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break;  
             //////////////////////////              
             case 10: segmant=seg10;  //وحدة السفن سيكمنت مطفئة
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break;
             /////////////////////////            
             case 11: segmant=seg11; //اظهار الدائرة التي تمثل اشارة درجة الحرارة
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break;
             //////////////////////////              
              case 12: segmant=seg12; //اظهار حرف الذي يمثل درجة الحرارة:C
             for (X=0;X<8;X++)
               {
                 DS=segmant&0b10000000; SH=1;SH=0; segmant=segmant<<1;
               };break; 
             ////////////////////                 
          }; 
         ST=1;ST=0;
    }      
  //////////////////////////////////////////////////////////////////////////////
void out_week (unsigned char BB)  //اظهار اليوم على الليدات 
    {
      switch (BB)
          { 
                        
                          
            case 1: segmant_week=week[0];
              if(h>=12){segmant_week=segmant_week^0b00000001;} //لتحديد وتشغيل ليد قبل الظهر او بعد الظهر
             for (X1=0;X1<8;X1++)
               {
                 DS1=segmant_week&0b00000001; SH1=1;SH1=0; segmant_week=segmant_week>>1;
               }; break;
                              
            case 2: segmant_week=week[1]; 
              if(h>=12){segmant_week=segmant_week^0b00000001;}
             for (X1=0;X1<8;X1++)
               {
                 DS1=segmant_week&0b00000001; SH1=1;SH1=0; segmant_week=segmant_week>>1;
               };break; 
                           
            case 3: segmant_week=week[2]; 
              if(h>=12){segmant_week=segmant_week^0b00000001;}
             for (X1=0;X1<8;X1++)
               {
                 DS1=segmant_week&0b00000001; SH1=1;SH1=0; segmant_week=segmant_week>>1;
               };break; 
                            
            case 4: segmant_week=week[3]; 
             if(h>=12){segmant_week=segmant_week^0b00000001;}
             for (X1=0;X1<8;X1++)
               {
                 DS1=segmant_week&0b00000001; SH1=1;SH1=0; segmant_week=segmant_week>>1;
               };break;  
                           
            case 5: segmant_week=week[4]; 
              if(h>=12){segmant_week=segmant_week^0b00000001;}
             for (X1=0;X1<8;X1++)
               {
                 DS1=segmant_week&0b00000001; SH1=1;SH1=0; segmant_week=segmant_week>>1;
               };break; 
                           
            case 6: segmant_week=week[5]; 
              if(h>=12){segmant_week=segmant_week^0b00000001;}
             for (X1=0;X1<8;X1++)
               {
                 DS1=segmant_week&0b00000001; SH1=1;SH1=0; segmant_week=segmant_week>>1;
               };break; 
                           
            case 7: segmant_week=week[6]; 
             if(h>=12){segmant_week=segmant_week^0b00000001;}
             for (X1=0;X1<8;X1++)
               {
                 DS1=segmant_week&0b00000001; SH1=1;SH1=0; segmant_week=segmant_week>>1;
               };break;   
                           
            case 8: segmant_week=week[7]; 
              if(h>=12){segmant_week=segmant_week^0b00000001;}
             for (X1=0;X1<8;X1++)
               {
                 DS1=segmant_week&0b00000001; SH1=1;SH1=0; segmant_week=segmant_week>>1;
               };break;  
            
                    
          }; 
         ST1=1;ST1=0;
    } 
  ////////////////////////////////////////////////////////////////////////////////////////
void Button()   //تابع يتم استدعائه عندما نريد ضبط الوقت عن طريق السويتشات
     {      
        divide_h();                               
         divide_d(); 
         divide_Y();
       
       if(PIND.0==0&&SEE1==0&&TM==0){Se=1;SEE=1;set_end=0;}  // سويتش بداية الضبط       
           if(Se==1&&PIND.0==1){Se=0;SET++;}
             if(TM==1)Se=0;       
         if(PIND.0==1)SEE1=0;      
             
             if(SET==1||SET==2||time12_24!=0&&TM==0){Change=5;} //لاظهار الساعة والدقائق فقط عند الضبط دون التبديل بين التاريخ ودرجة الحرارة
             if(SET==3||SET==4)Change=5000;              //لاظهار اليوم والشهر فقط دون التبديل بين الوقت ودرجة الحرارة اثناء الضبط
             if(SET==5)Change=12000;                    //لاظهار السنة عند الضبط دون التبديل بين الوقت والتاريخ ودرجة الحرارة
                 
             if((SET==7||set_end>=6000)&&(TM==0))//ارسال القيم الى اي سي الوقت بعد الانتهاء من ضبط جميع المتغيرات
               {                      //للوقت والتاريخ والسنة وايام الاسبوع او اذا ضغطنا سويتش بداية
                 SET=0;               //الضبط ولم نتابع الضبط لمدة تزيد عن حمس ثواني عندها تعود الساعة 
                 Change=0;            //للعرض عند اخر قيم تم حفظها
                 SET_CONTR=0;
                 SEE=0;
                 Se=0;
                 set_end=0; 
                 SEE1=1;
                 Butt=0;
                 time12_24=0;
                 TM=0; 
                    
                 rtc_set_time(h,m,s=1);            
                 rtc_set_date(wek,d2,m2,y2); 
                 rtc_get_time(&h,&m,&s);            
                 rtc_get_date(&wek,&d2,&m2,&y2);
                 G1=s; 
                 h12=h; 
                 if(h>12)h12=h-12; 
                 if(h==0)h12=12; 
                 divide_h12();
                 memory1=memory; 
                 out_week(wek);
               } 
        ///////////////////////////////////////////////////////////////////////         
         if(SET==1&&SET_CONTR>500)  {memory1=0;strh[0]=10;strh[1]=10;}  //من اجل وميض الخانة التي نقوم بضبطها
         if(SET==1&&SET_CONTR>1000) {SET_CONTR=0;}
         if(SET==2&&SET_CONTR>500)  {memory1=0;strh[2]=10;strh[3]=10;}
         if(SET==2&&SET_CONTR>1000) {SET_CONTR=0;}
         if(SET==3&&SET_CONTR>500)  {strd[0]=10;strd[1]=10;}
         if(SET==3&&SET_CONTR>1000) {SET_CONTR=0;}
         if(SET==4&&SET_CONTR>500)  {strd[2]=10;strd[3]=10;}
         if(SET==4&&SET_CONTR>1000) {SET_CONTR=0;}
         if(SET==5&&SET_CONTR>500)  {stry[0]=10;stry[1]=10;stry[2]=10;stry[3]=10;}
         if(SET==5&&SET_CONTR>1000) {SET_CONTR=0;}
         if(SET==6&&SET_CONTR>500)  {out_week(8);}
         if(SET==6&&SET_CONTR>1000) {SET_CONTR=0;out_week(wek);}
        /////////////////////////////////////////////////////////////////
       if(SET==1&&INC==0&&PIND.1==0)  //استخدام السويتشات من اجل ضبط الوقت والتاريخ وايام الاسبوع
          {
           memory1=0;INC=1;h++;set_end=0; 
           if(h>23)h=0;
           h12=h;
           out_week(wek);
          } 
         if(PIND.1==1)INC=0;  
         
       if(SET==1&&DEC==0&&PIND.2==0)
          {
           memory1=0;DEC=1;h--;set_end=0;
           if(h==255)h=23;
           h12=h; 
           out_week(wek);
          }
        if(PIND.2==1)DEC=0;
         
         if(SET==2&&INC==0&&PIND.1==0){set_end=0;INC=1;m++;}
         if(PIND.1==1)INC=0; 
         if(m==60)m=0;
         if(SET==2&&DEC==0&&PIND.2==0){set_end=0;DEC=1;m--;}
         if(PIND.2==1)DEC=0;
         if(m==255)m=59;
                 
         if(SET==3&&INC==0&&PIND.1==0){set_end=0;INC=1;d2++;}
         if(PIND.1==1)INC=0; 
         if(d2>31)d2=1;
         if(SET==3&&DEC==0&&PIND.2==0){set_end=0;DEC=1;d2--;}
         if(PIND.2==1)DEC=0;
         if(d2==0)d2=31;
         if(SET==4&&INC==0&&PIND.1==0){set_end=0;INC=1;m2++;}
         if(PIND.1==1)INC=0; 
         if(m2>12)m2=1;
         if(SET==4&&DEC==0&&PIND.2==0){set_end=0;DEC=1;m2--;}
         if(PIND.2==1)DEC=0;
         if(m2==0)m2=12;
         if(SET==5&&INC==0&&PIND.1==0){set_end=0;INC=1;y2++;}
         if(PIND.1==1)INC=0; 
         if(y2>99)y2=0;
         if(SET==5&&DEC==0&&PIND.2==0){set_end=0;DEC=1;y2--;}
         if(PIND.2==1)DEC=0;
         if(y2==255)y2=99; 
                 
         if(SET==6&&INC==0&&PIND.1==0){set_end=0;INC=1;wek++;}
         if(PIND.1==1)INC=0; 
         if(wek>=8)wek=1;
         if(SET==6&&DEC==0&&PIND.2==0){set_end=0;DEC=1;wek--;}
         if(PIND.2==1)DEC=0;
         if(wek==0)wek=7;
         
         
     }  

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

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=Out Bit6=Out Bit5=Out Bit4=Out Bit3=Out Bit2=Out Bit1=Out Bit0=Out 
DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit7=0 Bit6=0 Bit5=0 Bit4=0 Bit3=0 Bit2=0 Bit1=0 Bit0=0 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (1<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=0 Bit5=T Bit4=T Bit3=P Bit2=P Bit1=P Bit0=P 
PORTD=(1<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
// Timer Period: 1.024 ms
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (1<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0xF8;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2A output: Disconnected
// OC2B output: Disconnected
ASSR=(0<<EXCLK) | (0<<AS2);
TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20);
TCCR2B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);

// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1);

// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (0<<TOIE2);

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: Off
// Interrupt on any change on pins PCINT8-14: Off
// Interrupt on any change on pins PCINT16-23: Off
EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
EIMSK=(0<<INT1) | (0<<INT0);
PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0);

// USART initialization
// USART disabled
UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
// Digital input buffer on AIN0: On
// Digital input buffer on AIN1: On
DIDR1=(0<<AIN0D) | (0<<AIN1D);

// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: ADC Stopped
// Digital input buffers on ADC0: On, ADC1: Off, ADC2: Off, ADC3: Off
// ADC4: Off, ADC5: Off
DIDR0=(1<<ADC5D) | (1<<ADC4D) | (1<<ADC3D) | (1<<ADC2D) | (1<<ADC1D) | (0<<ADC0D);
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);

// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

// Bit-Banged I2C Bus initialization
// I2C Port: PORTD
// I2C SDA bit: 5
// I2C SCL bit: 4
// 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);

// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/1024k
// Watchdog timeout action: Reset
#pragma optsize-
WDTCSR=(0<<WDIF) | (0<<WDIE) | (1<<WDP3) | (1<<WDCE) | (1<<WDE) | (0<<WDP2) | (0<<WDP1) | (1<<WDP0);
WDTCSR=(0<<WDIF) | (0<<WDIE) | (1<<WDP3) | (0<<WDCE) | (1<<WDE) | (0<<WDP2) | (0<<WDP1) | (1<<WDP0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Global enable interrupts
#asm("sei")

rtc_get_time(&h,&m,&s);            //  1307عند بداية التشغيلDS للقراءة من 
rtc_get_date(&wek,&d2,&m2,&y2);
G1=s;

h12=h; 
if(h>12)h12=h-12; 
if(h==0)h12=12; 
divide_h(); 
divide_h12();                          
divide_d();
divide_Y();
memory1=memory;
out_week(wek);

hetr=read_adc(0); 
hetr=hetr*5000.0/1023.0;   
 ftoa(hetr,0,strr);  
 strr[0]=strr[0]-48;
 strr[1]=strr[1]-48; 
 strr[2]=11; 
 strr[3]=12;
 
 
while (1)
      {
        #asm("wdr")
       
        
       if(PIND.0==0)Butt=1;      
       if(Butt==1)Button(); 
        if(PIND.0==0&&TM==0&&time12_24>=4000)
        { 
          TM=1; 
          memory=!memory; 
          memory1=memory; 
        }
        if(PIND.0==1&&TM==1){TM=0;time12_24=0;}
        //////////////////////////////////////////////////////////  
        if(h==0&&Read_wek==0)    //لقراءةوعرض اليوم والتاريخ عند الساعة 12 ليلا
             {
              Read_wek=1;
              rtc_get_date(&wek,&d2,&m2,&y2);
              out_week(wek);           
             }
             else if(h!=0) Read_wek=0;
        //////////////////////////////////////////////////////////////////////////////// 
        
              if(ADC_time>=65000) //قراءة قيمة حساس الحرارة كل دقيقتين وحساب المعادلة الخاصة بالحساس ووضع القيم في المتغيرات
               { 
                ADC_time=0;
                    
                hetr=read_adc(0); 
                hetr=hetr*5000.0/1023.0; 
                ftoa(hetr,0,strr);  
                 strr[0]=strr[0]-48;
                 strr[1]=strr[1]-48; 
                 strr[2]=11;
                 strr[3]=12;           
               }      
        /////////////////////////////////////////////////////////////     

        
        if(G==0&&PIND.7==1){G=PIND.7;G1++;}  //قراءة الوقت من الايسي كل 60 ثانية
        if(PIND.7==0)G=0;
        if(G1>=60)
          {
            G1=0;
            rtc_get_time(&h,&m,&s);
            rtc_get_date(&wek,&d2,&m2,&y2); 
            out_week(wek);
            G1=s; 
            h12=h;
            if(h>12)h12=h-12; 
            if(h==0)h12=12;
            divide_h();                             //استدعاء تابع تقسيم الوقت
            divide_h12();                           //استدعاء تابع تقسيم الوقت لنظام 12 ساعة
            divide_d();                             //استدعاء تابع تقسيم التاريخ 
            divide_Y();                            //استدعاء تابع تقسيم السنة      
          }   
        ////////////////////////////////////////////////////////////////////////////////  
        
         if(off==1)
           { 
             off=0; 
             
            if(memory1==0)segmant1=strh[Y];        //وضع خانة الوقت الحالية في متغير لعرضها على وحدات الاظهار لنظام 24 ساعة  
            else if(memory1==1)segmant1=strh12[Y]; //وضع خانة الوقت الحالية في متغير لعرضها على وحدات الاظهار لنظام 12 ساعة
             
             segmant2=strd[Y];   //وضع خانة التاريخ الحالية في متغير لعرضها على وحدات الاظهار 
             segmant=stry[Y];   //وضع خانة السنة في متغير لعرضها اثناء ضبط السنة فقط
             segmant3=strr[Y];   //وضع خانة الحرارة الحالية في متغير لعرضها على وحدات الاظهار
             segmant4=out_pw[Y]; //لتشغيل وحدة الاظهار المطلوبة 
             ////////////////////////////////////////////////////////

             for (Z=0;Z<8;Z++) //ارسال بايت الى الشيفت ريجيستر لتشغيل وحدات الاظهار بالتسلسل
                   {           //مع ملاحظة اننا وصلنا الشيفت ريجيستر الخاص بالبيانات مع الشيفت
                               //ريجيستر الخاص بتفعيل وحدات الاظهار فهنا نقوم فقط بارسال البايت 
                              // لرقم الوحدة التي سوف يكون دورها بالتشغيل وعند ارسال البيانات
                              //نقوم باخراج القيمة للداتا + تشغيل وحدة الاظهار مع بعض
                              
                    DS=segmant4&0b00000001;SH=1;SH=0;segmant4=segmant4>>1;
                   };
                         
            ////////////////////////////////////////////////////////////////////
                          
              if(Change<5000){out_data(segmant1);PORTD.6=PIND.7;} //اظهار الوقت لمدة اربع ثواني + تشغيل واطفاء ليد الثواني
              if(Change>=5000&&Change<8000){out_data(segmant2);PORTD.6=0;} //اظهار التاريخ لمدة ثلاث ثواني + اطفاء ليد الثواني
              if(Change>=8000&&Change<11000)out_data(segmant3);   //اظهار درجة الحرارة لمدة ثلاث ثواني 
              if(Change>=12000&&SET==5)out_data(segmant);        //لضبط السنة وحفظها دون عرضها اثناء عمل الساعة
              if(Change>=11000&&SET!=5)Change=0;                   //عودة الاظهار من البداية
               Y++;     //متغير اختيار وحدة الاظهار التي تعمل الان وهم اربع وحدات اضهار او ستة اذا كنا نريد وضع وحدتي اظهار اخرى لاظهار الثواني
            /////////////////////////////////////////////////////////////////////////////////
             
           }
        ////////////////////////////////////////////////////////////////////////////  
                                
         if(conter>=3) //تأخير زمني اربعة ميلي ثانية بين عرض كل وحدة اظهار
          { 
           conter=0;
           if(Y>=4)Y=0; //عند الانتهاء من عرض وحدة الاظهار الاخيرة نعود من البداية
           off=1;       // 6ونخفض قيمة الكاونتر من اربعة الى ثلاثة او اثنان =Yاذا اردنا عرض الثواني نضع قيمة 
                        //وهي قيمة التأخير الزمني بين عرض كل وحدة اظهار لكي لانشعر برجفة بوحدات الاظهار
           //////////////////////////////////////////////////////////
           for (W=0;W<16;W++)  //لاطفاء وحدات الاظهار قبل عرض رقم اخر لكي لايحدث تداخل بالارقام                               
                 { 
                   DS=0;
                   SH=1;
                   SH=0;
                   
                 };  
              ST=1;ST=0; 
                
           } 

      }
}


Hussain800
:: مهندس متميز ::
تاريخ التسجيل: Apr 2012
المشاركات: 635
نشاط [ Hussain800 ]
قوة السمعة:
قديم 04-03-2019, 03:40 AM المشاركة 12   
افتراضي


السلام عليكم ورحمة الله وبركاته
اخى حملت الكود يعنى ملف الهكس وشغلت على البروتس وضغطت حتى اكتر من خمس ثوانى على set ولاكن ابا يشتغل نفس الشى نفس المشكل
غريب فى المعالج السابق atmega 8 اشتغل ؟؟
المهم الرجاء التجريب اخى
والله الموفق


ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 04-03-2019, 03:47 AM المشاركة 13   
افتراضي


حملت ملف البروتوث الجديد ؟
انا شغال ادامي اذا بدك بصورلك فيديو شو عم يطلع عندك بالضبط عل شاشة


ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 04-03-2019, 03:56 AM المشاركة 14   
افتراضي


تاكد كمان من توصيل ds1307 لان التوصيل مختلف عن التوصيل في atmega 8


Hussain800
:: مهندس متميز ::
تاريخ التسجيل: Apr 2012
المشاركات: 635
نشاط [ Hussain800 ]
قوة السمعة:
قديم 05-03-2019, 01:17 AM المشاركة 15   
افتراضي


السلام عليكم ورحمة الله وبركاته
اخى مابدو يشتغل على 328 بينها على atmega8 يشتغل بشكل جيد وهده الصورة اللى طلعتلى؟؟

والله الموفق


ahmadazez
:: مهندس جيد ::
تاريخ التسجيل: Mar 2009
المشاركات: 251
نشاط [ ahmadazez ]
قوة السمعة:
قديم 05-03-2019, 06:03 PM المشاركة 16   
افتراضي


جرب هذا الملف اخي اذا ماشتغل معك نزل بروتوث 8.3 وخبرني بالنتيجة

https://up.top4top.net/downloadf-1159wzkac1-rar.html



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:19 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)