Tình hình là thế này các Bác ạ, Em đang quyết tâm học 8051, đang còn dư 2 con 89S52 , 1 con 89c2051, led 7 thanh đủ lắp 1 cái đồng hồ, Loay hoay tìm mãi trên mạng thấy có mạch đồng hồ 89c2051 của Bác Duy phi là dễ nhất và đơn giản nhất, (chỉ gồm có 1 con 89c2051 và 4 led 7 đoạn, 4trans, 1IC 7805), Backup time bằng 3 pin 1,5V, không cần IC RTC, nhưng lại không có mạch nạp 89c2051 (Em không có con IC74LS373 để lắp mạch nạp này), vậy có thể thay 89c2051 bằng 89s52 được không, khi đó phải thay đổi sơ đồ mạch ntn? thay đổi code những gì?. Cám ơn các bác nhé!
Thông báo
Collapse
No announcement yet.
cần giúp mạch đồng hồ 89c2051
Collapse
X
-
có cần phải thay đổi lại code không vậy bạn?
#include c:\mc51\8051io.h
#include c:\mc51\8051reg.h
extern register char cputick;
unsigned register char
sec100,sec,sec5,min,hour,flag1,command,ACC,temp,op to;
/* above must be defined as register for tiny model */
unsigned register char i,digit,buffer[4],onHour1,onMin1,offHour1,offMin1;
register char key,delay,count1;
char convert[10] = {0x3F,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0e,0x7f,0x5f };
main()
{
opto = 0xff;
cputick = 0;
hour = 18;
min = 0;
sec = 0;
key = -1;
flag1 = 0;
onHour1 = 18; /* 18:30 turn lamp on */
onMin1 = 01;
offHour1 = 18; /* 21:30 turn off */
offMin1 = 02;
count1 = 0;
buffer[0] = 0x40;
buffer[1] = 0x40;
buffer[2] = 0x40;
buffer[3] = 0x40;
serinit(9600); /* must be invoked for tiny model */
while(1)
{
while ( cputick < 1)
scanLED();
cputick = 0;
/*------------- the following tasks execute every 10ms ------*/
time();
timeToBuffer();
blink();
offmsd();
keyexe();
keydelay();
comparetime();
/*-----------------------------------------------------------*/
}
}
/* ****************** change constant below for other X-tal ********/
time ()
/* update real-time clock */
{
sec100++;
if (sec100 >= 100) /* 100 * 10 ms = 1 s */
{sec100 = 0;
flag1 |= 0x05; /* set bit 0, bit 2 */
temp = 50;
sec++;
if (sec >= 60)
{sec = 0;
flag1 |= 0x02; /* set bit 1 */
min++;
if (min >= 60)
{min = 0;
hour++;
if (hour >= 24)
{hour = 0;
}
}
}
}
}
scanLED() /* scan 4-digit LED and 4-key switch, if key pressed key = 0-3
else key = -1 */
{
int i;
digit = 0x08;
key = -1;
for( i = 0; i < 4; i++) /* 4-DIGIT scanning */
{
P3 = ~digit & opto; /* send complement[digit] */
P1 = ~buffer[i]; /* send complement[segment] */
pause(1); /* delay a while */
P1 = 0xff; /* off LED */
if ((P3 & 0x10) == 0) /* if key pressed P3.4 became low */
key = i; /* save key position to key variable */
digit>>=1; /* next digit */
}
}
timeToBuffer()
{
buffer[0] = convert[min%10];
buffer[1] = convert[min/10];
buffer[2] = convert[hour%10];
buffer[3] = convert[hour/10];
}
blink()
{
if((flag1 & 0x04) != 0) /* check bit 2 if set decrement temp until zero
*/
{temp--;
if (temp != 0)
{
buffer[1] |= 0x80;
buffer[2] |= 0x80;
}
else( flag1 &= ~0x04);
}
}
keyexe()
{
if (key != -1)
{
if ((flag1 & 0x80) == 0) /* within 0.5 sec after 1st press
the following execution is not allowed
*/
{
flag1 |= 0x80;
delay = 50;
switch(key){
case (0): /* key position 0 */
manualOnOff(); /* service key 0 */
break;
case (1): /* key position 1 */
savetimeOnOff1(); /* service key 1 */
break;
case (2): /* key position 2 */
setmin(); /* service key 2 */
break;
case (3): /* key position 3 */
sethour();
}
}
}
}
sethour()
{
hour++;
if ( hour== 24)
hour = 0;
}
setmin()
{
min++;
sec = 0;
if( min == 60 )
min = 0;
}
savetimeOnOff1()
{
count1++;
if (count1 == 1)
{
onHour1 = hour;
onMin1 = min;
buffer[0] = 0x00;
buffer[1] = 0x68;
buffer[2] = 0x78;
buffer[3] = 0x71;
showOnce();
}
else
{
count1 = 0;
savetimeOff1();
}
}
savetimeOff1()
{
offHour1 = hour;
offMin1 = min;
buffer[0] = 0x63;
buffer[1] = 0x63;
buffer[2] = 0x78;
buffer[3] = 0x71;
showOnce();
}
manualOnOff()
{
opto= ~opto | 0x7f; /* complement bit 7 which in turn activates P3.7
*/
if ((opto & 0x80) == 0)
{
buffer[0] = 0;
buffer[1] = 0;
buffer[2] = 0x68;
buffer[3] = 0x78;
showOnce();
}
else
{
buffer[0] = 0;
buffer[1] = 0x63;
buffer[2] = 0x63;
buffer[3] = 0x78;
showOnce();
}
}
showOnce()
{
int i;
for(i=0;i<500;i++)
scanLED();
}
keydelay()
{
if ((flag1 & 0x80) !=0)
{
delay--;
if(delay == 0)
flag1 &= ~0x80;
}
}
comparetime()
{
if((flag1 & 0x01) != 0 )
{
flag1 &= ~0x01;
if(hour == onHour1 && min == onMin1)
opto = 0x7f; /* clear P3.7 turning opto on */
if(hour == offHour1 && min == offMin1)
opto = 0xff; /* set bit P3.7 turning opto off */
}
}
offmsd()
{
if (buffer[3] == 0x3f) /* if msd = '0' then put blank unstead */
buffer[3] = 0x00;
}
pause(j)
int j;
{
int i;
for (i = 0; i < j; i++)
;
}
Ví dụ như chỗ
#include c:\mc51\8051io.h
#include c:\mc51\8051reg.h
thì phải thay đổi thành 89c52 chứ nhỉ?, Mình hiểu lơ mơ lắm, giúp mình nhé!Email:
Đau đầu vì điện tử
Comment
-
Nguyên văn bởi romance_qt Xem bài viếtbạn làm vậy thì khi cúp điện lấy đâu ra nguồn nuôi cho 89S52 liệu máy cục pin kia được bao lâu thời gian,hết pin resert.lại phải chỉnh lại giờ,tốt nhất làm có RTC DS1307 là hay nhấtEmail:
Đau đầu vì điện tử
Comment
-
Mình dùng 89s52, mô phỏng bằng proteus7.1 nó ko chạy là sao nhỉ, sao Bác Phi viết bài mà ko kiểm tra lại, ở chỗ led7 chung anode trong hình bác lại viết là catod chung là sao?
còn cái code của nó nữa, liệu có sai sót gì không?Email:
Đau đầu vì điện tử
Comment
-
Nguyên văn bởi lowpass Xem bài viếtMình dùng 89s52, mô phỏng bằng proteus7.1 nó ko chạy là sao nhỉ, sao Bác Phi viết bài mà ko kiểm tra lại, ở chỗ led7 chung anode trong hình bác lại viết là catod chung là sao?
còn cái code của nó nữa, liệu có sai sót gì không?
Comment
-
Nguyên văn bởi chung1608 Xem bài viếtđưa mạch và code lên đây mình hô biến cho ^^!
và đây là hướng dẫn
code ở bài trên mình đã post, giúp mình với!Last edited by lowpass; 08-10-2011, 18:24.Email:
Đau đầu vì điện tử
Comment
-
Nguyên văn bởi chung1608 Xem bài viếttình hình là code C, mạch muốn led sáng phải thay trans PNP thành cỗng NOT (protues mô phỏng quét led ko dùng trans được )Email:
Đau đầu vì điện tử
Comment
-
Nguyên văn bởi lowpass Xem bài viếtcode C hay ASM thì cũng chuyển sang file .hex chứ nhỉ? mình chẳng hiểu, còn cái cổng NOT lắp thế nào vậy? mình chạy mô phỏng bằng file .hex copy được ở trong bài hướng dẫn ấy, mà nó vẫn không chạy, toàn báo lỗi?
Cổng NOT thay cho trans, chân B của trans là chân vào cổng NOT chân C của trans là chân ra của công NOT
Comment
-
Mình đã vẽ lại rồi dùng IC cổng NOT 74LS05, mạch chạy không báo lỗi nữa, nhưng không có led nào sáng, chỉ thấy các cổng có tín hiệu nhấp nháy, giúp mình một lần nữa đi nhé, nếu không mô phỏng được thì mình làm mạch thật thôi vậy.Attached FilesEmail:
Đau đầu vì điện tử
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Trình điều khiển bước rời rạcbởi mèomướpDạ nếu chú đã viết được chương trình cho vđk thì thêm 1 chương trình con chạy động cơ bước chỉ đơn giản là copy phát. Về phần cứng thì vài con cách ly quang, vài con mosfet thôi ạ. thực sự là dễ dàng như bài tập bình thường của sinh viên thôi ạ...
-
Channel: Máy công cụ
Hôm qua, 12:55 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi Minhdai95vâng mình cảm ơn mn đã góp ý
-
Channel: Điện tử công suất
Hôm qua, 11:30 -
-
bởi tom22Xin chào
Tôi có một dự án trong đó một động cơ bước tích hợp được điều khiển bởi một bộ vi điều khiển.
Nhưng tôi thực sự không thích trả tiền cho trình điều khiển bước, khi tôi có một bộ vi điều khiển có khả năng thực...-
Channel: Máy công cụ
Hôm qua, 10:54 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú chủ thớt có thời gian và đam mê thì cứ từ từ ngâm cứu đi ạ đừng nghe chú Chú bq... dọa mà sợ ạ. Cái nguồn nhìn cũng lởm có khi hông bằng cái máy hàn tàu của chị hàng xóm hôm nọ tháo ra sửa với chú thợ thông ống nước suốt đêm mới xong. Chú ý an toàn xíu là được ạ...
-
Channel: Điện tử công suất
05-01-2025, 15:40 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi bqvietBộ nguồn xung ở tầm công suất 2700W này, gần 3 ký, không bao giờ đơn giản để mà sửa ngay cả đối với người có kinh nghiệm chứ đừng nói người không chuyên. Đám linh kiện công suất không tự nhiên cháy mà phải xuất phát từ nguyên nhân...
-
Channel: Điện tử công suất
04-01-2025, 22:09 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú kiểm tra đi ốt đầu vào, ra nữa ạ. Về phần kiểm tra dao động chú hỏi chị google ấy ạ, có nhìu cô chú đã hướng dẫn rồi ạ...
-
Channel: Điện tử công suất
04-01-2025, 16:53 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi Minhdai95mình đã kiểm tra phần công suất thấy hỏng cả 4 con IGBT mà mình muốn kiểm tra phần dao động và hồi tiếp khi chưa cấp điện cho mạch thì có cách nào không b, mình không phải dân trong nghề lên chưa có kinh nghiệm sửa. Cảm ơn b
-
Channel: Điện tử công suất
04-01-2025, 14:27 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ chú nhắm phần công suất dễ kiểm tra và hay hư hỏng nhất trước ạ. Rồi đến phần dao động nguồn, hồi tiếp...
-
Channel: Điện tử công suất
04-01-2025, 11:42 -
-
bởi Minhdai95mọi người đã ai sửa bộ nguồn này chưa ạ, cho e xin ít kinh nghiệm để sửa bộ nguồn. Em cảm ơn...
-
Channel: Điện tử công suất
04-01-2025, 11:22 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi nhathung1101
-
Channel: Điện tử dành cho người mới bắt đầu
31-12-2024, 17:39 -
Comment