Tải bản đầy đủ (.docx) (32 trang)

Code Full Giao Tiếp Real Time Clock Và Board Mạch arduino uno r3

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (60.57 KB, 32 trang )

Kĩ Thuật Máy Tính

Đại Học Cần Thơ

Lập Trình Giao Tiếp Board Mạch Nhúng Arduino Uno R3 Và Module Thời Gian
Thực DS1307 Hay BQ32000
Ứng Dụng Vào Điều Khiển Tự Động Bằng Thời Gian Thực

Email:
Sđt: 01686648144

CODE
//==============================
//Khai Bao Thu Vien:
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68
#include <LiquidCrystal.h>
#include <EEPROM.h>
//==============================

//==============================
//Lcd 1602:
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//==============================
//=================================================================
====================================================
//KHAI BAO BIEN TOAN CUC:
1
Nguyễn Bỉnh Nhân



Kĩ Thuật Máy Tính

Đại Học Cần Thơ

//==============================
//bien luu gia tri eeprom:
int addr = 0; //bat dau tai vi tri o nho thu 0:
//mang luu gia tri set bao thuc:
char value_alarm[4];
//==============================
//bien dem so lan nhan keypad:
int set=0;
//==============================
//Bien dem so lan nhan nut display:
int dem_key=0;
//==============================
//BIEN Define Cho Button:
const int mode_button = 12;
const int tang_button = 11;
const int giam_button = 10;
const int display_button = 3;
const int bao_thuc = 13; //co the thay doi pin tuy y:
//==============================
//Bien Luu Hieu Chinh Thoi Gian:
int sogio=0, sophut=0;
//==============================
2
Nguyễn Bỉnh Nhân



Kĩ Thuật Máy Tính

Đại Học Cần Thơ

//==============================
//Bien Luu Hieu Chinh Date:
int setday=00, setmonth=00, setyear=00;
//==============================
//BIEN Thoi gian: Set Lai Time, Bien Time:
int SetTime = 0;//Set this variable to 1 to set the time without a button.
float timezone = -5;//Give your timezone here for double checking against GMT.
byte Set_Second = 0;
byte Set_Minute = 53;
byte Set_Hour = 11;
byte Set_DayOfMonth = 22;
byte Set_Month = 7;
byte Set_Year = 12;
byte Set_DayOfWeek = 1;
byte secondRTC, minuteRTC, hourRTC, dayOfWeekRTC, dayOfMonthRTC,
monthRTC, yearRTC; //Bien cac gia tri Time va Date:
//=================================================================
====================================================

//=================================================================
====================================================
//HAM DELAY:
3
Nguyễn Bỉnh Nhân



Kĩ Thuật Máy Tính

Đại Học Cần Thơ

void delayInMillis(long delayInMicrosec){

long t1,t2;
t1=millis();
t2=millis();
while ((t1+delayInMicrosec)>t2){
t2=millis();
if (t2t2=t1+delayInMicrosec+1;
}
}
}
//=================================================================
====================================================

//=================================================================
====================================================
//CHUONG TRINH CHUYEN DOI DE CO THE HIEN THI RA LCD TU DATA
DS1307_BQ32000:
byte decToBcd(byte val){

return ( (val/10*16) + (val%10) );
}
4
Nguyễn Bỉnh Nhân



Kĩ Thuật Máy Tính

Đại Học Cần Thơ

//===================================
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val){

return ( (val/16*10) + (val%16) );
}
//=================================================================
====================================================

//=================================================================
====================================================
//CHUONG TRINH HIEN THI RA SO:
//VI DU Hour = 1 thi se hien thi ra 01:
void HienThi_Digits(byte digits){

if(digits < 10) lcd.print('0');
lcd.print(digits,DEC);
}
//=================================================================
====================================================

//=================================================================
====================================================
5
Nguyễn Bỉnh Nhân



Kĩ Thuật Máy Tính

Đại Học Cần Thơ

//CHUONG TRINH STOP GIAO TIEP I2C: CHI DE TEST THOI NHE, DUNG SU DUNG
TUM LUM:
void stopDs1307(){

Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(0);
Wire.write(0x80);
Wire.endTransmission();
}
//=================================================================
====================================================

//=================================================================
====================================================
//CHUONG TRINH LAY THOI GIAN: GIO, PHUT, GIAY TU MEMORY DS1307:
// Gets the date and time from the ds1307
void getTime(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte
*dayOfMonth, byte *month, byte *year){

// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write((byte)0);
Wire.endTransmission();
6

Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

// A few of these need masks because certain bits are control bits
*second

= bcdToDec(Wire.read() & 0x7f);

*minute

= bcdToDec(Wire.read());

*hour
am/pm

= bcdToDec(Wire.read() & 0x3f); // Need to change this if 12 hour

*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month
*year

= bcdToDec(Wire.read());
= bcdToDec(Wire.read());


}
//=================================================================
====================================================

//=================================================================
====================================================

//=================================================================
====================================================
//CHUONG TRINH THAY DOI CAI DAT TIME:

7
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

void setTime(byte hour, byte minute, byte second, byte dayofweek, byte
dayofmonth, byte month, byte year){

Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write((byte)0);
Wire.write((byte)decToBcd(second)); // 0 to bit 7 starts the clock
Wire.write((byte)decToBcd(minute));
Wire.write((byte)decToBcd(hour));
set


// If you want 12 hour am/pm you need to

Wire.write((byte)decToBcd(dayofweek));
Wire.write((byte)decToBcd(dayofmonth));
Wire.write((byte)decToBcd(month));
Wire.write((byte)decToBcd(year));
Wire.endTransmission();
}
//=================================================================
====================================================

//=================================================================
====================================================
//CHUONG TRINH THAY DOI CAI DAT DATE: NGAY - THANG - NAM:
//=================================================================
====================================================

8
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

//=================================================================
====================================================
//CHUONG TRINH HIEN THI THOI GIAN: HOUR, MINUTES, SECOND:
void HienThi_Time(int hour, int minute, int second){


lcd.setCursor(6, 0);
HienThi_Digits(hour);
lcd.setCursor(8, 0);
lcd.print(":");
lcd.setCursor(9, 0);
HienThi_Digits(minute);
lcd.setCursor(11, 0);
lcd.print(":");
lcd.setCursor(12, 0);
HienThi_Digits(second);
}
//=================================================================
====================================================

//=================================================================
====================================================
//CHUONG TRINH HIEN THI DATE: DAY/MONTH/YEAR:
9
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

//=================================================================
====================================================
void HienThi_Date(int dayOfMonth, int month, int year){

lcd.setCursor(0, 1);

lcd.print("DATE: ");
lcd.setCursor(6, 1);
HienThi_Digits(dayOfMonth);
lcd.setCursor(8, 1);
lcd.print("/");
lcd.setCursor(9, 1);
HienThi_Digits(month);
lcd.setCursor(11, 1);
lcd.print("/");
lcd.setCursor(12, 1);
HienThi_Digits(year);
}
//=================================================================
====================================================

//=================================================================
====================================================
10
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

//=======================================================
//CHUONG TRINH KIEM TRA PHIM NHAN:
void key_display(void){

if(digitalRead(display_button) == LOW){


delay(100);
dem_key++;
if(dem_key == 4){

delay(100);
dem_key=0;
}
}
}
//=======================================================
//CHUONG TRINH HIEN THI DISPLAY CAC THONG SO DAU VAO:
void Display(void){

if(dem_key==1){

delay(100);
11
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

lcd.setCursor(0, 1);
lcd.print("ALARM: ");
lcd.setCursor(7, 1);
HienThi_Digits(sogio);
lcd.setCursor(9, 1);

lcd.print(":");
lcd.setCursor(10, 1);
HienThi_Digits(sophut);
lcd.setCursor(12, 1);
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
}
if(dem_key==2){

delay(100);
HienThi_Date(dayOfMonthRTC, monthRTC, yearRTC);
}
if(dem_key==3){

12
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

delay(100);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");

lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
}
}
//=================================================================
====================================================
13
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

//=================================================================
====================================================
//CHUONG TRINH DOC KEYPAD: MENU, TANG, GIAM. DE HIEU CHINH TIME:
void key(void){


if(digitalRead(mode_button) == LOW){

delay(100);
set++;
if(set == 8){

delay(100);
setTime(hourRTC, minuteRTC, secondRTC, dayOfWeekRTC, dayOfMonthRTC,
monthRTC, yearRTC);
EEPROM.write(addr, sogio);
EEPROM.write(addr+1, sophut);
/*
lcd.setCursor(0, 1);
lcd.print("DATE: ");
lcd.setCursor(6, 1);
HienThi_Digits(dayOfMonthRTC);

14
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

lcd.setCursor(8, 1);
lcd.print("/");
lcd.setCursor(9, 1);
HienThi_Digits(monthRTC);
lcd.setCursor(11, 1);

lcd.print("/");
lcd.setCursor(12, 1);
HienThi_Digits(yearRTC);
*/
set=0;
}
}

//=================================================================
======
//Chuong trinh code menu phim nhan cho setting Time:
//1.Thay Doi Hour;
if(set==1){

delay(100);
//Neu Nhan Phim Tang:

15
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

if(digitalRead(tang_button)==LOW){

delay(100);
hourRTC = hourRTC + 1;
if(hourRTC >23) hourRTC=0;

}
//Neu Nhan Phim giam:
if(digitalRead(giam_button)==LOW){

delay(100);
hourRTC = hourRTC - 1;
if(hourRTC <=0 ) hourRTC=23;
}
}
//======================
//2.Thay Doi Minutes;
if(set==2){

delay(150);
//Neu Nhan Phim Tang:
if(digitalRead(tang_button)==LOW){

16
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

delay(100);
minuteRTC = minuteRTC + 1;
if(minuteRTC >59) minuteRTC=0;
}
//Neu Nhan Phim giam:

if(digitalRead(giam_button)==LOW){

delay(100);
minuteRTC = minuteRTC - 1;
if(minuteRTC <=0 ) minuteRTC=59;
}
}
//======================
//3.Thay Doi gio(hour) hen gio;
if(set==3){

delay(150);
//Neu Nhan Phim Tang:
if(digitalRead(tang_button)==LOW){

delay(100);
sogio = sogio + 1;
17
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

if(sogio >59) sogio=0;
}
//Neu Nhan Phim giam:
if(digitalRead(giam_button)==LOW){


delay(100);
sogio = sogio - 1;
if(sogio <=0 ) sogio=59;
}
}
//======================
//4.Thay Doi phut(minutes) hen gio;
if(set==4){

delay(100);
//Neu Nhan Phim Tang:
if(digitalRead(tang_button)==LOW){

delay(100);
sophut = sophut + 1;
if(sophut >59) sophut=0;
}
18
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

//Neu Nhan Phim giam:
if(digitalRead(giam_button)==LOW){

delay(150);
sophut = sophut - 1;

if(sophut <=0 ) sophut=59;
}
}
//======================
//5.Chinh Day:
if(set==5){

delay(100);
//Neu Nhan Phim Tang:
if(digitalRead(tang_button)==LOW){

delay(100);
dayOfMonthRTC = dayOfMonthRTC + 1;
if(dayOfMonthRTC >31) dayOfMonthRTC=0;
}
//Neu Nhan Phim giam:
if(digitalRead(giam_button)==LOW){
19
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

delay(100);
dayOfMonthRTC = dayOfMonthRTC - 1;
if(dayOfMonthRTC <=0 ) dayOfMonthRTC=31;
}
}

//======================
//======================
//6.Chinh Month:
if(set==6){

delay(100);
//Neu Nhan Phim Tang:
if(digitalRead(tang_button)==LOW){

delay(100);
monthRTC = monthRTC + 1;
if(monthRTC >12) monthRTC=1;
}
//Neu Nhan Phim giam:
if(digitalRead(giam_button)==LOW){

20
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

delay(100);
monthRTC = monthRTC - 1;
if(monthRTC <1 ) monthRTC=12;
}
}
//======================

//======================
//7.Chinh year:
if(set==7){

delay(100);
//Neu Nhan Phim Tang:
if(digitalRead(tang_button)==LOW){

delay(100);
yearRTC = yearRTC + 1;
if(yearRTC >100) yearRTC=1;
}
//Neu Nhan Phim giam:
if(digitalRead(giam_button)==LOW){

delay(100);
21
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

yearRTC = yearRTC - 1;
if(yearRTC <1 ) yearRTC=100;
}
}
//======================
//=================================================================

======
}
//=================================================================
====================================================

//=================================================================
====================================================
//CHUONG TRINH HIEN THI:
void HienThi(void){

lcd.setCursor(0,0);
lcd.print("TIME: ");
if(set==1){

lcd.setCursor(0,0);
lcd.print("CH_HOUR: ");
22
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

lcd.setCursor(9, 0);
HienThi_Digits(hourRTC);
lcd.setCursor(11, 0);
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");

lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
23
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");

}
if(set==2){

lcd.setCursor(0,0);
lcd.print("CH_MINS: ");
lcd.setCursor(9, 0);
HienThi_Digits(minuteRTC);
lcd.setCursor(11, 0);
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
24
Nguyễn Bỉnh Nhân


Kĩ Thuật Máy Tính

Đại Học Cần Thơ

lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");

lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
}
//=====================================================
if(set==3){

lcd.setCursor(0,0);
25
Nguyễn Bỉnh Nhân


×