![]() |
|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#4 |
Nhập môn đệ tử
Tham gia ngày: Jun 2010
Bài gửi: 6
: |
À, chỗ này có lẽ bị nhầm,mình sẽ sủa lại
đây là code của nó: #include <16F877a.h> // KHAI BAO SU DUNG PIC 16F877A #include <def_877a.h> // FILE DINH NGHIA CAC THANH GHI VA CAC BIT #device *=16 adc=10 // KHAI BAO SU DUNG CON TRO 16 BIT VA ADC 10 BIT // KHAI BAO CAU HINH CHO PIC 16F877A #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP,NOCPD, NOWRT // KHAI BAO SU DUNG DELAY VOI TAN SO DAO DONG NGOAI #use delay(clock=12000000) #include <DS1307.c> ///////////////////////////////////////////////////////////////////////////// byte sec,min,hour,day,month,year; byte const MAP[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; byte TG1,TG2,TG3,TG4,TG5,TG6; //bien hien led trung gian byte day1, day2, month1, month2, year1, year2, year3; #bit SW1 = 0x08.0 // D0 - chon che do chinh gio, phut, giay #bit SW2 = 0x08.1 // D1 - tang thoi gian #bit SW3 = 0x08.2 // D2 - giam thoi gian #bit SW4 = 0x08.3 // D3 - clear tinh trang #bit led1= 0x09.0 #bit led2= 0x09.1// hien thi led don #bit ngc = 0x08.5 // ngay- hang chuc #bit ngd = 0x08.4 // ngay- hang don vi #bit thc = 0x09.2 // thang- hang chuc #bit thd = 0x07.1 // thang- hang don vi #bit nat = 0x07.7 // nam- hang tram #bit nac = 0x07.6 // nam- hang chuc #bit nad = 0x07.5 // nam- hang don vi #bit gic = 0x05.5 // gio- hang chuc #bit gid = 0x05.4 // gio- hang don vi #bit pc = 0x05.3 // phut- hang chuc #bit pd = 0x05.2 // phut- hang don vi #bit gc = 0x05.1 // giay- hang chuc #bit gd = 0x07.0 // giay- hang don vi #bit nc = 0x08.7 // nhiet do- hang chuc #bit nd = 0x08.6 // nhiet do- hang don vi int8 high,low; float value; int16 i; byte chinh_phut, chinh_gio, chinh_day, chinh_month, chinh_year; void update_1307();// CAP NHAT DS1307 void set_sec();// CHINH GIAY void set_min();// CHINH PHUT void set_hour();// CHINH GIO void set_day();//chinh day void set_month(); //chinh month void set_year(); // chinh year void read_time(); // CHUONG TRINH CON DOC THOI GIAN DS1307 void update_time();// CHUONG TRINH CON CAP NHAT THOI GIAN void display();// CHUONG TRINH CON HIEN THI void convert_bcd(int8 x) { low=x%10; // CHU SO HANG DON VI high=x/10; // CHU SO HANG CHUC } ////////////////////////////////////////////////////////////////////////// // BAT DAU CHUONG TRINH CHINH//////////////////////////////////////////// void main() { byte u; set_Tris_d(0x0F); set_Tris_b(0x00); set_Tris_a(0x01); set_Tris_c(0x18); set_Tris_e(0x00); init_ds1307(); u=read_ds1307(0); sec=u & 0x0F; ///////////////////////////////////////// setup_adc(ADC_CLOCK_INTERNAL); // THIET LAP THOI GIAN LAY MAU BANG XUNG CLOCK setup_adc_ports(AN0); // THIET LAP CHAN AN0 LA CHAN VAO ADC set_ADC_channel(0) ; delay_us(10); // TRE 10US value=(float)read_adc(); // DOC GIA TRI ADC value = (value-558.5)/2.048; convert_bcd((int8)value); // GOI CHUONG TRINH CON CONVERT_BCD ////////////////////////////////////////////// write_ds1307(0,sec);// ket noi dong ho(bit7=0) chinh_gio=0; chinh_year=0; chinh_day=0; chinh_phut=0;chinh_month=0; ngc=1;ngd=1;thc=1;thd=1;nat=1; nac=1; nad=1; gic=1; gid=1; pc=1; pd=1; gc=1; gd=1;nc=1;nd=1; year3=0; while(true) { i++; read_time(); display(); if(hour==0x18||hour==0x19||hour==0x20||hour==0x21| |hour==0x22||hour==0x23||hour==0x00||hour==0x01||h our==0x02||hour==0x03||hour==0x04||hour==0x05) { led1=1; led2=1; } else { led1=0; led2=0; } if(sw1==0) { if(chinh_phut==0&&sw4==1) { while(sw1==0) {} set_min(); chinh_phut=1; } else if(chinh_gio==0&&sw4==1) { while(sw1==0) {} set_hour(); chinh_gio=1; } else if(chinh_day==0&&sw4==1) { while(sw1==0) {} set_day(); chinh_day=1; } else if(chinh_month==0&&sw4==1) { while(sw1==0){} set_month(); chinh_month=1; } else if(chinh_year==0&&sw4==1) { while(sw1==0){} set_year(); chinh_year=1; } else if(chinh_phut==1&&chinh_gio==1&&chinh_day==1&&chin h_month==1&&chinh_year==1) { chinh_phut=0; chinh_gio=0; chinh_day=0; chinh_month=0; chinh_year=0; } } if(sw4==0) { chinh_gio=0; chinh_year=0; chinh_day=0; chinh_phut=0;chinh_month=0; } } } ////////////////////////////////////////////////// // CHUONG TRINH CON HIEN THI RA LED 7 DOAN ///////////////////////////////////////// void read_time() { sec = read_DS1307(0); min = read_DS1307(1); hour = read_DS1307(2); day = read_DS1307(4); month= read_DS1307(5); year= read_DS1307(6); value =(float) read_adc(); value = (value-558.5)/2.048;///ADC_10_bit: C= ( reading-558.6)/ 2.048 if (i==500) { convert_bcd((int8)value); i=0; } update_time(); } ///////////////////////////////////////////////////// void update_1307() { write_DS1307(0,sec); write_DS1307(1,min); write_DS1307(2,hour); write_DS1307(4,day); write_DS1307(5,month); write_DS1307(6,year); } //////////////////////////////////////////////////// void update_time() { TG1= sec & 0x0F; TG2=(sec & 0xF0)>>4; //convert to BCD SEC TG3= min & 0x0F; TG4=(min & 0xF0)>>4; //convert to BCD MIN TG5= hour & 0x0F; TG6=(hour & 0x30)>>4; //convert to BCD HOUR /////////////////////////////////////////////// day1= day&0x0F; day2= (day&0x30)>>4; month1= month&0x0F; month2= (month&0x10)>>4; year1= year&0x0F; year2= (year&0xF0)>>4; } ////////////////////////////////////////////////////// void set_min() { ngc=1;ngd=1;thc=1;thd=1;nat=1; nac=1; nad=1; gic=1; gid=1; pc=1; pd=1; gc=1; gd=1; min= read_DS1307(1); TG3= min & 0x0F; TG4=(min & 0xF0)>>4; //convert to BCD MIN while(sw1==1&&sw4==1) { portb= MAP[TG3]; pd=0; delay_us(500); pd=1; portb= MAP[TG4]; pc=0; delay_us(500); pc=1; if(sw2==0) { while(sw2==0) {} if(TG4==5&&TG3==9) { TG4=0; TG3=0;} else if(TG3==9) { TG4++; TG3=0;} else TG3++; } if(sw3==0) { while(sw3==0) {} if(TG4==0&&TG3==0) {TG4=5; TG3=9;} else if(TG3==0) {TG4--; TG3=9;} else TG3--; } min= (TG4<<4) + TG3; write_DS1307(1,min); delay_us(10); } // ngc=0; ngd=0; thc=0; thd=0; nat=0; nac=0; nad=0; gic=0; gid=0; pc=0; pd=0; gc=0; gd=0; } //////////////////////////////////////////////////// void set_hour() { ngc=1;ngd=1;thc=1;thd=1;nat=1; nac=1; nad=1; gic=1; gid=1; pc=1; pd=1; gc=1; gd=1; hour= read_DS1307(2); TG5= hour & 0x0F; TG6=(hour & 0x30)>>4; //convert to BCD MIN while(sw1==1&&sw4==1) { portb= MAP[TG5]; gid=0; delay_us(500); gid=1; portb= MAP[TG6]; gic=0; delay_us(500); gic=1; if(sw2==0) { while(sw2==0) {} if(TG6==2&&TG5==4) { TG6=0;TG5=0;} else if(TG5==9) { TG6++; TG5=0;} else TG5++; } if(sw3==0) { while(sw3==0) {} if(TG6==0&&TG5==0) {TG6=2; TG5=4;} else if(TG5==0) {TG6--; TG5=9;} else TG5--; } hour= (TG6<<4) + TG5; write_DS1307(2,hour); delay_us(10); } // ngc=0; ngd=0; thc=0; thd=0; nat=0; nac=0; nad=0; gic=0; gid=0; pc=0; pd=0; gc=0; gd=0; } ///////////////////////////////////////////// void set_day() { ngc=1;ngd=1;thc=1;thd=1;nat=1; nac=1; nad=1; gic=1; gid=1; pc=1; pd=1; gc=1; gd=1; day= read_DS1307(4); day1= day & 0x0F; day2=(day & 0x30)>>4; //convert to BCD MIN while(sw1==1&&sw4==1) { portb= MAP[day1]; ngd=0; delay_us(500); ngd=1; portb= MAP[day2]; ngc=0; delay_us(500); ngc=1; if(sw2==0) { while(sw2==0) {} if(day2==3&&day1==1) { day2=0; day1=0;} else if(day1==9) { day2++; day1=0;} else day1++; } if(sw3==0) { while(sw3==0) {} if(day2==0&&day1==0) {day2=3; day1=1;} else if(day1==0) {day2--; day1=9;} else day1--; } day= (day2<<4) + day1; write_DS1307(4,day); delay_us(10); } // ngc=0; ngd=0; thc=0; thd=0; nat=0; nac=0; nad=0; gic=0; gid=0; pc=0; pd=0; gc=0; gd=0; } ///////////////////////////////////////////// void set_month() { ngc=1;ngd=1;thc=1;thd=1;nat=1; nac=1; nad=1; gic=1; gid=1; pc=1; pd=1; gc=1; gd=1; month= read_DS1307(5); month1= month & 0x0F; month2=(month & 0x10)>>4; //convert to BCD MIN while(sw1==1&&sw4==1) { portb= MAP[month1]; thd=0; delay_us(500); thd=1; portb= MAP[month2]; thc=0; delay_us(500); thc=1; if(sw2==0) { while(sw2==0) {} if(month2==1&&month1==2) { month2=0; month1=0;} else if(month1==9) { month2++; month1=0;} else month1++; } if(sw3==0) { while(sw3==0) {} if(month2==0&&month1==0) {month2=1; month1=2;} else if(month1==0) {month2--; month1=9;} else month1--; } month= (month2<<4) + month1; write_DS1307(5,month); delay_us(10); } // ngc=0; ngd=0; thc=0; thd=0; nat=0; nac=0; nad=0; gic=0; gid=0; pc=0; pd=0; gc=0; gd=0; } //////////////////////////////////////////// void set_year() { ngc=1;ngd=1;thc=1;thd=1;nat=1; nac=1; nad=1; gic=1; gid=1; pc=1; pd=1; gc=1; gd=1; year= read_DS1307(6); year1= year & 0x0F; year2=(year & 0xF0)>>4; //convert to BCD MIN while(sw1==1&&sw4==1) { portb= MAP[year1]; nad=0; delay_us(500); nd=1; portb= MAP[year2]; nac=0; delay_us(500); nac=1; if(sw2==0) { while(sw2==0) {} if(year3==9&&year2==9&&year1==9) {year3=0;year2=0;year1=0;} if(year2==9&&year1==9) { year3++;year2=0;year1=0;} else if(year1==9) { year2++; year1=0;} else year1++; } if(sw3==0) { while(sw3==0) {} if(year3==0&&year2==0&&year1==0) { year3=9;year2=9;year1=9;} if(year2==0&&year1==0) {year3--; year2=9;year1=9;} else if(year1==0) {year2--; year1=9;} else year1--; } year= ( year2<<4) + year1; write_DS1307(6,year); delay_us(10); } // ngc=0; ngd=0; thc=0; thd=0; nat=0; nac=0; nad=0; gic=0; gid=0; pc=0; pd=0; gc=0; gd=0; } ////////////////////////////////////////////// void display() { // sec - min - hour PortB=MAP[TG6]; gic=0; delay_us(500); gic=1; PortB=MAP[TG5]; gid=0; delay_us(500); gid=1; PortB=MAP[TG4]; pc=0; delay_us(500); pc=1; PortB=MAP[TG3]; pd=0; delay_us(500); pd=1; PortB=MAP[TG2]; gc=0; delay_us(500); gc=1; PortB=MAP[TG1]; gd=0; delay_us(500); gd=1; // day- month- year PortB= MAP[year3]; nat=0; delay_us(500); nat=1; PortB=MAP[year2]; nac=0; delay_us(500); nac=1; PortB=MAP[year1]; nad=0; delay_us(500); nad=1; PortB=MAP[month2]; thc=0; delay_us(500); thc=1; PortB=MAP[month1]; thd=0; delay_us(500); thd=1; PortB=MAP[day2]; ngc=0; delay_us(500); ngc=1; PortB=MAP[day1]; ngd=0; delay_us(500); ngd=1; // nhiet do PORTB=MAP[high]; nc=0; delay_us(500); nc=1; PORTB=MAP[low]; nd=0; delay_us(500); nd=1; ///////////////////////////////////////////////// } |
![]() |
![]() |
|
|