Thông báo

Collapse
No announcement yet.

lịch vạn niên

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • lịch vạn niên

    code mở 100%.
    bạn nào thích có thể làm một cái treo ở nhà cho vui.
    Attached Files
    |

  • #2
    Nguyên văn bởi chjpchjp1991
    Bài này hay đó...pót cả codientu.org và dientuvietnam.net cơ ak..mình mang về pót blog phát nhé..cho anh em cùng học hỏi..còn mạch mình sẽ vẽ lại làm thử xem chạy ngon không..hí hí...có chỗ DS18B20 mình thấy sao không có thêm con ADC0804 nhỉ...vì 8051 không có ADC..
    dùng ds18b20 thì không cần con ADC0804.
    code mở bạn tùy ý sử dụng.
    |

    Comment


    • #3
      các chân abcdefg lại với nhau, còn các chân kia để quét led, còn cụm 4 con thì nối sẵn 4 con rồi, nối thêm 1 cụm nữa là đc 8 con
      SĐt: 01238004961

      Comment


      • #4
        Bản code viết trên chương trình C này có dung lương lớn hơn 8k ở trong 89s52 thì nạp làm sao được các chuyên gia.
        Last edited by guynh; 07-05-2013, 17:09.

        Comment


        • #5
          Nguyên văn bởi tdm Xem bài viết
          code mở 100%.
          bạn nào thích có thể làm một cái treo ở nhà cho vui.
          bạn ơi , mạch này chạy bị delay vài giây. ko biết làm mạch thật có bị delay ko thế??

          Comment


          • #6
            sao mạch chạy được vài giây, là nó bị trễ vậy ??

            Comment


            • #7
              Haibk91 cho mình hỏi xí,mình thấy trong file hex nó có dung lượng là lớn hơn 8k của con chip 89s52 thì làm sao mà nạp được vậy. Bạn trả lời giúp mình với.hi.

              Comment


              • #8
                Nguyên văn bởi guynh Xem bài viết
                Haibk91 cho mình hỏi xí,mình thấy trong file hex nó có dung lượng là lớn hơn 8k của con chip 89s52 thì làm sao mà nạp được vậy. Bạn trả lời giúp mình với.hi.
                file hex do máy tính hiển thị dung lượng khác với file hex nạp cho VDK. Nguyên nhân tại sao thì mình ko rành lắm..>khi bạn nap bằng mạch nạp, thì nó hiển thị dung lượng nạp cho rom chính xác hơn. Lúc trước, mình cũng có file nạp 23k. nhưng khi nạp vào VDK, thì chương trình nạp hiển thị dung lượng có 5K ak.

                Comment


                • #9
                  Có bạn bạn nào xử lý giúp mình được code này cho ra file hex được không> Mình dịch toàn báo lỗi thôi.

                  #include <at89x52.h>
                  #include <stdio.h>
                  #include <INTRINS.H>
                  #include <ds1307.c>

                  sbit SET = P3^3;
                  sbit DOWN = P3^2;
                  sbit UP = P3^1;
                  sbit MODE = P3^0;
                  sbit WRADC = P0^7;
                  // 0 1 2 3 4 5 6 7 8 9 - off
                  unsigned char code ma_bcd[14] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 ,0xBF,0xFF}; // Common Anode
                  unsigned char hour, min, sec, day, date, mon, year, adate, amon;
                  unsigned char temp,i,j,chedo, mode, et1,x,dem;
                  unsigned int tempx;
                  bit bit_nhay;
                  unsigned char ledData[8];
                  unsigned char code ledPort[8] = {0xFE,0xFD,0xFB,0xF7,0x7F,0xBF,0xDF,0xEF};
                  unsigned char code dayOfMon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
                  unsigned char code numMonAl[37] = {0x01,0x12,0x03,0x14,0x05,0x06,0x17,0x08,0x19,0x0A ,0x1B,0x0C,0x11,0x02,0x13,0x04,0x15,0x06,0x17,0x08 ,0x09,0x19,0x0A,0x1B,0x0C,0x11,0x02,0x13,0x14,0x05 ,0x16,0x07,0x08,0x09,0x1A,0x0B,0x1C};

                  void delay(unsigned int d);
                  void quetLed(void);
                  void scanKey(void);
                  void chonCheDo(void);

                  // tao tre
                  void delay(unsigned int d)
                  {
                  while(d--);
                  }

                  unsigned char readAdc(void)
                  {
                  WRADC = 0;
                  P2 = 0xFF;
                  delay(100);
                  return(P2);
                  }
                  // Quet LED
                  void quetLed(void)
                  {
                  for(j=0; j<20; j++)
                  {
                  for(i=0;i<8;i++)
                  {
                  P1 = ledPort[i]; // Cho phep led1
                  P0 = ledData[i]; // Hien thi chuc gio
                  delay(10); // Tre 10 chu ki

                  P1 = 0xFF; // tat Led
                  P0 = 0XFF; // tat led
                  }
                  }
                  }

                  unsigned int soNgayDl(unsigned char dd,unsigned char mm,unsigned char yy)
                  {
                  unsigned int ddate=0;
                  for(i=13;i<yy;i++)
                  {
                  ddate+=365;
                  if(i%4==0)ddate++;
                  }
                  for(j=1;j<mm;j++)
                  {
                  ddate += (unsigned int) (dayOfMon[j-1]);
                  if((i%4==0)&(j==2))ddate++; // Nam nhuan
                  }
                  ddate += dd;
                  return (ddate);
                  }
                  // Tinh am lich
                  void amLich(void)
                  {
                  unsigned int numDateDl,sttAmon,dateAl;
                  unsigned char i;
                  numDateDl = soNgayDl(date,mon,year)-40;
                  sttAmon = (numDateDl*2)/59;
                  amon = numMonAl[sttAmon]&0x0F; // Thang Al
                  dateAl = numDateDl;
                  for(i=0;i<sttAmon;i++)
                  {
                  if((numMonAl[i]&0x10)==0x10)
                  dateAl -= 30;
                  else
                  dateAl -= 29;

                  }
                  adate = numDateDl - ((sttAmon*59)/2); // Ngay Al
                  }

                  // chon che do -- dua du lieu ra bo dem hien thi
                  void chonCheDo(void)
                  {
                  if(mode == 0)
                  {
                  rtcReadTime(&hour,&min,&sec);
                  rtcReadDate(&date,&mon,&year);
                  if((hour==0)&(min==0)&(sec<3))amLich();
                  }
                  if(chedo==1)
                  {
                  ledData[0] = ma_bcd[hour/10];
                  ledData[1] = ma_bcd[hour%10];
                  ledData[2] = ma_bcd[min/10];
                  ledData[3] = ma_bcd[min%10];
                  ledData[4] = ma_bcd[sec/10];
                  ledData[5] = ma_bcd[sec%10];
                  ledData[6] = 0xFF;
                  ledData[7] = 0xFF;
                  }
                  if(chedo==2)
                  {
                  ledData[0] = ma_bcd[date/10];
                  ledData[1] = ma_bcd[date%10];
                  ledData[2] = ma_bcd[mon/10];
                  ledData[3] = ma_bcd[mon%10];
                  ledData[4] = ma_bcd[2];
                  ledData[5] = ma_bcd[0];
                  ledData[6] = ma_bcd[year/10];
                  ledData[7] = ma_bcd[year%10];
                  }
                  if(chedo==3)
                  {
                  tempx = readAdc()/2;
                  ledData[0] = ma_bcd[adate/10];
                  ledData[1] = ma_bcd[adate%10];
                  ledData[2] = ma_bcd[amon/10];
                  ledData[3] = ma_bcd[amon%10];
                  ledData[4] = ma_bcd[temp/10];
                  ledData[5] = ma_bcd[temp%10];
                  ledData[6] = 0x9c; // o
                  ledData[7] = 0xC6; // C
                  }
                  if (bit_nhay&(mode>0))
                  {
                  switch (mode)
                  {
                  case 1: ledData[0] = ledData[1] = 0xFF; break;
                  case 2: ledData[2] = ledData[3] = 0xFF; break;
                  case 3: ledData[4] = ledData[5] = 0xFF; break;
                  case 4: ledData[0] = ledData[1] = 0xFF; break;
                  case 5: ledData[2] = ledData[3] = 0xFF; break;
                  case 6: ledData[6] = ledData[7] = 0xFF; break;
                  }
                  }
                  }
                  // quet phim
                  void scanKey(void)
                  {
                  if (MODE == 0) // Nhan phim MODE
                  {
                  while(!MODE)quetLed(); // Cho nha phim
                  mode++;
                  chedo = 1;
                  if(mode>3)chedo = 2;
                  if (mode > 6)
                  {
                  mode = 0;
                  chedo = 1;
                  rtcWriteTime(hour,min,sec);
                  rtcWriteDate(date,mon,year);
                  }
                  }

                  if (mode != 0)
                  {
                  if(UP == 0) // Nhan phim UP
                  {
                  dem=0;
                  while(!UP)quetLed();// Cho nha phim
                  switch (mode)
                  {
                  case 1: hour++; if (hour > 23)hour = 0; break;
                  case 2: min++; if (min > 59)min = 0; break;
                  case 3: sec++; if (sec > 59)sec = 0; break;
                  case 4: date++; if (date > 31)date = 1; break;
                  case 5: mon++; if (mon > 12)mon = 1; break;
                  case 6: year++; if (year > 99)year = 0; break;
                  }
                  }
                  if(DOWN == 0) // Nhan phim Down
                  {
                  dem=0;
                  while(!DOWN)quetLed(); // Cho nha phim
                  switch (mode)
                  {
                  case 1: if (hour == 0)hour = 23; else hour --; break;
                  case 2: if (min == 0)min = 59; else min --; break;
                  case 3: if (sec == 0)sec = 59; else sec--; break;
                  case 4: if (date == 1)date = 31; else date --; break;
                  case 5: if (mon == 1)mon = 12; else mon --; break;
                  case 6: if (year == 0)year = 99; else year--; break;
                  }
                  }
                  }
                  if (SET == 0)
                  { // Nhan phim set
                  while(!SET)quetLed(); // Cho nha phim
                  mode = 0; // Thoat che do dat thoi gian
                  rtcWriteTime(hour,min,sec);
                  rtcWriteDate(date,mon,year);
                  }
                  }

                  void Ngat_T1(void) interrupt 3
                  {
                  TR1 = 0;
                  TF1 = 0;
                  TH1 = -50000/256;
                  TL1 = -50000%256;

                  et1 ++;

                  if ((et1 >= 2)& (mode != 0))
                  {
                  et1 = 0;
                  bit_nhay = ~bit_nhay;
                  }
                  else if(et>5)
                  {
                  if(chedo<3)chedo++;
                  else chedo = 1;
                  }

                  TR1 = 1;
                  }

                  // Chuong trinh chinh
                  void main()
                  {
                  TMOD = 0x11; // Dat Timer1 che do 1
                  ET1 = 1; // Cho phep ngat Timer1
                  EA = 1; // Cho phep ngat toan bo


                  mode = 0; // Cam che do dieu khien

                  rtcInit();
                  chedo = 1; // Chon che do hien thi gio

                  rtcReadTime(&hour,&min,&sec);
                  rtcReadDate(&date,&mon,&year);
                  amLich();
                  TR1 = 1; // Cho phep Timer1 hoat dong
                  while(1)
                  {
                  if(mode==0)chonCheDo();
                  scanKey();
                  quetLed();
                  }
                  }


                  và đây nữa
                  #include <intrins.h>
                  // Dinh nghia cong cho I2C

                  #define SDA P3_6
                  #define SCL P3_7

                  #define CLK {SCL=1;_nop_();SCL=0;_nop_();}
                  #define ACK {SDA=0;CLK;}
                  #define NO_ACK {SDA=1;CLK;}
                  #define I2C_START {SDA=1;SCL=1;SDA=0;SCL=0;SDA = 1;} // Marco
                  #define I2C_STOP {SDA=0;SCL=1;SDA=1;} // Marco

                  void I2C_WR(unsigned char c)
                  {
                  char i;
                  for (i=7;i>=0;i--)
                  {
                  SDA= (c>>i) & 0x01;
                  CLK;
                  }
                  CLK;
                  }

                  unsigned char I2C_RD(bit ack)
                  {
                  unsigned char c=0;
                  bit a;
                  char i;
                  for (i=7;i>=0;i--)
                  {
                  SDA=1;
                  SCL=1;
                  c=c<<1;
                  if (SDA) c++;
                  SCL=0;

                  }
                  SDA=ack;
                  CLK;
                  return (c);
                  }


                  // Thu - Ngay Thang Nam - Gio Phut Giay

                  void rtcInit()
                  {
                  I2C_START;
                  I2C_WR(0xd0);
                  I2C_WR(0x07); //vi tri con tro RTC
                  I2C_WR(0x90);
                  I2C_STOP;
                  }

                  int bin2bcd (int x)
                  {
                  return (x%10) | ((x/10) << 4);
                  }

                  int bcd2bin (int x)
                  {
                  return (x >> 4) * 10 + (x & 0x0f);
                  }

                  void rtcWriteTime(char hour,char min,char sec)
                  {
                  I2C_START;
                  I2C_WR(0xd0);
                  I2C_WR(0x00); //vi tri con tro RTC
                  I2C_WR(bin2bcd(sec)); //giay
                  I2C_WR(bin2bcd(min));
                  I2C_WR(bin2bcd(hour));
                  I2C_STOP;
                  }

                  void rtcWriteDate(char date, char mon, char year)
                  {
                  I2C_START;
                  I2C_WR(0xd0);
                  I2C_WR(0x04); //vi tri con tro RTC
                  I2C_WR(bin2bcd(date));
                  I2C_WR(bin2bcd(mon));
                  I2C_WR(bin2bcd(year));
                  I2C_STOP;
                  }

                  void rtcReadTime(char *hour,char *min,char *sec)
                  {
                  I2C_START;
                  I2C_WR(0xd0);
                  I2C_WR(0x00); //vi tri con tro RTC
                  I2C_START;
                  I2C_WR(0xd1);
                  *sec=bcd2bin(I2C_RD(0));
                  *min=bcd2bin(I2C_RD(0));
                  *hour=bcd2bin(I2C_RD(1));
                  I2C_STOP;
                  }

                  void rtcReadDate(char *date,char *mon,char *year)
                  {
                  I2C_START;
                  I2C_WR(0xd0);
                  I2C_WR(0x04); //vi tri con tro RTC
                  I2C_START;
                  I2C_WR(0xd1);
                  *date=bcd2bin(I2C_RD(0));
                  *mon=bcd2bin(I2C_RD(0));
                  *year=bcd2bin(I2C_RD(1));
                  I2C_STOP;
                  }

                  Comment


                  • #10
                    Và đây là sơ đồ mạchClick image for larger version

Name:	123.JPG
Views:	2
Size:	78.5 KB
ID:	1378462

                    Comment

                    Về tác giả

                    Collapse

                    tdm Tìm hiểu thêm về tdm

                    Bài viết mới nhất

                    Collapse

                    Đang tải...
                    X