Nguyên văn bởi fermin_t4
Thông báo
Collapse
No announcement yet.
Mạch đếm sản phẩm với 8051 !
Collapse
X
-
đời có những người muốn được voi đòi tiên nó khổ lắm ^^!Nguyên văn bởi mast090 Xem bài viếtđể anh làm cả mạch thật rồi gửi qua mail cho nhé
Comment
-
E mang mạch này đi đặt mạch in họ bảo sai chân JACK DC 5v. giờ e ko pít sửa thế nào. a sửa giúp e tý. a gửi vào mail giúp e hcthuan007@gmail.com. Thanks a
Comment
-
Sao e làm mạch này thì con led hàng đơn vị phần cài đặt nó hiển thị lỗi nhì,nó ra đc 1 2 net gì thôi,ko biết có bị nạp lỗi ko,thay con trên bằng 89s và nạp bằng burn E,nạp SP2200s bị hư rồi.
chỉ bị lỗi con cuối cùng còn lại mạch chạy tốt,nhưng thay con 24C04 khác vào thì ko hiển thị đc,giống như ko có nhớ vậy.
Mấy bác cho e vài ý kiến.ĐT: 0972 20 58 68
Gmail:
Comment
-
bác ktra lại kỹ pcb xem có bị chạm chập gì ko!Nguyên văn bởi hoangnam555 Xem bài viếtSao e làm mạch này thì con led hàng đơn vị phần cài đặt nó hiển thị lỗi nhì,nó ra đc 1 2 net gì thôi,ko biết có bị nạp lỗi ko,thay con trên bằng 89s và nạp bằng burn E,nạp SP2200s bị hư rồi.
chỉ bị lỗi con cuối cùng còn lại mạch chạy tốt,nhưng thay con 24C04 khác vào thì ko hiển thị đc,giống như ko có nhớ vậy.
Mấy bác cho e vài ý kiến.
Comment
-
PCB e làm bị lỗi chỗ led 7 đoạn,có lẽ do vội.Nguyên văn bởi chumanh Xem bài viếtbác ktra lại kỹ pcb xem có bị chạm chập gì ko!
E có thắc mắc là sao thay con 24c04 khác vào nó ko hiển thị đc số cài đặt,thay 2 con khác vào bị như nhau,2 con mua khác chỗ.
bác nào sửa giúp e cái chỗ relay đc ko,khi đếm đủ thì cho relay đóng mãi đến khi nào nhấn reset lại thì trở lại bình thường.Code C e đọc ko hiểu!ĐT: 0972 20 58 68
Gmail:
Comment
-
E đang học và trường nó dạy con này nên phải dùng nó thôi bác.Nguyên văn bởi hoangdai Xem bài viếtMấy con PIC/avr sao ko dùng mà quay về 89 làm chi vậy?ĐT: 0972 20 58 68
Gmail:
Comment
-
thử code này xem sao:Nguyên văn bởi hoangnam555 Xem bài viếtbác nào sửa giúp e cái chỗ relay đc ko,khi đếm đủ thì cho relay đóng mãi đến khi nào nhấn reset lại thì trở lại bình thường.Code C e đọc ko hiểu!
Code:/*********************************************************** FileName: Product-Counter.c MCU: 8051 Xtal: 12Mhz App: Product Counter Author: manhcuong.k08@gmail.com Creat Date: 8/5/2011 Finish Date: ************************************************************/ #include <at89x52.h> #include <stdlib.h> #include <stdio.h> /**********************define var,port*********************/ #define data_port P2 #define sel_port P0 sbit MODE = P3^3; //external interrupt 1 sbit DEC = P3^5; //DEC value sbit INC = P3^4; //increment value sbit LOUS = P1^2; sbit _CINC = P1^6; sbit _CDEC = P1^7; sbit PRODUCT = P3^2; sbit RESET = P1^5; sbit relay = P3^7; /////////// /*********************sub program**************************/ //==========================================================// // // // other // //==========================================================// void write_eeprom(unsigned char add,unsigned char dat); unsigned char read_eeprom(unsigned char add); void i2c_stop(); void i2c_send_start(unsigned char dat); void i2c_send(unsigned char dat); unsigned char i2c_read(); void delay(int time); void TIMER0_ini(); void TIMER1_ini(); void display_2(); void display_1(); void default_value(); void check_value(); void intro(); unsigned char code _7_segment[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; char ASCII[] = "0123456789"; unsigned char code HELLO[] = { 0x00,0x00,0x00,0x00,0x00,0x0,0x00,0x00, 0x00,0x76,0x79,0x38,0x38,0x3f, 0x00,0x00,0x00,0x00,0x00,0x0,0x00,0x00,/*null*/0xff}; unsigned char IN_VISIBLE; unsigned char CONTROL_INVISIBLE=0; unsigned char SHIFT_CURCOR; unsigned char time = 15; unsigned char UPS = 0; char DEFAULT[4]; int VALUE; unsigned char counter_status; unsigned char lous_status; unsigned char temp,loi; int temp2,temp1; char temp3[4]; /*****************************************************/ sbit I2CSDA = P1^1; //data I2c line sbit I2CSCL = P1^0; //CLOCK i2c line /********************************************************/ /* Main Program */ /********************************************************/ void main() { unsigned char counter; unsigned char temp; int temp1; sel_port = 0xff; data_port = 0x00; I2CSDA = 0; I2CSCL = 0; LOUS = 1; //disable lous DEC = 1; INC = 1; _CINC = 1; _CDEC = 1; RESET = 1; relay=1; TIMER1_ini(); TIMER0_ini(); //enable global interrupt IT1 = 1; //hight to low // EX0 = 1; //enable external interrupt 0 // IT0 = 1; //hight to low EA = 1; PT1 = 1;//interrupt priority timer 1 //UPS PT0 = 1;//interrupt priority timer 0 //UPS EX1 = 1; // for(counter=0;counter<8;counter++) // write_eeprom(counter,0x00); intro(); for(counter=0;counter<4;counter++) DEFAULT[counter] = read_eeprom(counter+0x04); VALUE = read_eeprom(0x00); VALUE <<=8; VALUE |= read_eeprom(0x01); while(1){ IN_VISIBLE = 0x00; display_1(); display_2(); check_value(); while(RESET) { IN_VISIBLE = 0x00; display_1(); display_2(); check_value(); if(_CINC==0) { while(_CINC==0){display_1(); display_2(); } if(loi !=0xaa) ////////// { VALUE++ ; temp1=VALUE; temp = temp1; write_eeprom(0x01,temp); temp1>>=8; temp = temp1; write_eeprom(0x00,temp);} } if(_CDEC==0) { while(_CDEC==0){display_1(); display_2(); } VALUE--; if(VALUE==0xffff) VALUE=0; temp1=VALUE; temp = temp1; write_eeprom(0x01,temp); temp1>>=8; temp = temp1; write_eeprom(0x00,temp); } if(PRODUCT==0) { if(VALUE < temp2) ////////// { while(PRODUCT==0){display_1();display_2();} VALUE+=1; temp1=VALUE; temp = temp1; write_eeprom(0x01,temp); temp1>>=8; temp = temp1; write_eeprom(0x00,temp);} } } VALUE=0;///////// temp1=VALUE; temp = temp1; write_eeprom(0x01,temp); temp1>>=8; temp = temp1; write_eeprom(0x00,temp); relay=1; } } //==========================================================// // // // display 1 // //==========================================================// void display_2() { unsigned char scan_code = 0xf7; sel_port = scan_code; data_port = _7_segment[VALUE/1000]; delay(7); data_port = 0x00; sel_port = 0xff; scan_code >>=1; scan_code |=0xf8; sel_port = scan_code; data_port = _7_segment[VALUE%1000/100]; delay(7); data_port = 0x00; sel_port = 0xff; scan_code >>=1; scan_code |=0xf8; sel_port = scan_code; data_port = _7_segment[VALUE%1000%100/10]; delay(7); data_port = 0x00; sel_port = 0xff; scan_code >>=1; scan_code |=0xf8; sel_port = scan_code; data_port = _7_segment[VALUE%1000%100%10]; delay(7); data_port = 0x00; sel_port = 0xff; } ////========================display 3=============================//// void display_1() { unsigned char scan_code = 0x7f,counter; for(counter=0;counter<4;counter++) { data_port = _7_segment[DEFAULT[counter]]; sel_port = scan_code; sel_port |= IN_VISIBLE; delay(7); data_port = 0x00; sel_port = 0xff; scan_code >>=1; scan_code |=0x8f; } } //==========================================================// // // // delay // //==========================================================// void delay(int time) { int i,j; for(i=0;i<time;i++) for(j=0;j<time;j++) {;} } //==========================================================// // // // Timer0_ini // //==========================================================// void TIMER0_ini() { TMOD = 0x01; //timer 1 16bit reload TH0 = 0x00; TL0 = 0x00; TF0 = 0; TR0 = 0; ET0 = 1; //enable interrupt timer1 } //==========================================================// // // // Timer1_ini // //==========================================================// void TIMER1_ini() { TMOD |= 0x10; //timer 1 16bit reload TH1 = 0x00; TL1 = 0x00; TF1 = 0; TR1 = 0; ET1 = 1; //enable interrupt timer1 } //==========================================================// // // // Timer1_interrupt // //==========================================================// void TIMER1_interrupt() interrupt 3 { TR1 = 0; //stop timer1 TF1 = 0; //clear TF1 TH1 = 0; TL1 = 0; CONTROL_INVISIBLE++; if(CONTROL_INVISIBLE==10) { IN_VISIBLE = 0x00; } else if(CONTROL_INVISIBLE==20) { IN_VISIBLE = SHIFT_CURCOR; CONTROL_INVISIBLE=0; } else {;} TR1 = 1; } //==========================================================// // // // Timer0_interrupt // //==========================================================// void TIMER0_interrupt() interrupt 1 { TR0 = 0; //stop timer1 TF0 = 0; //clear TF1 TH0 = 0; TL0 = 0; lous_status++; if(lous_status==10) { LOUS =1;//off lous TR0 = 0; } else TR0 = 1; } //==========================================================// // // // External Interrupt 1 // //==========================================================// void EX1_interrupt()interrupt 2 { EX1 = 0; // disable ex interrupt 1 TR1 = 1; //enable TIMER1 IN_VISIBLE = 0x80; SHIFT_CURCOR = IN_VISIBLE; CONTROL_INVISIBLE=0; counter_status=0x00; while(MODE==0){display_1();display_2(); } while(counter_status!=0x04) { while(MODE) { if(INC==0) { while(INC==0){display_1();display_2();} DEFAULT[counter_status]++; if(DEFAULT[counter_status]==0x0a) DEFAULT[counter_status]=0; default_value(); } if(DEC==0) { while(DEC==0){display_1();display_2();} if(DEFAULT[counter_status]==0x00) DEFAULT[counter_status]=9; else DEFAULT[counter_status]--; default_value(); } display_1();display_2(); } while(MODE==0){display_1();display_2(); } while(IN_VISIBLE==0x00){display_1();display_2(); } IN_VISIBLE >>= 1; SHIFT_CURCOR = IN_VISIBLE; counter_status++; } IE1 = 0;//clear external interrupt 1 flag TR1 = 0; EX1 = 1; } //=========================================================// void check_value() { for(temp = 0;temp<4;temp++) temp3[temp] = ASCII[DEFAULT[temp]]; temp2 = atoi(temp3); if(VALUE >= temp2&&VALUE!=0x0000)///////////// { relay=0; /////// lous_status = 0; LOUS = 0; //on lous TR0 = 1;//start timer0 loi=0xaa; /////// } else { relay=1; /////// loi=0x55;}/////// } //==========================================================// // // // update default value // //==========================================================// void default_value() { unsigned char temp; for(temp=0;temp<4;temp++) write_eeprom(temp+0x04,DEFAULT[temp]); } //==========================================================// void i2c_stop() { I2CSDA = 0; I2CSCL = 1; I2CSDA = 1; delay(time); } //================================== // write_eeprom //================================== void write_eeprom(unsigned char add,unsigned char dat) { //=========================send Byte control write; i2c_send_start(0xa0); //=========================send Byte add i2c_send (add); //=========================send Byte data i2c_send (dat); i2c_stop(); } //================================== // read_eeprom //================================== unsigned char read_eeprom(unsigned char add) { unsigned char GetByte; //=========================send Byte control write; i2c_send_start(0xa0); //=========================send Byte add i2c_send (add); //=========================send Byte data i2c_send_start (0xa1); GetByte = i2c_read(); i2c_stop(); return GetByte; } //================================= //i2c_send_start //================================= void i2c_send_start (unsigned char dat) { unsigned char i; I2CSDA = 1; I2CSCL = 1; I2CSDA = 0; I2CSCL = 0; for(i = 0;i<8;i++) { if ( dat & 0x80) { I2CSDA = 1; // MSB first -> LSB last } else { I2CSDA = 0; } I2CSCL = 1; dat=dat<<1; I2CSCL = 0; } I2CSDA = 1; I2CSCL = 1; I2CSCL = 0; } //================================= //i2c_send //================================= void i2c_send (unsigned char dat) { unsigned char i; for(i = 0;i<8;i++) { if ( dat & 0x80) { I2CSDA = 1; // MSB first -> LSB last } else { I2CSDA = 0; } I2CSCL = 1; dat=dat<<1; I2CSCL = 0; } I2CSDA = 1; I2CSCL = 1; I2CSCL = 0; } //================================= //i2c_read //================================= unsigned char i2c_read () { register unsigned char i, res; I2CSDA = 1; res = 0; for (i=0;i<8;i++) // each bit at a time, MSB first { I2CSCL = 0; I2CSCL = 1; res = res << 1; if (I2CSDA) res++; } I2CSDA = 1; // BIT STOP , =0 LA BIT START I2CSCL = 1; I2CSCL = 0; return res ; } //////////////////////////////////////////////////////// /// INTRO /// ////////////////////////////////////////////////////// void intro() { unsigned char counter_char=0,index,time_shift,counter; unsigned char __SELECT__ ; while(HELLO[counter_char]!=0xff) counter_char++; for(index=0;index<counter_char-8;index++) { for(time_shift=0;time_shift<20;time_shift++) { __SELECT__ = 0xf7; for(counter=0;counter<8;counter++) { data_port = HELLO[counter+index]; sel_port = __SELECT__; delay(7); sel_port = 0xff; //disable all led data_port = 0x00; //disable all led __SELECT__ >>= 1; __SELECT__ |= 0xf8; } } } delay(100); }|
Comment
-
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi vi van phamHôn nhân của tôi dường như có bàn tay sắp đặt của ông tơ, bà nguyệt. Bà xả nói tôi viết hồi ký duyên số này. Tôi đã viết vào tập 100 trang học sinh. Sau 50 năm lật tới, lật lui xem quyển hối ký có nơi rách nát. Tôi viết lại bằng AI, giọng đọc VBBe, ca sĩ hát là là Synthesizer V.
...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 14:18 -
-
Trả lời cho Công thức tính định luật kirchhoffbởi nguyendinhvanCông thức này chắc là để áp dụng cho UAV để bắn máy bay F15....
-
Channel: Hỗ trợ học tập
14-05-2026, 21:17 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92GIỚI THIỆU CA KHÚC VỀ CHA MẸ:
Nặng Nghĩa Mẹ Cha
Sáng tác: Hoàng Đình Thường
Giọng hát: AI
Công cha cao tựa như Thái Sơn
Nghĩa mẹ sâu nước biếc xanh trong
Mong con khôn lớn đời hạnh phúc
Mẹ cha...-
Channel: Tâm tình dân kỹ thuật
12-05-2026, 16:22 -
-
bởi afrendlyCảm ơn bạn. Mình hỏi để thợ có thể tham khảo thôi chứ không đủ kiển thức để sửa, mà cũng không có đồ nghề, mua đồ nghề quá tiền máy. Gọi nhiều lần mà thợ hẹn mãi chưa có tới ấy bạn. Mình muốn sửa được chứ bỏ thì uống, nhưng sợ là được mỗi người thợ mà lại không sửa nổi....
-
Channel: Điện tử gia dụng
11-05-2026, 00:34 -
-
bởi mèomướpDạ nó bị tắc ẩm hoặc rò thiếu gas hoặc lốc yếu hoặc van tiết lưu có vấn đề hoặc tất cả những nguyên nhân trên ạ. Chú ko chuyên về mảng này thì bán đi, giành thời gian trồng rau sạch đem ra chợ bán lấy tiền mua tủ mới ạ. Còn...
-
Channel: Điện tử gia dụng
10-05-2026, 17:01 -
-
bởi afrendlyXin chào mọi người. Mình lại có vấn đề về đồ điện cần nhờ mọi người hỗ trợ giúp. Mình có tủ lạnh Sharp dùng cũng lâu rồi. Trước có bị kém lạnh, không đông đá thì có thợ họ mang về, sục đường ga gì đó hết 900k và đã dùng...
-
Channel: Điện tử gia dụng
10-05-2026, 16:53 -
-
bởi dinhthuong92Đấy, cái tôi thắc mắc là chỗ màu hồng ấy bạn, để áp vào cao chứ không bị sụt gần bằng áp pin thì rất cần cuộc cảm để làm điều đó. Tuy nhiên, trong công thức bác thớt dẫn không thấy mặt L, và một vài mạch MPPT tôi đã kiểm...
-
Channel: Nguồn!
09-05-2026, 10:01 -
-
bởi mèomướpDạ mạch sạc là 1 cục nguồn, nó sẽ điều chỉnh công suất đầu ra để có tổng trở bằng nội trở của pin ạ. Và cái cách nó chỉnh công suất đầu ra sẽ là dạng buck, boot. Đều cần đến cuộn cảm ạ. Tất nhiên chú thích thì có thể dùng dạng tuyến tính transistor để bù trừ nhưng mà nó đốt năng lượng vô ích ạ...
-
Channel: Nguồn!
08-05-2026, 16:26 -
-
bởi dinhthuong92Tng trở R của tải (gồm pin và mạch sạc) trong công thức đó rõ ràng khống có L xuất hiện. Nếu tính các dây dẫn thì rất nhỏ, bỏ qua. Vì nội trở pin là rất nhỏ, có thể nói luôn lớn hơn nội trở solar, nên mạch MPPT sẽ hầu như luôn tính...
-
Channel: Nguồn!
08-05-2026, 11:00 -

Comment