|
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 |
10-05-2011, 12:25 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: May 2011
Bài gửi: 1
: |
Đồng hồ PIC
các anh xem hô em phần code này có lỗi chỗ nào ko mà báo thức ko được vậy???phần chỉnh thời gian thì bình thường roy
#include <16F877A.h> #include <khaibaotghi_16F877A.h> #fuses nowdt,put,hs,noprotect,nolvp #use delay(clock=20000000) #use i2c(Master,slow,sda=PIN_C4,scl=PIN_C3) // Cac dinh nghia #define mode ra0 #define tang ra2 #define giam ra3 #define led1 rd0 #define led2 rd1 #define led3 rd2 #define led4 rd3 #define led5 rd4 #define led6 rd5 #define chuong rc0 #define set_bt ra1 #define reset ra4 //DINH NGHIA CAC BIEN int sec,min,hour; const unsigned char MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };//MA LED 7 DOAN int8 sec1,sec2,min1,min2,hour1,hour2,mint,hourt; void display1(); void update_ds1307(); void update_time(); void convert(); void set_time(); void set_min(); void set_hour(); void baothuc(); void set_minbt(); void set_hourbt(); void chuong(); //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void update_time() { i2c_start(); i2c_write(0xD0); i2c_write(0x00); // BAT DAU TAI VI TRI REG 0 - Seconds i2c_start(); //restart i2c_write(0xD1); sec = (i2c_read() & 0x7f); min = (i2c_read() & 0x7f); hour = (i2c_read(0) & 0x3f); i2c_stop(); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void convert() { sec1=sec & 0x0F; sec2=(sec & 0x70)>>4; //convert to BCD SEC min1=min & 0x0F; min2=(min & 0x70)>>4; //convert to BCD MIN hour1=hour & 0x0F; hour2=(hour & 0x70)>>4; //convert to BCD HOUR } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void display1() { //hien thi sec - min - hour bang phuong phap quet led Portb=MAP[sec1];//BCD SANG 7 DOAN PORTd=0X20; delay_ms(1); PORTd=0X00; Portb=MAP[sec2];//BCD SANG 7 DOAN PORTd=0X10; delay_ms(1); PORTd=0X00; Portb=MAP[min1];//BCD SANG 7 DOAN PORTd=0X08; delay_ms(1); PORTd=0X00; Portb=MAP[min2];//BCD SANG 7 DOAN PORTd=0X04; delay_ms(1); PORTd=0X00; Portb=MAP[hour1];//BCD SANG 7 DOAN PORTd=0X02; delay_ms(1); PORTd=0X00; Portb=MAP[hour2];//BCD SANG 7 DOAN PORTd=0X01; delay_ms(1); PORTd=0X00; } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX 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=0x00; i2c_write(data); i2c_stop(); // ket thuc truyen du lieu } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void set_time(void) { set_hour(); set_min(); delay_ms(50); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void set_hour() //------------------------------------------------------------------------------ { // Cai dat gio while (mode==0) {} // cho phim nha do { if (tang==0) { // neu phim 2 duoc nhan while (tang==0) {} // khong lam gi cho phim nha hour1++; if ((hour2==2) & (hour1==4)) { hour2=0;hour1=0;} if (hour1==10) { hour2++;hour1=0;} } //------------------------------------------------------------------------------ if (giam==0) { // neu phim 2 duoc nhan while (giam==0) {} // khong lam gi cho phim nha hour1--; if ((hour2==0) & (hour1==-1)) { hour2=2;hour1=3;} if (hour1==-1) { hour2--;hour1=9;} } portb=map[hour2]; led1=1; delay_ms(1); led1=0; portb=map[hour1]; led2=1; delay_ms(1); led2=0; } while (mode==1) ; } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void set_min() { // Cai dat phut //------------------------------------------------------------------------------ while (mode==0) {} // cho phim nha do { if (tang==0) { // neu phim 2 duoc nhan while (tang==0) {} // khong lam gi cho phim nha min1++; if ((min2==5) & (min1==10)) { min2=0;min1=0;} if (min1==10) { min2++;min1=0;} } //------------------------------------------------------------------------------ if (giam==0) { // neu phim 2 duoc nhan while (giam==0) {} // khong lam gi cho phim nha min1--; if ((min2==0) & (min1==-1)) { min2=5;min1=9;} if (min1==-1) { min2--;min1=9;} } portb=map[min2]; led3=1; delay_ms(1); led3=0; portb=map[min1]; led4=1; delay_ms(1); led4=0; } while (mode==1); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX Void baothuc() { set_hourbt(); set_minbt(); delay_ms(50); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void set_hourbt() //------------------------------------------------------------------------------ { // Cai dat gio while (set_bt==0) {} // cho phim nha do { if (tang==0) { // neu phim 2 duoc nhan while (tang==0) {} // khong lam gi cho phim nha hour1++; if ((hour2==2) & (hour1==4)) { hour2=0;hour1=0;} if (hour1==10) { hour2++;hour1=0;} } //------------------------------------------------------------------------------ if (giam==0) { // neu phim 2 duoc nhan while (giam==0) {} // khong lam gi cho phim nha hour1--; if ((hour2==0) & (hour1==-1)) { hour2=2;hour1=3;} if (hour1==-1) { hour2--;hour1=9;} } portb=map[hour2]; led1=1; delay_ms(1); led1=0; portb=map[hour1]; led2=1; delay_ms(1); led2=0; } while (set_bt==1) ; hourt=hour; } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void set_minbt() { // Cai dat phut //------------------------------------------------------------------------------ while (set_bt==0) {} // cho phim nha do { if (tang==0) { // neu phim 2 duoc nhan while (tang==0) {} // khong lam gi cho phim nha min1++; if ((min2==5) & (min1==10)) { min2=0;min1=0;} if (min1==10) { min2++;min1=0;} } //------------------------------------------------------------------------------ if (giam==0) { // neu phim 2 duoc nhan while (giam==0) {} // khong lam gi cho phim nha min1--; if ((min2==0) & (min1==-1)) { min2=5;min1=9;} if (min1==-1) { min2--;min1=9;} } portb=map[min2]; led3=1; delay_ms(1); led3=0; portb=map[min1]; led4=1; delay_ms(1); led4=0; } while (set_bt==1); mint=min; } Void chuong() { Output_high(pin_c0); Delay_ms(250); Output_low(pin_c0); Delay_ms(250); } //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXX void main() { set_tris_B(0x00); // Cong B lam dau ra ( tru RB7) set_tris_e(0xff); // Cong e lam dau vao(ban phim) set_tris_d(0x00); // Cong D lam dau ra ( ) set_tris_c(0x00); set_tris_a(0xff); while (true) { update_time(); convert(); display1(); if (mode==0) {set_time(); update_ds1307();}//chu y mode=1; if(set_bt==0) {baothuc(); } set_bt=1; if (mint==min && hourt==hour) { chuong(); } if( reset==0) { Output_low(pin_c0); } } } |
|
|