You are on page 1of 30

ti : ng h thi gian thc dng DS 1307

Mn vi x l ti : ng h thi gian thc dng DS 1307


I, Chc nng ca mch in: - Hin th : gi ,pht,giy, ngy , thng,nm,th trong tun - giao tip vi 4 phm : status-mode-increase-decrease. Phm status dng chuyn ch t hin th gi ,pht ,giy,th sang ngy ,thng, nm. Phm mode dng iu chnh ngy, thng, nm v gi ,pht ,giy,th II, M t mch: -Mch s dng IC thi gian thc DS 1307 giao tip I2C vi Pic. Pic16F877A

Dng 8 led 7 thanh loi 4 led/1 con. Dng 8 Tranzito iu khin vic ng ngt cc led. Vi iu khin c dng l PIC 16F877A Dng thch anh 20MHz to dao ng cho PIC. Dng mt mch tiny Bootloader kt ni gia pic v my tnh , np chng trnh trc tip t my tnh vo PIC m khng cn thng qua mch np cho PIC. III/ C bn v tiny bootloader: y l bootloader cho cc vi iu khin Microchip PIC * N l bootloader c kch thc nh nht, t hn 100 word b nh chng trnh * N l bootloader duy nht h tr tt c cc dng PIC: 16F, 18F, dsPIC (nhng dng c h tr ch self-programming - t np li).

http://machdientu.net

Page 1

ti : ng h thi gian thc dng DS 1307


c im ca firmware: * Kch thc ch c khong 100word (cho tt c cc dng 16F, 18F, dsPIC, thc ra l n t hn 100 word); * C th ghi vo flash, eeprom, v c th ghi vo cc bytes ci t (configuration bytes) ca dng 18F * Khi reset, i 1 giy nhn chng trnh np, nu khng nhn c th chuyn qua chy chng trnh * File .asm ca bootloader rt d chnh sa li,cho ph hp vi tng chip, tc truyn nhn. c im ca phn mm trn my tnh * C th ti chng trnh vo flash (trong phin bn ny ca bootloader, cho php ci t cc byte ci t (configuration bytes) v c th thay i d dng theo tng loi PIC) * Lm vic vi tt c cc dng PIC nu trn; t ng nhn ra ni dung file HEX v dng PIC * Ghi nh ci t cui (thun tin cho ngi dng khi thao tc vi mt loi PIC) * Trong trng hp li, n s truyn mt tn hiu ngc li cho my tnh ti ng b gia my tnh v PIC; * Ch giao tip c th c thay i, c th dng bt k cng COM no vi tc baud no Khi nim chung v bootloader Mt bootloader l mt chng trnh nm trong vi iu khin, v giao tip vi my tnh (thng qua giao tip ni tip). Bootloader nhn mt chng trnh ( c dch ra thnh file HEX) t my tnh v ghi n vo b nh flash ca vi iu khin thng qua mt phn mm trn my tnh, sau chy chng trnh trn vi iu khin. Bootloader ch c th c dng vi nhng vi iu khin no cho php ghi vo b nh flash thng qua phn mm trn my tnh. Bn thn bootloader phi c ghi vo trong b nh flash bng mt mch np khc. bootloader hot ng, sau khi nhn reset, mt lnh "goto bootloader" phi nm a ch u tin ca chng trnh vi iu khin. C 2 loi bootloader, mt s loi i khi cn ngi dng t li a ch cc dng lnh u, mt s khc th t bn thn n t nhng dng lnh u ca ngi dng vo mt a ch khc khi m bootloader nm sn , v quay tr li chng trnh ca ngi dng khi kt thc on chng trnh bootloader. Trong trng hp ny, tiny bootloader t ng em cc v tr u ca chng trnh ngi vit, v t pha di cng vi chng trnh bootloader (thc ra on chng trnh ny ch ti a c 4 dng lnh). a ch 0x0004 l a ch bt u ngt. Chnh v vy, nu lp trnh t v tr 0x0000 th cng ch vit c ti a 4 dng lnh, sau phi nhy n chng trnh chnh. Nh vy, tiny bootloader s thc hin thao tc, ct 4 dng u tin t 0x0000 n 0x0003 , thay bng dng lnh GOTO BOOTLOADER. V n t ng t 4 dng lnh nm ngay pha trn chng trnh bootloader .Sau , chy chng trnh tinybootloader pha bn di. Ri n quay ln chy 4 dng lnh . Kt thc 4 dng ny, n li tr v v tr chng trnh chy bnh thng bn trn. . phin
bn mi nht ca tiny bootloader cho php reset trn my tnh, khng cn phi bm reset na. y l mt loi tiny bootloader : max232

http://machdientu.net

Page 2

ti : ng h thi gian thc dng DS 1307

IV/ C ch hot ng v chc nng ca DS1307:

Vcc: ni vi ngun X1,X2: ni vi thch anh 32,768 kHz Vbat: u vo pin 3V GND: t SDA: chui data SCL: dy xung clock SQW/OUT: xung vung/u ra driver DS1307 l mt IC thi gian thc vi ngun cung cp nh, dng cp nht thi gian v ngy thng vi 56 bytes SRAM. a ch v dliu c truyn ni tip qua 2 ng bus 2 chiu. N cung cp thng tin v gi,pht,giy ,th,ngy ,thng, nm.Ngy cui thng s t ng c iu chnh vi cc thng nh hn 31 ngy,bao gm c vic t ng nhy nm. ng h c th hot ng dng 24h hoc 12h vi ch th AM/PM. DS1307 c

http://machdientu.net

Page 3

ti : ng h thi gian thc dng DS 1307


mt mch cm bin in p dng d cc in p li v t ng ng ngt vi ngun pin cung cp. DS 1307 hot ng vi vai tr slave trn ng bus ni tip. Vic truy cp c thi hnh vi ch th START v mt m thit b nht nh c cung cp bi a ch cc thanh ghi. Tip theo cc thanh ghi s c truy cp lin tc n khi ch th STOP c thc thi. S khi ca DS1307:

M t hot ng ca cc chn: Vcc,GND: ngun mt chiu c cung cp ti cc chn ny. Vcc l u vo 5V. Khi 5 V c cung cp th thit b c th truy cp hon chnh v d liu c th c v vit. Khi pin 3 V c ni ti thit b ny v Vcc nh hn 1,25Vbat th qu trnh c v vit khng c thc thi,tuy nhin chc nng timekeeping khng b nh hng bi in p vo thp. Khi Vcc nh hn Vbat th RAM v timekeeper s c ngt ti ngun cung cp trong (thng l ngun 1 chiu 3V) Vbat: u vo pin cho bt k mt chun pin 3V . in p pin phi c gi trong khong t 2,5 n 3V m bo cho s hot ng ca thit b. SCL(serial clock input): SCL c s dng ng b s chuyn d liu trn ng dy ni tip. SDA(serial data input/out): l chn vo ra cho 2 ng dy ni tip. Chn SDA thit k theo kiu cc mng h , i hi phi c mt in tr ko trong khi hot ng. SQW/OUT(square wave/output driver)- khi c kch hot th bit SQWE c thit lp 1, chn SQW/OUT pht i 1 trong 4 tn s (1Hz,4kHz,8kHz,32kHz). Chn ny cng c thit k theo kiu cc mng h v vy n cng cn c mt in tr ko trong. Chn ny s hot ng khi c Vcc v Vbat c cp.

http://machdientu.net

Page 4

ti : ng h thi gian thc dng DS 1307


X1,X2: c ni vi mt thch anh tn s 32,768kHz.L mt mch to dao ng ngoi , hot ng n nh th phi ni thm 2 t 33pF

Cng c DS1307 vi b to dao ng trong tn s 32,768kHz, vi cu hnh ny th chn X1 s c ni vo tn hiu dao ng trong cn chn X2 th h.

1, S a ch RAM v RTC:

Seconds Minutes Hours Day Date Month Year Control Ram 58x8

00h

07h 08h 3Fh

Thng tin v thi gian v ngy thng c ly ra bng cch c cc byte thanh ghi thch hp. thi gian v ngy thng c thit lp cng thng qua cc byte thanh ghi ny bng cch vit vo nhng gi tr thch hp. ni dung ca cc thanh ghi di dng m BCD(binary coded decreaseimal). Bit 7 ca thanh ghi seconds l bit clock halt(CH),khi bit ny c thit lp 1 th dao ng disable,khi n c xo v 0 th dao ng c enable. Ch l phi enable dao ng trong sut qu trnh cu hnh thit lp (CH=0). Thanh ghi thi gian thuc c m t nh sau:

http://machdientu.net

Page 5

ti : ng h thi gian thc dng DS 1307

DS1307 c th chy ch 24h cng nh 12h. Bit th 6 ca thanh ghi hours l bit chn ch 24h hoc 12h. khi bit ny mc cao th ch 12h c chn. ch 12h th bit 5 l bit AM/PM vi mc cao l l PM. ch 24h th bit 5 l bit ch 20h(t 20h n 23h). Trong qu trnh truy cp d liu, khi ch th START c thc thi th dng thi gian c truyn ti mt thanh ghi th 2,thng tin thi gian s c c t thanh ghi th cp ny,trong khi ng h vn tip tc chy.

Trong DS1307 c mt thanh ghi iu khin iu khin hot ng ca chn SQW/OUT Bit7 OUT Bit6 X Bit5 X Bit4 SQWE Bit3 X Bit2 X Bit1 RS1 Bit0 RS0

OUT(output control):bit ny iu khin mc ra ca chn SQW/OUT khi u ra xung vung l disable. Nu SQWE=0 th mc logic chn SQW/OUT s l 1 nu OUT=1,v =0 nu OUT=0 SQWE(square wave enable): bit ny c thit lp 1 s enable u ra ca b to dao ng. Tn s ca u ra sng vung ph thuc vo gi tr ca RS1 v RS0 tn s u ra SQW 1Hz 4,096kHz 8,192kHz 32,768kHz

RS1 0 0 1 1

RS0 0 1 0 1

DS1307 h tr bus 2 dy 2 chiu v giao thc truyn d liu. thit b gi d liu ln bus c gi l b pht v thit b nhn gi l b thu. thit b iu khin qu trnh ny gi l master. thit b

http://machdientu.net

Page 6

ti : ng h thi gian thc dng DS 1307


nhn s iu khin ca master gi l slave. Cc bus nhn s iu khin ca master,l thit b pht ra chui xung clock(SCL),master s iu khin s truy cp bus,to ra cc ch th START v STOP S truyn nhn d liu trn chui bus 2 dy

Tu thuc vo bit R/ w m 2 loi truyn d liu s c thc thi: truyn d liu t master truyn v slave nhn: Master s truyn byte u tin l a ch ca slave. Tip sau l cc byte d liu . slave s gi li bit thng bo nhn c (bit acknowledge) sau mi byte d liu nhn c. d liu s truyn t bit c gi tr nht (MSB). truyn d liu t slave v master nhn: byte u tin (a ch ca slave) c truyn ti slave bi master. Sau slave s gi li master bit acknowledge. tip theo slave s gi cc byte d liu ti master. Master s gi cho slave cc bit acknowledge sau mi byte nhn c tr byte cui cng,sau khi nhn c byte cui cng th bit acknowledge s khng c gi . Master pht ra tt c cc chui xung clock v cc ch th START v STOP. s truyn s kt thc vi ch th STOP hoc ch th quay vng START. Khi ch th START quay vng th s truyn chui d liu tip theo c thc thi v cc bus vn cha c gii phng. D liu truyn lun bt u bng bit MSB. 2, DS1307 c th hot ng 2 ch sau: ch slave nhn( ch DS1307 ghi):chui d liu v chui xung clock s c nhn thng qua SDA v SCL. Sau mi byte c nhn th 1 bit acknowledge s c truyn. cc iu kin START v STOP s c nhn dng khi bt u v kt thc mt truyn 1 chui. nhn dng a ch c thc hin bi phn cng sau khi chp nhn a ch ca slave v bit chiu. Byte a ch l byte u tin nhn c sau khi iu kin START c pht ra t master. Byte a ch c cha 7 bit a ch ca DS1307, l 1101000, tip theo l bit chiu (R/ w ) cho php ghi khi n bng 0. sau khi nhn v gii m byte a ch th thit b s pht i 1 tn hiu acknowledge ln ng SDA. Sau khi DS1307 nhn dng c a ch v bit ghi th master s gi mt a ch thanh ghi ti DS1307 , to ra mt con tr thanh ghi trn DS1307 v master s truyn tng byte d liu cho DS1307 sau mi bit acknowledge nhn c. sau master s truyn iu kin STOP khi vic ghi hon thnh.

http://machdientu.net

Page 7

ti : ng h thi gian thc dng DS 1307

ch slave pht ( ch DS1307 c): byte u tin slave nhn c tng t nh ch slave ghi. Tuy nhin trong ch ny th bit chiu li ch chiu truyn ngc li. Chui d liu c pht i trn SDA bi DS 1307 trong khi chui xung clock vo chn SCL. Cc iu kin START v STOP c nhn dng khi bt u hoc kt thc truyn mt chui. byte a ch nhn c u tin khi master pht i iu kin START. Byte a ch cha 7 bit a ch ca slave v 1 bit chiu cho php c l 1. sau khi nhn v gii m byte a ch th thit b s nhn 1 bit acknowledge trn ng SDA. Sau DS1307 bt u gi d liu ti a ch con tr thanh ghi thng qua con tr thanh ghi. nu con tr thanh ghi khng c vit vo trc khi ch c c thit lp th a ch u tin c c s l a ch cui cng cha trong con tr thanh ghi .DS1307 s nhn c mt tn hiu Not Acknowledge khi kt thc qu trnh c.

c d liu-ch slave pht

thi gian thc hin vic c,ghi d liu ca DS1307:

s ng b:

http://machdientu.net

Page 8

ti : ng h thi gian thc dng DS 1307

c tnh v thi gian thc hin:

V/ Tng quan v vi iu khin PIC16F877A:

http://machdientu.net

Page 9

ti : ng h thi gian thc dng DS 1307

PIC 16F877A trong mch l loi c 40 chn,vi 5 cng vo ra la Port A(RA0RA5),Port B(RB0RB7),Port C(RC0RC7),Port D(RD0RD7),Port E(RE0RE2). C 3 b nh thi l timer0,timer1,timer2. 8K b nh chng trnh flash. T chc b nh : C 3 khi b nh trong pic16F877A: b nh chng trnh ,b nh d liu v khi b nh EEPROM. b nh chng trnh v b nh d liu c ng bus ring v vy c th truy cp vo tng b nh mt cch ring r. B m chng trnh c 13 bit v vy khng gian a ch s l 8k word x 8bit. Truy cp ngoi vng khng gian trn s gy li. B nh d liu c chia thnh 4 bank (Bank0Bank3) ,trong cc bank cha cc thanh ghi thng v cc thanh ghi chc nng c bit. Bank c chn ph thuc vo bit RP1 v RP0 (bit th 6 v bit th 5) ca thanh ghi trng thi status. RP1:RP0 00 01 10 11 Bank 0 1 2 3

http://machdientu.net

Page 10

ti : ng h thi gian thc dng DS 1307


Cc thanh ghi chc nng c bit c CPU v b ngoi vi s dng iu khin cc thit b. cc thanh ghi ny hot ng nh mt thanh RAM tnh. Thanh ghi trng thi cha trng thi s hc ca ALU,trng thi Reset v cc bit chn bank b nh d liu. R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x IRP RP1 RP0 Z DC C PD TO Bit 7 bit 0 Cc cng vo ra ca pic: Port A: c 6 bit (tng ng vi 6 chn RA0RA5) cc chn ca cng A c tch hp mt s chc nng ngoi vi,nu mt thit b ngoi vi c enable th cng ny s khng hot ng nh mt cng vo ra . Bnh thng Port A s l mt cng vo ra 2 chiu. Thanh ghi xc inh chiu tng ng ca cc chn port A l thanh ghi TrisA. Cc bit thanh ghi TrisA bng 1 s xc nh cc chn port A l u vo ngc li s l u ra. Port B: rng 8 bit(tng ng vi 8 chn RB0RB7),l mt cng vo ra 2 chiu. Thanh ghi qui inh chiu ca cng B l thanh ghi Tris B. thit lp cc bit thanh ghi TrisB bng 1 s lm cho cng B l cng vo ngc li s l cng ra. Port C: rng 8 bit(tng ng vi cc chn RC0RC7),bnh thng n l mt cng vo ra 2 chiu, thanh ghi qui nh chiu ca cng l thanh ghi TrisC. Cc chn RC3,RC4 dng kt ni truyn nhn thng tin vi cc thit b ngoi vi. Port D: rng 8 bit (RD0RD7),n c th l cng vo hoc cng ra. Port D c th c cu hnh nh mt cng vi x l rng 8 bit (cng slave song song) bng cch thit lp bit iu khin PSPSTATUS (TrisE.4). ch ny th u vo la tn hiu TTL. Port E: rng 3 bit(RE0RE2), c cu hnh l u ra hoc u vo. Port E c th l u vo iu khin I/O khi bit PSPSTATUS (TrisE.4) c thit lp. T hnh v ta c th thy, pic16F877A c 2 chn Vcc v 2 chn GND, pic c th hot ng c ta phi cp ngun cho tt c cc chn ny. Ngoi cp ngun cung cp ta phi cp ngun xung dao ng cho vi iu khin hot ng. ta s dng mt thch anh 20MHz cp xung dao ng. ngun dao ng c cp thng qua 2 chn 13 v 14 ca pic. Mch reset cho vi iu khin l mt cng tc h thng qua chn MCLR ca vi iu khin. mch s thc hin reset khi chn ny t mc logic 1 xung logic 0. khi cng tc h th chn ny lun mang mc logic 1 do lun c ni vi ngun thng qua mt in tr hn dng R1, in tr ny phi c gi tr nh hn 40k m bo in p cung cp cho vi iu khin.

http://machdientu.net

Page 11

ti : ng h thi gian thc dng DS 1307

mch reset ca pic16f877a VI/ Khi hin th: - Khi hin th dng 8 led +, ch hin th ngy thng nm:2 led hin th ngy ,2 led hin th thng ,4 led hin th nm . +, ch hin th gi ,pht, giy: 2 led dng hin th gi,2 led dng hin th pht, 2 led dng hin th giy, 1 led dng hin th th trong tun (ch nht led hin gi tr 1,th 2 hin gi tr 2th 7 hin gi tr 7) Tt c cc led chung ng tn hiu a,,g cn cc chn iu khin th mc vi cc kho in t (8 Tranzito A1015) iu khin vic ng ngt cc led. - vic cp ngun cho cc led da trn thut qut led. S thut qut led:

http://machdientu.net

Page 12

ti : ng h thi gian thc dng DS 1307


bt u qut led

khi to h thng

gi d liu cho led 1

cp ngun cho led 1

tr 1ms ngt ngun led 1

gi d liu cho led 8

cp ngun cho led 8

tr 1ms ngt ngun led 8

VII/ khi iu khin : Gm 4 phm bm: status-mode(button1)-increase(button2)-decrease(button3) - Phm status dng chn ch hin th trn cc led l hin th ngy ,thng , nm hay l gi ,pht, giy,th - Phm mode dng chnh gi,pht,giy,ngy,thng,nm - Phm increase tng gi tr - Phm decrease gim gi tr

http://machdientu.net

Page 13

ti : ng h thi gian thc dng DS 1307


Thut ton iu khin: + , thay i ch hin th:

S Status=0 Qut led hin th ngy,thng,nm

+,Chnh thi gian:

http://machdientu.net

Page 14

ti : ng h thi gian thc dng DS 1307

http://machdientu.net

Page 15

ti : ng h thi gian thc dng DS 1307


Set hours:

Set minutes:

http://machdientu.net

Page 16

ti : ng h thi gian thc dng DS 1307

Set year:

http://machdientu.net

Page 17

ti : ng h thi gian thc dng DS 1307

Set month:

http://machdientu.net

Page 18

ti : ng h thi gian thc dng DS 1307

Set day:

http://machdientu.net

Page 19

ti : ng h thi gian thc dng DS 1307

http://machdientu.net

Page 20

ti : ng h thi gian thc dng DS 1307

Set date:

VIII/ S khi ca mch:

http://machdientu.net

Page 21

ti : ng h thi gian thc dng DS 1307

http://machdientu.net

Page 22

ti : ng h thi gian thc dng DS 1307


IX,ngn ng lp trnh: - ngn ng lp trnh cho pic l C, dng CCS 3.227 bin dch - s dng I2C tch hp sn trong PIC giao tip vi DS1307 - s dng cc hm c sn trong CCS l:I2C_START;I2C_STOP; I2C_READ; I2C_WRITE dng khi to,c gi tr t DS1307 sang PIC. - vic hin th thi gian l lin tc ,ta dng 8 byte RAM lm b m hin th (cc bin led1,..led8), cc gi tr thi gian c t DS1307 sau khi chuyn sang BCD s c lu trong cc bin ny. - Ta s c cc gi tr thi gian t DS1307 nhng ch c gi tr giy, sau 1 pht ta mi cp nht ton b thanh ghi thi gian ca DS1307 v a ra hin th. - Chng trnh qut bn phm s xc nh phm chc nng v gi hm x l tng ng nh: chuyn ch , chnh gi ,tng,gim gi tr

X/ Code: //#include <16F877A.h> #include <led7seg.h> #include <def_877a.h> #use delay(clock=20000000) #use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3)

// Cac dinh nghia #define status rd4 #define mode rd5 #define increase rd6 #define decrease rd7 #define led1 ra0 #define led2 ra1 #define led3 ra2 #define led4 ra3 #define led5 ra4 #define led6 ra5 #define led7 re0 #define led8 re1 //Cac bien int8 sec,min,hour,dow,date,month,year; int8 const led_code[16]={0b00000011,0b10011111,0b00100101,0b00001101,0b10011001,0b01001001,0b0100 0001,0b00011111,0b00000001,0b00001001,0b01000001,0b01000001,0b01000001,0b01000001,0b01 000001,0b01000001}; int8 sec1,sec2,min1,min2,hour1,hour2,day,date1,date2,month1,month2,year1,year2,year3,year4;

void display1();

http://machdientu.net

Page 23

ti : ng h thi gian thc dng DS 1307


void display2(); void update_time(); void set_time(void) ; void set_min(void); void set_hour(void); void set_date(void); void set_day(void); void set_month(void); void set_year(void); void main() { set_tris_a(0x00); set_tris_b(0x01); set_tris_e(0x00); set_tris_d(0xff); // Cong A lam dau ra // Cong B lam dau ra ( tru RB0) // Cong B lam dau ra // Cong D lam dau vao ( ban phim)

porta=porte=1; while (1) { update_time(); display1(); if (status==0) {display2();} if (mode==0) { set_time();} } } void update_time() { i2c_start(); i2c_write(0xD0); //Gui dia chi cua slave i2c_write(0x00); //thiet lap lai con tro - set register pointer i2c_stop(); I2C_start(); I2C_write(0xD1); /* gui lenh doc du lieu */ sec = i2c_read(1); /* starts w/last address stored in register pointer */ min = i2c_read(1); hour = i2c_read(1); //che do 24h ko can AND dow = i2c_read(1); date = i2c_read(1); month = i2c_read(1); year = i2c_read(0); i2c_stop(); //========================= sec1=sec & 0x0F; sec2=(sec & 0x70)>>4; //convert to BCD SEC min1=min & 0x0F; min2=(min & 0x70)>>4; //convert to BCD MIN

http://machdientu.net

Page 24

ti : ng h thi gian thc dng DS 1307


hour1=hour & 0x0F; hour2=(hour & 0x30)>>4; //convert to BCD HOUR day=(dow & 0x07); date1=date & 0x0F; date2=(date & 0x30)>>4; //convert to BCD DATE month1=month & 0x0F; month2=(month & 0x10)>>4; //convert to BCD MONTH year1=year & 0x0F; year2=(year & 0xF0)>>4; //convert to BCD YEAR } void display1() { // sec - min - hour PortB=led_code[sec1]; led6=0;//SEC1 delay_us(500); led6=1; PortB=led_code[sec2]; led5=0;//SEC2 delay_us(500); led5=1; PortB=led_code[min1]; led4=0;//MIN1 delay_us(500); led4=1; PortB=led_code[min2]; led3=0;//MIN2 delay_us(500); led3=1; PortB=led_code[hour1]; led2=0;//HOUR1 delay_us(500); led2=1; PortB=led_code[hour2]; led1=0;//HOUR2 delay_us(500); led1=1; PortB=led_code[day]; led8=0;//DAY delay_us(500); led8=1; } void display2(){ // Dow - Date - Month - Year int16 i=0; while (status==0) {} while (i<600) { PortB=led_code[date]; led2=0;//DATE1 delay_us(500); led2=1; PortB=led_code[date2]; led1=0;//DATE2 delay_us(500); led1=1; PortB=led_code[month1]; led4=0;//MONTH1 delay_us(500); led4=1; PortB=led_code[month2]; led3=0;//MONTH2 delay_us(500); led3=1; PortB=led_code[year1]; led8=0;//YEAR1 delay_us(500); led8=1;

http://machdientu.net

Page 25

ti : ng h thi gian thc dng DS 1307


PortB=led_code[year2]; led7=0;//YEAR2 delay_us(500); led7=1; PortB=led_code[0]; led6=0;//YEAR1 delay_us(500); led6=1; PortB=led_code[2]; led5=0;//YEAR2 delay_us(500); led5=1; i++; } } void update_ds1307(void) { int8 data=0; // luu tru du lieu tam thoi de gui vao ds1307 i2c_start(); i2c_write(0xd0); i2c_write(0x00); // ghi du lieu bat dau tu vi tri 00 data=sec1+(sec2<<4); data=data & 0b01111111; i2c_write(data); data=min1+(min2<<4); i2c_write(data); data=hour1+(hour2<<4); i2c_write(data); data=day; i2c_write(data); data=date1+(date2<<4); i2c_write(data); data=month1+(month2<<4); i2c_write(data); data=year1+(year2<<4); i2c_write(data); data=0x00; i2c_write(data); i2c_stop(); // ket thuc truyen du lieu } void set_time(void) { set_year();

http://machdientu.net

Page 26

ti : ng h thi gian thc dng DS 1307


set_month(); set_date(); set_day(); set_hour(); set_min(); while (mode==0) {} update_ds1307(); } void set_year(void) { // Cai dat nam while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha year1++; if ((year2==9)&(year1==10)) {year1=year2=0;} if (year1==10) {year1=0;year2++;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // khong lam gi cho phim nha year1--; if ((year2==0)&(year1==255)) {year1=year2=9;} if (year1==255) {year1=9;year2--;} } portb=led_code[2]; led5=0; delay_us(500); led5=1; portb=led_code[0]; led6=0; delay_us(500); led6=1; portb=led_code[year2]; led7=0; delay_us(500); led7=1; portb=led_code[year1]; led8=0; delay_us(500); led8=1; } while (mode==1); }

http://machdientu.net

Page 27

ti : ng h thi gian thc dng DS 1307


void set_month(void) { // Cai dat thang while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha month1++; if ((month2==1) & (month1==3)) { month2=0;month1=1;} if (month1==10) { month2++;month1=0;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // cho phim nha month1--; if ((month2==0) & (month1==0)) {month2=1;month1=2; } if (month1==0) {month2--;month1=9;} } portb=led_code[month2]; led3=0; delay_us(500); led3=1; portb=led_code[month1]; led4=0; delay_us(500); led4=1; } while (mode==1); } void set_date(void) { // Cai dat thang while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha date1++; if ((date2==3) & (date1==2)) { date2=0;date1=1;} if (date1==10) { date2++;date1=0;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // cho phim nha date1--; if ((date2==0) & (date1==0)) {date2=3;date1=1; } if (date1==255) {date2--;date1=9;} } portb=led_code[date2]; led1=0; delay_us(500);

http://machdientu.net

Page 28

ti : ng h thi gian thc dng DS 1307


led1=1; portb=led_code[date1]; led2=0; delay_us(500); led2=1; } while (mode==1); } void set_day(void) { while (mode==0) {}; do { if (increase==0) { while (increase==0) {} day++; if (day==8) { day=1;} } if (decrease==0) { while (decrease==0) {} day--; if (day==255) {day=7;} } portb=led_code[day]; led8=0; delay_us(500); led8=1; } while (mode==1); } void set_hour(void) { // Cai dat thang while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha hour1++; if ((hour2==2) & (hour1==4)) { hour2=0;hour1=0;} if (hour1==10) { hour2++;hour1=0;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // cho phim nha hour1--; if ((hour2==0) & (hour1==255)) {hour2=2;hour1=3; } if (hour1==255) {hour2--;hour1=9;} } portb=led_code[hour2];

http://machdientu.net

Page 29

ti : ng h thi gian thc dng DS 1307


led1=0; delay_us(500); led1=1; portb=led_code[hour1]; led2=0; delay_us(500); led2=1; } while (mode==1); } void set_min(void) { // Cai dat thang while (mode==0) {} // cho phim nha do { if (increase==0) { // neu phim 2 duoc nhan while (increase==0) {} // khong lam gi cho phim nha min1++; if ((min2==5) & (min1==10)) { min2=0;min1=0;} if (min1==10) { min2++;min1=0;} } if (decrease==0) { // neu phim 3 duoc nhan while (decrease==0) {} // cho phim nha min1--; if ((min2==0) & (min1==255)) {min2=5;min1=9; } if (min1==255) {min2--;min1=9;} } portb=led_code[min2]; led3=0; delay_us(500); led3=1; portb=led_code[min1]; led4=0; delay_us(500); led4=1; } while (mode==1); }

http://machdientu.net

Page 30

You might also like