PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

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

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
Prev Previous Post   Next Post Next
Old 10-05-2011, 12:25 AM   #1
mr_so_lo
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);

}

}
}
File Kèm Theo
File Type: rar New Folder.rar (23.1 KB, 84 lần tải)
mr_so_lo 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à 02:26 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