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

congthanhpr

Học sinh phổ thông
#21
để đơn giản thì mình code cho mạch điều khiển 1 role , có 1 nút ấn, vài con led đơn để lựa chọn thời gian trễ: ví dụ 4 led cho 4 mức : 30', 1h,1h30,2h.
Thé có được không?
Nếu hiển thị led 7 đoạn mà bạn không biết lắp mạch lại phải sửa thì chết mêt
Mà thời gian chọn xong có cần lưu lại không? ko lưu thì mất điện lại chọn lại
Dạ vâng, càng đơn giản càng tốt ạ
 

huunho

Thạc sỹ
#22
ok, thế thời gian mặc định là 2h nhé?
 

huunho

Thạc sỹ
#24
ok,mai code cho bạn vậy, bây giờ cứ đảo bằng tay đi
 

huunho

Thạc sỹ
#26
làm rồi cơ mà chưa chạy. anh đang nghiên cứu lại
 

huunho

Thạc sỹ
#28
em có cài proteus 7.8 ko? cài vào chạy mô phỏng. em ở hà nội à?
 

huunho

Thạc sỹ
#29
đây là code và sơ đồ mạch dảo trứng, led báo nhấp nháy sau mỗi 5s để biết là mạch đang chạy nhé, mặc định là 120 phút đảo 1 lần
 

Đính kèm

Sửa lần cuối:

tdm

Kỹ sư
#30
Dạ vâng, càng đơn giản càng tốt ạ
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.
dao trung.png

p/s:không để ý huunho đã gửi trước rồi .lỡ rồi nên để nguyên.
 

Đính kèm

Sửa lần cuối:

Quảng cáo Google