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
-
thanks 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.Nguyên văn bởi chung1608 Xem bài viết|
Comment
-
code của 8051 thì nạp cho 8052 hoàn toàn ko vấn đề, nhưng ngược thì thì chưa chắc đcNguyê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
-
Bạn post mạch lên để mọi người cùng xem xét vấn đề cho. mấy ngày trước mình cũng bị trường hợp như bạn nhờ các pác trong mod chỉ giúp giờ mình cũng đã làm được rồi, mạch của mình xuất xung 1hz ra ngon lành. bạn xem lại mấy bài trước xem cách reset cho con DS, hôm đó mình cũng phải reset như được chỉ dẫn thì chạy ok. Bạn có pin cho con DS chưa?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
-
sax lại reset rồiNguyê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
-
thế thì thua rồiNguyê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
-
biết òy.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
làm xong thì quay video up lên chơi.chứ dem mạch thì mọi người chưa tin lắm 
rảnh sang đây ngâm cứumai đy mua đồ rồi ngày kia đc ăn cỗNguyê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
-
bởi Andrea14Chào mọi người,
Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...-
Channel: Điện tử truyền hình
12-12-2025, 12:42 -
-
Trả lời cho Đấu tắt điện cho máy tính bảngbởi bqvietBqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
-
Channel: Thiết bị điện tử cá nhân
06-12-2025, 17:17 -
-
Trả lời cho Xin hỏi về mạch thu FM/AM trong catsettebởi nguyendinhvanTheo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
-
Channel: Điện thanh
05-12-2025, 19:59 -

Comment