cám ơn anh 'tdm' đã giúp đỡ. Nhưng trong chương trình của anh viết vẫn chưa đúng theo yêu cầu anh à, có lẽ em giải thích vẫn chưa rõ. anh viết 2 led bên trái thì đúng rồi, nhấn đếm giảm và đặt số đúng như vậy ạ. nhưng 2 led bên phải thì ý em không phải như thế. em muốn khi bắt đầu 2 led bên trái hiển thị 15, còn 2 led bên phải hiển thị 10. khi nhấn giảm thì 2 led bên trái xuống 14, còn 2 led bên phải xuống 9. cứ giảm như thế anh à, khi 2 led bên phải về 00 thì 2 led bên trái đang ở 05. nhấn giảm tiếp thì 2 led bên phải lên 05, còn 2 led bên trái xuống 04. 2 led hai bên giảm cùng một lúc và đối lập nhau anh.
Thông báo
Collapse
No announcement yet.
Chương trình đếm sản phẩm hiển thị Led 7 đoạn!
Collapse
X
-
Nguyên văn bởi anhpham009 Xem bài viếtkhi 2 led bên phải về 00 thì 2 led bên trái đang ở 05. nhấn giảm tiếp thì 2 led bên phải lên 05, còn 2 led bên trái xuống 04. 2 led hai bên giảm cùng một lúc và đối lập nhau anh.
[ATTACH=CONFIG]34628[/ATTACH]
[ATTACH=CONFIG]34629[/ATTACH]
Code:#include"reg51.h" char maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; char bien_dat=15,bien_dem=10,so_luong=0; char bien_dat_dv,bien_dat_chuc,bien_dem_dv,bien_dem_chuc; sbit phim =P3^2; sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; void delay(unsigned long int t) { unsigned long int l; for(l=0;l<t;l++); } void tach_so() { bien_dat_chuc=bien_dat/10; bien_dat_dv=bien_dat%10; bien_dem_chuc=bien_dem/10; bien_dem_dv=bien_dem%10; } void hienthi() { led1=0; P0=maled[bien_dat_chuc]; delay(10); P2=0xff; led2=0; P0=maled[bien_dat_dv]; delay(10); P2=0xff; led3=0; P1=maled[bien_dem_chuc]; delay(10); P2=0xff; led4=0; P1=maled[bien_dem_dv]; delay(10); P2=0xff; } void int0_ISR (void) interrupt 0 { delay(10) ; bien_dem--; bien_dat--; if(bien_dem==0) { if(so_luong==0) { bien_dat=5;bien_dem=0; } } else { if(bien_dem<0) { so_luong++; if(so_luong==1) { bien_dat=4;bien_dem=5; } else if(so_luong>=2) { bien_dat=15;bien_dem=10; so_luong=0; } else { } } } if(bien_dat<0) { bien_dat=15;bien_dem=10; so_luong=0; } } void main (void) { P3 =0xff; P2 =0xff; P0 =0xff; P1 =0xff; EX0=1; EA=1; IT0=1;/* Edge Trigerred*/ // IE0=0; while(1) { tach_so(); hienthi(); } }
|
Comment
-
dạ. cũng gần đúng rồi anh a`, khi nhấn thì led 2 bên giảm như vậy đó anh. nhưng vẫn chưa đủ yêu cầu anh à, 2 led bên phải sau khi giảm từ 5 xuống 0 rồi lại lên 15 nữa, sau đó xuống 0 rồi mới bắt đầu quay lại 10 và lặp lại quá trình. còn 2 led bên trái thì sau khi từ 15 xuống 0 thì lại lên 10 rồi xuống 0, tiếp theo lại lên 5 rồi xuống 0, xuống 0 rồi thì mới quay lại 15 để lặp lại quá trình ạ. anh sửa dùm em chút, từ hôm qua đến giờ em viết thêm nhưng vẫn chưa được, chạy được một lần lại bị lỗi. cám ơn anh nhiều
Comment
-
anh 'tdm' ơi! em viết được rồi...cám ơn anh nhiêu nhiều nhé, cả chiều nay em ngồi viết lại từ code của anh, mò mãi cuối cùng cũng ra,hjhj. đúng như anh nói: "đôi khi tự mình mò mới thấy hay". Tuy cách viết của em còn dài nhưng em sẽ cố gắng "mò" cho gọn lại...hj!
Code:#include"reg51.h"
char maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
char bien_dat=15,bien_dem=10,so_luong=0;
char bien_dat_dv,bien_dat_chuc,bien_dem_dv,bien_dem_chu c;
sbit phim =P3^2;
sbit led1=P2^0;
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
void delay(unsigned long int t)
{
unsigned long int l;
for(l=0;l<t;l++);
}
void tach_so()
{
bien_dat_chuc=bien_dat/10;
bien_dat_dv=bien_dat%10;
bien_dem_chuc=bien_dem/10;
bien_dem_dv=bien_dem%10;
}
void hienthi()
{
led1=0;
P0=maled[bien_dat_chuc];
delay(10);
P2=0xff;
led2=0;
P0=maled[bien_dat_dv];
delay(10);
P2=0xff;
led3=0;
P1=maled[bien_dem_chuc];
delay(10);
P2=0xff;
led4=0;
P1=maled[bien_dem_dv];
delay(10);
P2=0xff;
}
void int0_ISR (void) interrupt 0 {
delay(10) ;
bien_dem--;
bien_dat--;
if(bien_dem==0)
{
if(so_luong==0)
{
bien_dat=5;bien_dem=0;
}
}
else
{
if(bien_dem<0)
{
so_luong++;
if(so_luong==1)
{
bien_dat=4;bien_dem=5;
}
else if(so_luong==2)
{
bien_dat=10;bien_dem=0;
}
else if(so_luong==3)
{
bien_dat=9;bien_dem=15;
}
else if(so_luong==4)
{
bien_dat=5;bien_dem=5;
}
else if(so_luong>=5)
{
bien_dat=15;bien_dem=10;
so_luong=0;
}
else
{
}
}
}
if(bien_dat<0)
{
so_luong++;
if(so_luong==2)
{
bien_dat=10;bien_dem=0;
}
else if(so_luong==3)
{
bien_dat=9;bien_dem=15;
}
else if(so_luong==4)
{
bien_dat=5;bien_dem=5;
}
else if(so_luong>=5)
{
bien_dat=15;bien_dem=10;
so_luong=0;
}
}
}
void main (void)
{
P3 =0xff;
P2 =0xff;
P0 =0xff;
P1 =0xff;
EX0=1;
EA=1;
IT0=1;/* Edge Trigerred*/
// IE0=0;
while(1)
{
tach_so();
hienthi();
}
}Last edited by anhpham009; 29-10-2011, 19:29.
Comment
-
Tôi thì lại quan trọng cách làm hơn là code vì tôi cũng không thích chép code của ai, chắc bạn cũng sẽ tự làm được nên tôi chỉ nói them vài điểm:
Giao tiếp PLC là 24v-0v, trong khi vdk là 5v-0v tương ứng mức 1-0 vì vậy cần có một đệm để chuyển mức, đơn giản là dung zenno, opto, điện trở để lấy mức 1-0 ngõ ra đưa vào vdk. Khi cần lien quan giữa 2 hệ khác nhau thì cách li và đáp ứng tần số là cần thiết.
Dung một cặp led 4 con chung để vẽ mạch đơn giản, bù lại cần kĩ thuật quét led phức tạp hơn và quan trọng là nguồn cung cấp cho nó cần phải đủ, nếu không sẽ sang yếu hoặc mất nét (seg).
Bạn viết ra một, hai vòng lặp rõ rang cho từng cặp led 2 bên vì cái này theo quy luật cố định và lặp lại, đó là cái đơn giản của vấn đề. Sau khi đã có chu trình rõ rang bạn cần dùng kĩ thuật lấy ngõ vào, delay để khử nhiễu ( gia công xung) và lấy được xung tốt. khi có xung tốt thì dung tiếp cấu trúc kiểm tra thứ tự xung nhận được bằng chuỗi : lấy ngõ vào, tăng biến đếm để xem thứ thự xung, so sánh thứ tự xung ở từng khoảng đã định thì tăng hoặc giảm giá trị ra cho led, lien tiếp hoặc nhảy. có thể lưu các giá trị này trong thanh ghi hoặc bảng về các con số 0—9, 0-5-10-15. Vừa hiển thị vừa nhận cảm biến ngõ vào nên cần phải nhảy về vòng lặp nhận ngõ vào sau khi hiển thị update kết quả hoặc ngược lại sau khi quét ngõ vào thì nhảy đến hiển thị kế quả. Việc này dung timer cho mỗi việc hoặc ngắt tràn đều được.
Chu trình tóm lại sẽ là: quét ngõ vào, khử nhiễu, so sánh để kiểm tra thứ tự xung, lấy các dữ liệu hình của các số theo thứ tự xung cho cả 2 bên, xuất ngõ ra ( vừa data, vừa quét các chân kích led). Sau đó quay trở lại, tất cả đều nối tiếp nhau và nếu khâu nào cần nhiều thêm thời gian thì them delay hoặc tăng giá trị ngắt timer để đảm bảo độ nhạy ngõ vào cũng như độ sang của led.
Có thể alo 0902989240, nếu giải thích được gì tôi sẽ nói vì cũng không có thời gian nên chỉ tư vấn, còn bạn tự làm. Như vậy là phù hợp.
http://www.youtube.com/watch?v=GKn3GGCbh_0
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi nguyendinhvanTheo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
Cách đơn giản...-
Channel: Điện thanh
hôm nay, 00:04 -
-
bởi Ng.Phuong.5Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
Mấy con...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 22:44 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
-
Channel: Điện tử công suất
Hôm qua, 19:02 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi tuyennhanChủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
-
Channel: Điện tử công suất
Hôm qua, 15:43 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi tuyennhanLoa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
-
Channel: Điện thanh
Hôm qua, 15:28 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi mèomướpDạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
-
Channel: Điện thanh
Hôm qua, 11:44 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi viettinhNó không phải cái loa rời. Chả nhẽ đèo thêm 2 con loa tép ngoài thì kỳ lắm....
-
Channel: Điện thanh
Hôm qua, 09:45 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi mèomướpDạ chú mua thêm loa tép nối tiếp qua con tụ rồi mắc vào cùng loa trung là được ạ...
-
Channel: Điện thanh
07-01-2025, 19:53 -
-
Trả lời cho Tìm datasheet linh kiện điện tử.bởi mèomướpDạ cháu hỏi bạn cháu thì bạn ấy trả lời như thế này ạ. Cháu cũng hông bít có đúng hông nữa ạ
Linh kiện điện tử với mã "943BA" và "W58BAL" là một loại cầu chì tự động (circuit breaker) do TE Connectivity sản...-
Channel: Điện tử dành cho người mới bắt đầu
07-01-2025, 19:50 -
-
bởi viettinhChuyện là mình mới đập hộp con loa kéo Sony SRS-XV900. Do khu vực mình k có sẵn hàng để trải nghiệm thực tế nên chỉ tham khảo các kênh revew online.
Mua về sử dụng thì thấy hơi buồn về chất âm, Mở max k to bằng cái loa kéo china, bass...-
Channel: Điện thanh
07-01-2025, 17:18 -
Comment