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

huunho

Thạc sỹ
#31
ko hướng đãn sử dụng à bạn?
 

hoangtruongh

Học sinh trung cấp
#34
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.
Anh có thể code lại cho thời gian đảo thấp nhất là 1s được ko ạ.em chỉ cần xung để kích scr thôi ạ.nhờ anh giúp cảm ơn anh nhiều .cho em xin luôn file hex nhe
 
Sửa lần cuối:

hieponline1

Học sinh phổ thông
#36
Cái này hay đây, nhưng sao không làm cho nó linh hoạt trong việc điều chỉnh thời gian nhỉ nghĩa là ng dùng có thế cái đặt thời gia tùy ý và hiển thị thời gian trên led 7 đoạn và đém lùi thời gian, nếu bổ sung thêm cái đó thì quá tuyệt #huunho
 

vannhut933

Học sinh phổ thông
#37
em chào các anh trong page
em có 1 vấn đề cần các anh giúp ạ!

emmuốn làm lệnh như sau:
cho IC AT89S52 chạy đếm thời gian 24 giờ.
đến 6 giờ thì 1 chân sẽ xuất ra làm led 1 sáng.
đến 12 giờ thì thêm 1 chân xuất ra làm led 2 sáng.
đến 18 giờ thì thêm 1 chân xuất ra làm led 3 sáng.

em cảm ơn các anh ạ!
 

Thoai2017

Học sinh phổ thông
#40
em muốn thay đổi thời gian đảo trứng thì xin phép sửa code của bác Huunho tí đc k nhỉ
 

Quảng cáo Google