Nguyên văn bởi namkpac
Xem bài viết
Thông báo
Collapse
No announcement yet.
trục chặc đồng hồ số khi làm mạch thật
Collapse
X
-
Nguyên văn bởi chung1608 Xem bài viết|
Comment
-
Nguyên văn bởi namkpac Xem bài viếtthanks bạn nhiều, mình kiểm tra lại mạch thấy chân SDA, SCL bị sai so với mạch nguyên lý mình cắt mạch và đấu lại thì nó chạy ok rồi. thanks các pác nhiều. nhưng mình muốn hỏi thêm một tý, code mình khai báo sử dụng reg51, mình nạp cho con 89S52 thì nó không chạy mà nạp cho con 89C51 thì nó lại chạy, mình không hiểu sao, 2 con này chỉ có dung lượng bộ nhớ thay đổi thôi chứ đúng không các pác.
Comment
-
em cũng đang làm mạch này nhưng con DS ko chạy thì phải.
chỉnh thời gian xong xuôi, bấm OK cho chạy ko chịu chạy, ngắt nguồn 5p cắm lại vẫn thấy thời gian như cũ, thành ra con DS chỉ lưu chứ ko chạy gì cả.
out 1Hz ra cũng ko thấy tăm hơi đâu. em mô phỏng chạy ngon lành.ai biết chỉ dùm em với.
#include <REGX51.H>
//==========================================
//Cac chan dieu khien
#define SEC 0x00
#define MIN 0x01
#define HOUR 0x02
char sec,hour,min;
sbit L01 = P2^5; //3
sbit L02 = P2^4; //4
sbit L03 = P2^6;
sbit L04 = P2^7;
sbit L05 = P3^0;
sbit L06 = P3^1;
sbit SCL = P3^6; // Dieu khien doc ghi Data
sbit SDA = P3^7; // Dieu khien xung Clock
sbit MENU = P2^0;
sbit OK = P2^3;
sbit DOWN = P2^2;
sbit UP = P2^1;
//************************************************** ****************************
// KHAI BAO BIEN, MANG...
unsigned char led7_data[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; //Decimal to Led7seg
unsigned char Data,time,index,setx,bat_nhay,read_time=0;
// KHAI BAO HAM, CHUONG TRINH CON
void set_main(void); // Chuong trinh khoi tao main
void setup_timer(void); // Chuong trinh cai dat timer
void delay(unsigned int time); // Delay
void Set_Clock(void); // Kiem tra va hieu chinh gia tri cua gio,phut,giay
void Keypad(void); // Kiem tra xu ly phim nhan
void T1_ISR(void); // Ngat timer 1 de nhay led
void T0_ISR(void); // Ngat timer 0 de quet led
// CAC CHUONG TRINH CON CHO I2C
//************************************************** ****************************
void I2C_start(void)
{
SCL = 1; SCL = 0;
SDA = 1; SCL = 1;
delay(2);
SDA = 0; delay(2);
SCL = 0; delay(2);
}
void I2C_stop(void)
{
SCL = 1; SCL = 0;
SDA = 0; delay(2);
SCL = 1; delay(2);
SDA = 1;
}
bit I2C_write(unsigned char dat)
{
unsigned char i;
for (i=0;i<8;i++)
{
SDA = (dat & 0x80) ? 1:0;
SCL=1;SCL=0;
dat<<=1;
}
SCL = 1; delay(2);
SCL = 0;
return dat;
}
unsigned char I2C_read(void)
{
bit rd_bit;
unsigned char i, dat;
dat = 0x00;
for(i=0;i<8;i++) /* For loop read data 1 byte */
{
delay(2);
SCL = 1; delay(2); /* Set SCL */
rd_bit = SDA; /* Keep for check acknowledge */
dat = dat<<1;
dat = dat | rd_bit; /* Keep bit data in dat */
SCL = 0; /* Clear SCL */
}
return dat;
}
//************************************************** ****************************
// CAC CHUONG TRINH CON CHO DS1307
//************************************************** ****************************
unsigned char DS1307_read(unsigned char addr)
{
unsigned int temp,ret;
I2C_start(); /* Start i2c bus */
I2C_write(0xD0); /* Connect to DS1307 */
I2C_write(addr); /* Request RAM address on DS1307 */
I2C_start(); /* Start i2c bus */
I2C_write(0XD1); /* Connect to DS1307 for Read */
ret = I2C_read(); /* Receive data */
I2C_stop();
//************************************************** ********
temp = ret; /*BCD to HEX*/
ret = (((ret/16)*10)+ (temp & 0x0f)); /*for Led 7seg*/
//************************************************** ********
return ret;
}
void DS1307_Write(unsigned char addr,unsigned char dat)
{
unsigned int temp;
//**********************************************
temp = dat ; /*HEX to BCD*/
dat = (((dat/10)*16)|(temp %10)); /*for Led 7seg*/
//**********************************************
I2C_start(); /* Start i2c bus */
I2C_write(0XD0); /* Connect to DS1307 */
I2C_write(addr); /* Request RAM address on DS1307 */
I2C_write(dat); /* Connect to DS1307 for Read */
I2C_stop();
}
void Out_1Hz()
{
I2C_start(); /* Start i2c bus */
I2C_write(0xD0); /* Connect to DS1307 */
I2C_write(0x07); /* thanh ghi CONTROL */
I2C_write(0x10); /* lay ra xung chuan 1Hz ~ 1s */
I2C_stop();
}
void Read_DS1307()
{
sec = DS1307_read(SEC);
min = DS1307_read(MIN);
hour = DS1307_read(HOUR);
}
void Write_DS1307()
{
DS1307_Write(SEC,sec);
DS1307_Write(MIN,min);
DS1307_Write(HOUR,hour);
}
//************************************************** ****************************
void delay(unsigned int time)
{
while(time--); // chuong trinh con delay
}
void set_main(void) // Chuong trinh khoi tao main
{
P0=P1=P3=0x00;
P2=0xFF;
UP=DOWN=MENU=OK=1;
}
void setup_timer(void) // Setup timer 0;1;
{
TMOD=0x11; // timer0 & timer1 set che do 8 bit tu nap lai
TH0=-1000/256; TL0=-1000%256;
TH1=0x3C; TL1=0xAF;
ET1=1; ET0=1; EA=1;
TF0=0; TF1=0;
TR0=1; TR1=1;
}
void T1_ISR(void) interrupt 3 // Dung ngat Timer0 de doc DS1307
{
TR1=0;TF1=0;
TH1=0x3C; // nap lai gia tri cho thanh ghi
TL1=0xAF;
time++;
if(time==5)
{
time=0; bat_nhay++; read_time=1;
if(bat_nhay==3)
bat_nhay=0; // chop tat khi dieu chinh Clock
}
TR1=1;
}
//*************************************
void T0_ISR(void) interrupt 1 // Dung ngat Timer1 de hien thi 6 Led_7D
{
TR0=0;TF0=0;
TH0=-1000/256; // Nap lai gia tri cho thanh ghi
TL0=-1000%256;
{
index++;
P2=0xFF;L01=L02=L03=L04=L05=L06=1;
if(index==1)
{
Data=sec;
P0=0xff;
if((setx==3 && bat_nhay==1))
{ index++; index++; }
else
{
L01=0; // Giay
P0=led7_data[Data%10];//xuat gia tri hang don vi
}
}
if(index==2)
{
P0=0xff;
L02=0; // Chuc Giay
P0=led7_data[Data/10]; //xuat gia tri hang chuc
}
if(index==3)
{
Data=min;
P0=0xff;
if((setx==1 && bat_nhay==1))
{ index++; index++; }
else
{
L03=0; // phut
P0=led7_data[Data%10];
}
}
if(index==4)
{
P0=0xff;
L04=0; // Chuc phut
P0=led7_data[Data/10];
}
if(index==5)
{
Data=hour;
P0=0xff;
if(setx==2 && bat_nhay==1)
{
index++;
index++;
}
else
{
L05=0; // Gio
P0=led7_data[Data%10];
}
}
if(index==6)
{
P0=0xff;
L06=0; // Chuc gio
P0=led7_data[Data/10];
}
if(index==7) index=0; //reset lai chi so chay index
}
TR0=1;
}
//****************************************
void Set_Clock(void) // Kiem tra va hieu chinh gia tri cua gio,phut,giay
{
//Tang
if(sec ==60) {sec=0; }
if(min ==60) {min =0;}
if(hour==24) {hour=0;}
//Giam
if(min ==-1) {min =59;}
if(hour==-1) {hour=23;}
}
//////////////////////////////////////////////////////
void Keypad(void) // Kiem tra phim bam.
{
//*******SET=0: DONG HO CHAY BINH THUONG****************
//*******SET=1: CHINH PHUT******************************
//*******SET=2: CHINH GIO*******************************
if(MENU==0)
{
while(MENU==0)
{;}
setx++;
if(setx==4)
{ setx=0; Write_DS1307();}
}
if(OK==0)
{
while (OK==0)
{;}
setx=0;
Write_DS1307();
}
if(setx==1)
{
if(UP==0)
{
while(UP==0) {;}
min++;
}
if(DOWN==0)
{
while(DOWN==0) {;}
min--;
}
}
if(setx==2)
{
if(UP==0)
{
while(UP==0) {;}
hour++;
}
if(DOWN==0)
{
while(DOWN==0) {;}
hour--;
}
}
if(setx==3)
{
if(UP==0)
{
while(UP==0) {;}
sec=sec+10;;
}
if(DOWN==0)
{
while(DOWN==0) {;}
sec=sec-10;
}
}
Set_Clock();
delay(1000);
}
//************ CHUONG TRINH CHINH *************
void main()
{
delay(5000);
Out_1Hz();
set_main();
time=index=setx=read_time=0;
setup_timer();
while(1)
{
Keypad();
if((setx==0)&&(read_time==1))
{
read_time = 0;
Read_DS1307();
}
else
{
sec = DS1307_read(SEC);
}
}
}
Comment
-
Nguyên văn bởi pupo Xem bài viếtem cũng đang làm mạch này nhưng con DS ko chạy thì phải.
chỉnh thời gian xong xuôi, bấm OK cho chạy ko chịu chạy, ngắt nguồn 5p cắm lại vẫn thấy thời gian như cũ, thành ra con DS chỉ lưu chứ ko chạy gì cả.
out 1Hz ra cũng ko thấy tăm hơi đâu. em mô phỏng chạy ngon lành.ai biết chỉ dùm em với.
#include <REGX51.H>
//==========================================
//Cac chan dieu khien
#define SEC 0x00
#define MIN 0x01
#define HOUR 0x02
char sec,hour,min;
sbit L01 = P2^5; //3
sbit L02 = P2^4; //4
sbit L03 = P2^6;
sbit L04 = P2^7;
sbit L05 = P3^0;
sbit L06 = P3^1;
sbit SCL = P3^6; // Dieu khien doc ghi Data
sbit SDA = P3^7; // Dieu khien xung Clock
sbit MENU = P2^0;
sbit OK = P2^3;
sbit DOWN = P2^2;
sbit UP = P2^1;
//************************************************** ****************************
// KHAI BAO BIEN, MANG...
unsigned char led7_data[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 }; //Decimal to Led7seg
unsigned char Data,time,index,setx,bat_nhay,read_time=0;
// KHAI BAO HAM, CHUONG TRINH CON
void set_main(void); // Chuong trinh khoi tao main
void setup_timer(void); // Chuong trinh cai dat timer
void delay(unsigned int time); // Delay
void Set_Clock(void); // Kiem tra va hieu chinh gia tri cua gio,phut,giay
void Keypad(void); // Kiem tra xu ly phim nhan
void T1_ISR(void); // Ngat timer 1 de nhay led
void T0_ISR(void); // Ngat timer 0 de quet led
// CAC CHUONG TRINH CON CHO I2C
//************************************************** ****************************
void I2C_start(void)
{
SCL = 1; SCL = 0;
SDA = 1; SCL = 1;
delay(2);
SDA = 0; delay(2);
SCL = 0; delay(2);
}
void I2C_stop(void)
{
SCL = 1; SCL = 0;
SDA = 0; delay(2);
SCL = 1; delay(2);
SDA = 1;
}
bit I2C_write(unsigned char dat)
{
unsigned char i;
for (i=0;i<8;i++)
{
SDA = (dat & 0x80) ? 1:0;
SCL=1;SCL=0;
dat<<=1;
}
SCL = 1; delay(2);
SCL = 0;
return dat;
}
unsigned char I2C_read(void)
{
bit rd_bit;
unsigned char i, dat;
dat = 0x00;
for(i=0;i<8;i++) /* For loop read data 1 byte */
{
delay(2);
SCL = 1; delay(2); /* Set SCL */
rd_bit = SDA; /* Keep for check acknowledge */
dat = dat<<1;
dat = dat | rd_bit; /* Keep bit data in dat */
SCL = 0; /* Clear SCL */
}
return dat;
}
//************************************************** ****************************
// CAC CHUONG TRINH CON CHO DS1307
//************************************************** ****************************
unsigned char DS1307_read(unsigned char addr)
{
unsigned int temp,ret;
I2C_start(); /* Start i2c bus */
I2C_write(0xD0); /* Connect to DS1307 */
I2C_write(addr); /* Request RAM address on DS1307 */
I2C_start(); /* Start i2c bus */
I2C_write(0XD1); /* Connect to DS1307 for Read */
ret = I2C_read(); /* Receive data */
I2C_stop();
//************************************************** ********
temp = ret; /*BCD to HEX*/
ret = (((ret/16)*10)+ (temp & 0x0f)); /*for Led 7seg*/
//************************************************** ********
return ret;
}
void DS1307_Write(unsigned char addr,unsigned char dat)
{
unsigned int temp;
//**********************************************
temp = dat ; /*HEX to BCD*/
dat = (((dat/10)*16)|(temp %10)); /*for Led 7seg*/
//**********************************************
I2C_start(); /* Start i2c bus */
I2C_write(0XD0); /* Connect to DS1307 */
I2C_write(addr); /* Request RAM address on DS1307 */
I2C_write(dat); /* Connect to DS1307 for Read */
I2C_stop();
}
void Out_1Hz()
{
I2C_start(); /* Start i2c bus */
I2C_write(0xD0); /* Connect to DS1307 */
I2C_write(0x07); /* thanh ghi CONTROL */
I2C_write(0x10); /* lay ra xung chuan 1Hz ~ 1s */
I2C_stop();
}
void Read_DS1307()
{
sec = DS1307_read(SEC);
min = DS1307_read(MIN);
hour = DS1307_read(HOUR);
}
void Write_DS1307()
{
DS1307_Write(SEC,sec);
DS1307_Write(MIN,min);
DS1307_Write(HOUR,hour);
}
//************************************************** ****************************
void delay(unsigned int time)
{
while(time--); // chuong trinh con delay
}
void set_main(void) // Chuong trinh khoi tao main
{
P0=P1=P3=0x00;
P2=0xFF;
UP=DOWN=MENU=OK=1;
}
void setup_timer(void) // Setup timer 0;1;
{
TMOD=0x11; // timer0 & timer1 set che do 8 bit tu nap lai
TH0=-1000/256; TL0=-1000%256;
TH1=0x3C; TL1=0xAF;
ET1=1; ET0=1; EA=1;
TF0=0; TF1=0;
TR0=1; TR1=1;
}
void T1_ISR(void) interrupt 3 // Dung ngat Timer0 de doc DS1307
{
TR1=0;TF1=0;
TH1=0x3C; // nap lai gia tri cho thanh ghi
TL1=0xAF;
time++;
if(time==5)
{
time=0; bat_nhay++; read_time=1;
if(bat_nhay==3)
bat_nhay=0; // chop tat khi dieu chinh Clock
}
TR1=1;
}
//*************************************
void T0_ISR(void) interrupt 1 // Dung ngat Timer1 de hien thi 6 Led_7D
{
TR0=0;TF0=0;
TH0=-1000/256; // Nap lai gia tri cho thanh ghi
TL0=-1000%256;
{
index++;
P2=0xFF;L01=L02=L03=L04=L05=L06=1;
if(index==1)
{
Data=sec;
P0=0xff;
if((setx==3 && bat_nhay==1))
{ index++; index++; }
else
{
L01=0; // Giay
P0=led7_data[Data%10];//xuat gia tri hang don vi
}
}
if(index==2)
{
P0=0xff;
L02=0; // Chuc Giay
P0=led7_data[Data/10]; //xuat gia tri hang chuc
}
if(index==3)
{
Data=min;
P0=0xff;
if((setx==1 && bat_nhay==1))
{ index++; index++; }
else
{
L03=0; // phut
P0=led7_data[Data%10];
}
}
if(index==4)
{
P0=0xff;
L04=0; // Chuc phut
P0=led7_data[Data/10];
}
if(index==5)
{
Data=hour;
P0=0xff;
if(setx==2 && bat_nhay==1)
{
index++;
index++;
}
else
{
L05=0; // Gio
P0=led7_data[Data%10];
}
}
if(index==6)
{
P0=0xff;
L06=0; // Chuc gio
P0=led7_data[Data/10];
}
if(index==7) index=0; //reset lai chi so chay index
}
TR0=1;
}
//****************************************
void Set_Clock(void) // Kiem tra va hieu chinh gia tri cua gio,phut,giay
{
//Tang
if(sec ==60) {sec=0; }
if(min ==60) {min =0;}
if(hour==24) {hour=0;}
//Giam
if(min ==-1) {min =59;}
if(hour==-1) {hour=23;}
}
//////////////////////////////////////////////////////
void Keypad(void) // Kiem tra phim bam.
{
//*******SET=0: DONG HO CHAY BINH THUONG****************
//*******SET=1: CHINH PHUT******************************
//*******SET=2: CHINH GIO*******************************
if(MENU==0)
{
while(MENU==0)
{;}
setx++;
if(setx==4)
{ setx=0; Write_DS1307();}
}
if(OK==0)
{
while (OK==0)
{;}
setx=0;
Write_DS1307();
}
if(setx==1)
{
if(UP==0)
{
while(UP==0) {;}
min++;
}
if(DOWN==0)
{
while(DOWN==0) {;}
min--;
}
}
if(setx==2)
{
if(UP==0)
{
while(UP==0) {;}
hour++;
}
if(DOWN==0)
{
while(DOWN==0) {;}
hour--;
}
}
if(setx==3)
{
if(UP==0)
{
while(UP==0) {;}
sec=sec+10;;
}
if(DOWN==0)
{
while(DOWN==0) {;}
sec=sec-10;
}
}
Set_Clock();
delay(1000);
}
//************ CHUONG TRINH CHINH *************
void main()
{
delay(5000);
Out_1Hz();
set_main();
time=index=setx=read_time=0;
setup_timer();
while(1)
{
Keypad();
if((setx==0)&&(read_time==1))
{
read_time = 0;
Read_DS1307();
}
else
{
sec = DS1307_read(SEC);
}
}
}|
Comment
-
Nguyên văn bởi pupo Xem bài viếtok mạch chạy rồi các bác ạ. reset con DS phát đc ngay
Email:
Gmail:
Comment
-
-
Nguyên văn bởi pupo Xem bài viếtko hiểu ý bác lắm
vậy mà k hiểu ak
bạn tìm cái chân reset của con DS hộ tui cái
good luck !!!
Email:
Gmail:
Comment
-
Nguyên văn bởi pupo Xem bài viếtà thì nói nôm na là reset thôi, chứ set lại con ds = phần mềm.hehe
bó tay
good luck !!!
Email:
Gmail:
Comment
-
Nguyên văn bởi coinage_90 Xem bài viếtcác bác thử đi nhé em làm song rùi chay ok lam
rảnh sang đây ngâm cứuNguyên văn bởi tuankep6 Xem bài viếtsao các bác k sang thảo luận với e cái đề tài led ma trận cho tết nhỉ
chứ làm led đơn đc 1 lần ròi bỏ phí đy hơn nữa nội dung k đổi đc mà led hàn vô cũng phí led nữa
các bác sang bên này nữa xem sao dây của bác hamhochoi http://www.dientuvietnam.net/forums/...-2012-a-93122/
còn luồng này của e http://www.dientuvietnam.net/forums/...ix-8x64-91695/ biết đâu cùng nghiên cứu sẽ sớm ra giải pháp cho tất cả và mọi người sẽ có thứ hay hơn mà dùng đc trong nhiều dịp hơn
và khổ led ở đây phổ biến sẽ là loại trung 16x64 rất phù hợp cho các dịp lễ tết lớn như giáng sinh tết halowen....
good luck !!!
good luck !!!
Email:
Gmail:
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Cần mọi người giúp mạch tạo sóng siêu âm máy rửabởi bqviet
-
Channel: Điện tử công suất
Hôm qua, 20:26 -
-
bởi Minhdai95Em chào mọi người, e đang sửa mạch tạo sóng siêu âm cho máy rửa mà chưa có tài liệu để tham khảo sửa, mọi người cho e xin tài liệu ạ...
-
Channel: Điện tử công suất
Hôm qua, 11:37 -
-
bởi pia2k1Cùng câu hỏi và cần được giải đáp thêm ạ...
-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 11:28 -
-
Trả lời cho Công thức điện tửbởi mèomướpDạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 20:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11Ok , thanks bác đã chỉ...
-
Channel: Thiết bị điện tử cá nhân
26-11-2024, 15:06 -
-
bởi nguyendinhvanSau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !
Chập thì thay. Cháy thì tháo
Làm thì láo. Báo thì hay
May thì khoe. Rủi thì bỏ
Thành tích nhỏ. Báo thành to
Làm cho có. Báo chi li
Sai cả li. Báo...-
Channel: Tâm tình dân kỹ thuật
26-11-2024, 00:35 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 22:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 22:14 -
-
Trả lời cho Tự làm máy đo Cuộn cảmbởi bacthoHay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
-
Channel: Điện tử dành cho người mới bắt đầu
25-11-2024, 21:48 -
Comment