PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 18-09-2007, 03:43 PM   #11
tinhthanthep
Đệ tử 6 túi
 
tinhthanthep's Avatar
 
Tham gia ngày: Jun 2005
Bài gửi: 141
:
vậy là từ bây giờ con ds1307 đã bắt đầu hoạt động và tự cập nhật dữ liệu về thời gian. chỉ khi nào hết pin nó mời ngừng hoạt động. Tiếp theo ta viết một chương trình đọc dữ liệu từ ds1307 rồi xuất ra màn hình LCD. Cứ 1s thì dữ liệu được cập nhật một lần và gửi ra màn hình LCD. Chương trình sẽ như sau:

Code:
/* KHAI BAO BIEN */
unsigned short second, minute, hour, day, date, month, year, flag_time;
char *day_txt;

/* KHOI TAO */
void INIT_MAIN() {
// Khoi tao cong A
  PORTA   = 0;
  TRISA   = 0xFF;
// Khoi tao cong B
  PORTB   = 0;
  TRISB   = 0xFF;
// Khoi tao cong D
  PORTD   = 0;
  TRISD   = 0;
// Khoi tao cong E
  PORTE   = 0;
  TRISE   = 0;
  ADCON1  = 0xE;
// Khoi tao LCD
  Lcd_Config(&PORTD,4,7,6,3,2,1,0);
  Lcd_Cmd(Lcd_CLEAR);
  Lcd_Cmd(Lcd_CURSOR_OFF);
// Khoi tao truyen thong I2C
  I2C_Init(100000);
// Khoi tao ngat ngoai 
  INTCON = 0x90; // Mo ngat toan cuc, mo ngat ngoai, xoa co ngat ngoai,   OPTION_REG = 0x87; // Chon suon len cho ngat ngoai 
}

/* DOC DU LIEU RTC TU DS1307 */
void READ_RTC() {
  I2C_Start();
  I2C_Wr(0xD0);
  I2C_Wr(0x00);
  I2C_Repeated_Start();  
  I2C_Wr(0xD1);
  second = I2C_Rd(1u);
  minute = I2C_Rd(1u);
  hour   = I2C_Rd(1u);
  day    = I2C_Rd(1u);
  date   = I2C_Rd(1u);
  month  = I2C_Rd(1u);
  year   = I2C_Rd(1u);
  I2C_Stop();
}

/* XU LY DU LIEU RTC */
void TRANSFORM_RTC() {
  switch (day) {
    case 1: day_txt = "ERO"; break;
    case 2: day_txt = "T.2"; break;
    case 3: day_txt = "T.3"; break;
    case 4: day_txt = "T.4"; break;
    case 5: day_txt = "T.5"; break;
    case 6: day_txt = "T.6"; break;
    case 7: day_txt = "T.7"; break;
    case 8: day_txt = "C.N"; break;
  }
}
/* HIEN THI LCD */
void BCD(unsigned short x, unsigned short y,unsigned short var) {
unsigned short var1, var2;
  var1 = (var >> 4) + 0x30;
  LCD_Chr(x,y,var1);
  var2 = (var & 0x0F) + 0x30;
  LCD_Chr_Cp(var2);
}
void LCD_DISPLAY() {
  LCD_Out(1,1,day_txt);
  BCD(1,5,date);
  LCD_Chr_Cp('/');
  BCD(1,8,month);
  LCD_Out_Cp("/20");
  BCD(1,13,year);
  BCD(2,1,hour);
  LCD_Chr_Cp(':');
  BCD(2,4,minute);
  LCD_Chr_Cp(':');
  BCD(2,7,second);
  LCD_Out(2,10,"T=");
  BCD(2,12,temp);
  LCD_Chr_Cp(223);
  LCD_Chr_Cp('C');
}
void DISPLAY_TIME() {
  READ_RTC();
  TRANSFORM_RTC();
  LCD_DISPLAY();
  PORTE.F0 = ~PORTE.F0;
}

/* XU LY NGAT */
void interrupt() {
    flag_time = 1;
    INTCON.INTF = 0; // Xoa co ngat ngoai
}

/* CHUONG TRINH CHINH */
void MAIN() {
  INIT_MAIN();
  while(1) {
    INTCON.INTE = 1;
    if (flag_time == 1) {
      DISPLAY_TIME();
      flag_time = 0;
    }
  }
}

thay đổi nội dung bởi: namqn, 19-09-2007 lúc 02:48 AM. Lý do: định dạng lại code
tinhthanthep vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 03:13 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam