Cần giúp Mạch hẹn giờ

wave7513

Học sinh phổ thông
#42
tặng em hy vọng em làm thành công.
Mã:
#include <REGX52.H>
#include <stdio.h>
sbit D=P3^7;  
#define  LED_timer                    P0
#define  LED_timer_dao_trung        P2
#define motor_dao P1_5
#define led P1_4  
sbit start_timer=P1^0;
sbit start_timer_daotrung=P1^1;
#define sda         P3_5
#define scl         P3_6
#define  phut                   10 //30 phut =1800
//======== (de xem mo phong cho gia tri phut =10)
//==========(làm mạch thật cho giá trị phut =1800)
unsigned char  bien_timer_daotrung=0, bien_timer=0,trang_thai_chap_hanh=0xaa;
unsigned char Display_led[10]={0xfe,0xFd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff};//
unsigned int dem_timer_50ms=0,timer_a,timer_b,dem_timer_1s;
//**********************************************
//*********************************************

  void delay(unsigned int ms)
{unsigned int n,bb;
for(n=0;n<ms;n++){for(bb=0;bb<125;bb++){;}}}
void delay_us(unsigned int us)
{
unsigned int i;
for(i=0;i<us;i++);
}
/**********************************************************************************/
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//                    CAC CHUONG TRINH CON GIAO TIEP VOI 24c04                   //
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
void start(void) //dk start: 1 su cdoi tthai tu cao xuong thap tren duong sda trong khi
   {             //duong scl dang o muc cao
   scl=1;
   sda=1;
   delay_us(2);
   sda=0;
   scl=0;
   }
void stop(void)   //dk stop: 1 su cdoi trang thai tu muc thap len cao tren duong sda trong khi duong          
    {            // slc dang o muc cao
   sda=0;
   scl=1;
   delay_us(2);
   sda=1;
   }
bit write(unsigned char x)   // gui du lieu va nhan ACK
    {
   unsigned char i;
   for(i=0;i<8;i++)
       {
      sda=(x&0x80)? 1:0;  //dua bit du lieu ra chan SDA
      scl=1;              
       delay_us(2);        
      scl=0;
      x<<=1;            //bit co trong so lon hon dc truyen truoc
       }
    sda=1;
    scl=1;             //nhan bit ACK tu SLAVER   bao hieu ket thuc mot byte du lieu
    delay_us(2);
   i=sda;
    scl=0;
    return i;
    }
unsigned char read(bit ACK) // nhan du lieu va gui ACK
{
   unsigned char Data,i;
   for(i=0;i<8;i++) // nhan vao 8 bit
     {
      scl=1;
       Data<<=1;
      Data=Data|sda;
      scl=0;
        }  
   sda=ACK;   // gui bit ACK=> sda=0
   scl=1; //master nhan/gui bit du lieu(sda) khi scl o muc cao
   delay_us(2);
   scl=0;
    delay_us(2);
   sda=1;
   return Data;//tra gia tri cho ham
}
unsigned char read_24(unsigned char diachi)
{   // doc 4 byte lien tiep tu 24c04
   
   unsigned char Data;
   start();
   write(0xa0);
   write(diachi);
   start();
   write(0xa1);
   Data = read(1);
   stop();//Stop I2C
   return Data;
}
void write_24(unsigned char diachi,unsigned char x)
{   // ghi 4 byte lien tiep x vao 24c04
   start();
   write(0xa0);
   write(diachi);
   write(x);
   stop();//Stop I2C
   delay(100);
}
//############ngat time_0  ###############
void timer0_ISR (void) interrupt 1 //ngat time_0 (tao ngat 2ms)
{ TR0 = 0;
  TH0 = 0x3c;                // 50ms
  TL0 = 0xaf;
  ///////////////////////////////////////////////
  dem_timer_50ms++;
  if(dem_timer_50ms>20){dem_timer_50ms=0; dem_timer_1s++;led=~ led;
  //========================================================
   if (trang_thai_chap_hanh==0xaa){
       if(dem_timer_1s>timer_a){motor_dao=0;dem_timer_1s=0;trang_thai_chap_hanh=~trang_thai_chap_hanh;}}
     //=========================================================
      else   {if(dem_timer_1s>timer_b){motor_dao=1;dem_timer_1s=0;trang_thai_chap_hanh=~trang_thai_chap_hanh;}}
   }
//===========================================================
TR0 = 1;
}
void main()
{
  start_timer=1;
  start_timer_daotrung=1;
  TMOD = 0x11;             // Set Mode (16-bit timer_0; 16-bit timer_1)
  TH0 = 0x3c;                // 50ms
  TL0 = 0xaf;
  ET0 = 1;                   // Enable Timer 0 Interrupts
  EA=1;
  TR0 = 1;                   // Start Timer 0 Running

  while(1){
           bien_timer= read_24(1);   if(bien_timer>7) {bien_timer=0;timer_a=phut;} // mac dinh 30 phut
          else{timer_a=(bien_timer*phut)+phut; } LED_timer=Display_led[bien_timer];
          bien_timer_daotrung= read_24(2);         if( bien_timer_daotrung>7) {bien_timer_daotrung=0;timer_b=10;}
         else{timer_b= (bien_timer_daotrung*10)+10;}LED_timer_dao_trung=Display_led[bien_timer_daotrung];
       if(start_timer==0)
      {
           delay(10);   //chong doi phim khi bam
          bien_timer++;if(bien_timer>7) {bien_timer=0;timer_a=phut;} // mac dinh 30 phut
          else{timer_a=(bien_timer*phut)+phut; }
         LED_timer=Display_led[bien_timer];
         while(start_timer==0)//cho nha phim
         delay(10);   //chong doi phim khi nha
         write_24(1,bien_timer);
           }
if(start_timer_daotrung==0)
      {
           delay(10);   //chong doi phim khi bam
          bien_timer_daotrung++;if( bien_timer_daotrung>7) {bien_timer_daotrung=0;timer_b=10;}
         else{timer_b= (bien_timer_daotrung*10)+10;}
         LED_timer_dao_trung=Display_led[bien_timer_daotrung];
         while(start_timer_daotrung==0)//cho nha phim
         delay(10);   //chong doi phim khi nha
         write_24(2, bien_timer_daotrung);
           }          
}
}
hdsd: nhấn phím MIN để cài đặt thời gian từ 30 phut đến 4 h.
nhấn phím S để cài đặt thời gian đảo trứng từ 10s đến 80s.
sau khi cài đặt dữ liệu cài đặt sẽ được lưu vào eeprom 24c04.
chân P1_4 sẽ giao động f=1hz để báo mạch đang hoạt động.
Xem đính kèm 55266
p/s:không để ý huunho đã gửi trước rồi .lỡ rồi nên để nguyên.
Bạn TDM ơi, bạn có thể cho minh xin code Hex theo mạch này được không bạn, vì mình đang rất cần cho việc làm vườn của minh ở quê, mail của minh là : Vankhoa.acpbd@gmail.com. cảm ơn bạn nhiều.
 

Longfefa

Học sinh phổ thông
#43
Chào anh chị em, e cần mua mạch hẹn giờ đảo trứng, cần tư vấn về mô tơ giảm tốc và đảo chiều động cơ. Mình đặt hàng nhiều, ủng hộ bo tự làm và chế theo yêu cầu.
 

huunho

Thạc sỹ
#44
Chào anh chị em, e cần mua mạch hẹn giờ đảo trứng, cần tư vấn về mô tơ giảm tốc và đảo chiều động cơ. Mình đặt hàng nhiều, ủng hộ bo tự làm và chế theo yêu cầu.
mach lam viec the nao? ban can may mach?
 

Longfefa

Học sinh phổ thông
#45
Mạch có thể cài đặt linh hoạt bằng thao tác bấm hiển thị trên led. Tức là có thể cài đặt linh hoạt thời gian đảo. Mo tơ giảm tốc làm việc đảo nhờ hẹn giờ. M cần mạch phù hợp với lò công nghiệp trong đó mô tơ đảo trứng có công suất lớn.
 

Quảng cáo Google