MẠCH ĐẾM SẢN PHẨM. SV Thực Hiện:
Phạm Minh Hiếu Nguyễn Trọng Hùng Lê Tuấn Cảnh Nguyễn Hoàng Hà Uông Đình Dương Nguyễn Thị Xuân Thủy
Yêu cầu thực hiện: Thiết kế mạch đếm số lượng sản phẩm trong công
nghiệp .
Bao gồm:
Đầu đếm sản phẩm tương ứng với 1 băng truyền sản phẩm Bộ hiển thị bao gồm 5led 7 thanh để hiện thị số lượng sản phẩm
từ 0 đến 99999.
Mạch sử dụng 1 vi điều khiển Một bàn phím để nhập số lượng sản phẩm ban đầu hoặc thực
hiện các chức năng khách hàng yêu cầu.
Sơ đồ khối của mạch. +
Nguồn
Khối hiển thị( 5led7 thanh)
Vi điều khiển Khối quét động Khối giải mã Bàn phím Sensor
Đầu Vào Điều Khiển Đầu Ra
cấu trúc chung
Các phần tử thực hiện mạch. Đầu vào:
+Bàn phìm : nhập dữ liệu vào cho bộ đếm số lượng sản phẩm
thực hiện các chức năng người tiêu dùng yêu cầu:
Vd: reset hệ thống khi đang hoạt động mà xảy ra sự cố, đang
đếm tiến chuyển sang đếm lùi... Nguyên lý hoạt động
Hình vẽ trên trình bày 1 bàn phím 16 phím được thiết kế nối với 1
Post
+sensor: kiểm tra khi sản phẩm đI qua và gửi tín hiệu đến VĐK để xử
lí
Sơ đồ mạch sensor:
ĐIỀU KHIỂN. +Vi điều khiển: Nhận dạng tín hiệu vào từ bàn phím và sensor để xử lí. Gửi tín hiệu ra khối quét động và khối giảI mã để điều khiển hoạt động của hệ thống và hiển thị led.
Sơ đồ khối của vi điều khiển:
CPU RAM ROM
I/O Timer Cổng COM nối tiếp
Tín hiệu vào VĐK.
Thiết bị ra sens Inp ut outp ut
VĐK
A/D
D/A
+Khối quét động: đếm liên tục để quét lần lượt các led theo yêu cầu
Linh kiện gồm có: bộ đếm xuôI hay đếm ngược dung IC74LS193.
Với nhiệm vụ đặt ra ta dùng VĐK AT89c52 của họ 8051 là phù hợp. Sơ đồ nguyên lý của VĐK: của VĐK nhằm sử dụng ít nhất số chân vi điều khiển.
Bộ giảI mã địa chỉ dùng IC74LS154
Với hai linh kiện được dùng như trên thì số led
tối đa có thể quét là 16 led 7 thanh. GiảI thích sơ đồ mạch:
- Các chân quét1 và quét 2 được nối với chân của VĐK. - Các chân CA1.1 đến CA1.5 là các chân được nối với chân Enable của
các led 7 thanh.
- Khi hoạt động các chân quét được cấp các xung liên tục theo 1 chu kì
nhất định để các chân ra lần lượt được set lên mức tích cực. +Khối giảI mã: chuyển từ tín hiệu nhị phân (VĐK) sang tín hiệu mã
BCD để hiện thị led 7 thanh. Bộ chốt: là flip_flop được ghép nối thích hợp để có khả năng nhận dữ liệu và lưu lại trong IC, khi nào có tín hiệu cho phép gửi từ VĐK thì xuất ra. Ta dùng IC họ 74xxxx.
Bộ giảI mã BCD 7 thanh dùng IC 74LS47
Hiển thị số sản phẩm đếm, hiện thị dữ liệu người dùng nhập vào.
HIỆN THỊ. SƠ ĐỒ KHỐI TOÀN MẠCH: a) Khối sensor.
Sơ đồ nguyên lý khối sensor
Sơ đồ mạch in khối sensor
b) Khối bàn phím
Sơ đồ nguyên lý khối bàn phím
Sơ đồ mạch in khối bàn phím
II.8.2. Khối xử lý và hiển thị:
a) Khối Vi điều khiển
b) Khối quét động:
c)Khối giải mã và hiển thị:
d) Khối nguồn:
e) Sơ đồ mạch in của các khối VĐK, khối giải mã, khối hiển thị và nguồn
LẬP TRÌNH CHO VI ĐIỀU KHIỂN:
//bat dau chuong trinh
//**************************
//phan khai bao bien:
#include
{ P1=255; //bao hieu chuong trinh hoat dong //khoi tao cac bien a5=xoa; a4=0; a3=0; a2=0; a1=0; //********** d4=xoa; d3=xoa; d2=xoa; d1=0; //********** //chot=off; quet=off; quet=off; quet=on; quet=off; //mo khoa den1 quet=off; quet=on; quet=off; //mo khoa den1 quet=off; quet=on; quet=off; //mo khoa den1 #define cosp 0 #define kosp 1 #define on 1 #define off 0 int xoa=15;lanbam=0;phim=0;hang=0;cot=0; unsigned char d1,d2,d3,d4,a1,a2,a3,a4,a5; int i=0;//bien giai quyet viec dang kiem tra san pham //phan khai bao ham: void khoi_tao(void); void scan_key (void); void quet_key (void); void special_key (void); void hien_phim (void); void hien_thi (void); void KT_sensor (void); void KT_sensor_lui (void); void nap_du_lieu (void); void nap_du_lieu_lui (void); void delays (unsigned char n); void delayms (unsigned char n); // phan tao cac ham void khoi_tao (void) // // //
}
//quet hang
// 14D = 0000 1110B // 13D = 0000 // 11D = 0000 // 07D = 0000 1101B 1011B 0111B
//quet cot
//224D = 1110 0000B //208D = 1101 0000B //176D = 1011 0000B //112D = 0111 0000B
P3=255; P3_4=0; P3_5=0; P3_6=0; P3_7=0; delays(2); phim=P3; if (phim==15) {goto end_scan_key;} switch(phim) { case 14 :hang=0;break; case 13 :hang=4;break; case 11 :hang=8;break; case 7 :hang=12;break; }//end quet hang P3=255; P3_0=P3_1=P3_2=P3_3=0; phim=P3; if (phim==240) {goto end_scan_key;} switch(phim) { case 224 :cot=0;break; case 208 :cot=1;break; case 176 :cot=2;break; case 112 :cot=3;break; }//end quet cot phim=hang+cot; end_scan_key: delayms(1); { }
//quet hang
void scan_key (void) // void quet_key (void) // {lanbam=0; while (1) {P3=255; P3_4=0; P3_5=0; P3_6=0; P3_7=0; delays(2); phim=P3; if (phim==15) {goto end_scan;} switch(phim) { case 14 :hang=0;break;
case 13 :hang=4;break; case 11 :hang=8;break; case 7 :hang=12;break; }//end quet hang //quet cot
{ a2=xoa; if (a1==xoa) {a1=0;} } { a3=xoa; if ((a2==0)||(a2==xoa)) } P3=255; P3_0=P3_1=P3_2=P3_3=0; phim=P3; if (phim==240) {goto end_scan;} switch(phim) { case 224 :cot=0;break; case 208 :cot=1;break; case 176 :cot=2;break; case 112 :cot=3;break; }//end quet cot phim=hang+cot; if (phim==10) {d1=d2=d3=d4=0;goto end_quet;} if (phim==11) {a1=0;a2=xoa;a3=xoa;a4=xoa;goto end_scan;} if (phim==12) {goto end_scan;} if (phim==13) {goto end_scan;} if (phim==14) {goto end_scan;} if (phim==15) {goto end_scan;} lanbam=lanbam+1; delayms(50); switch(lanbam) { case 1 :a1=phim;break; case 2 :a2=a1;a1=phim;break; case 3 :a3=a2;a2=a1;a1=phim;break; case 4 :a4=a3;a3=a2;a2=a1;a1=phim;break; case 5 :a4=a3;a3=a2;a2=a1;a1=phim;lanbam=4;break; } //kiem tra loai cac so 0 o dau; if ((a4==0)||(a4==xoa)) { a4=xoa; if ((a3==0)||(a3==xoa)) }
end_scan: hien_phim(); }//end while(1)
{ //d1=a1; P0=a1;//nap so vao den 1 quet=off; quet=on; quet=off; //mo khoa den1 chot=off; chot=on; chot=off; //mo chot so den1 delayms(2); //********** //d2=a2; P0=a2;//nap so vao den 2 quet=off; quet=on; quet=off; //mo khoa den2 chot=off; chot=on; chot=off; //mo chot so den2 delayms(2); //********** //d3=a3; P0=a3;//nap so vao den 3 quet=off; quet=on; quet=off; //mo khoa den3 chot=off; chot=on; chot=off; //mo chot so den3 delayms(2); //********** //d4=a4; P0=a4;//nap so vao den 4 quet=off; quet=on; quet=off; //mo khoa den4 chot=off; chot=on; chot=off; //mo chot so den4 delayms(2); quet=off; quet=on; quet=off; //quet them 1 lan cho tat toan bo delayms(2); //********** }//end hien_phim;
end_quet: phim=15; // delays(2); }//end quet_key void hien_phim (void) void hien_thi (void) { //d1=a1; P0=d1;//nap so vao den 1 quet=off; quet=on; quet=off; //mo khoa den1 chot=off; chot=on; chot=off; //mo chot so den1 delayms(2);
{ d1=d1+1; i=1; nap_du_lieu(); }
}
{ if ((s1==kosp)||(i==0)) { if (s1==cosp) else { i=0; } }
i=1; nap_du_lieu_lui(); } { d1=d1-1;
//********** //d2=a2; P0=d2;//nap so vao den 2 quet=off; quet=on; quet=off; //mo khoa den2 chot=off; chot=on; chot=off; //mo chot so den2 delayms(2); //********** //d3=a3; P0=d3;//nap so vao den 3 quet=off; quet=on; quet=off; //mo khoa den3 chot=off; chot=on; chot=off; //mo chot so den3 delayms(2); //********** //d4=a4; P0=d4;//nap so vao den 4 quet=off; quet=on; quet=off; //mo khoa den4 chot=off; chot=on; chot=off; //mo chot so den4 delayms(2); quet=off; quet=on; quet=off; //quet them 1 lan cho tat toan bo delayms(2); //********** }//end hien_thi; void KT_sensor (void) void KT_sensor_lui (void) { if ((s1==kosp)||(i==0)) { if (s1==cosp) else { i=0; }
} }
//kiem tra den1 tron 10 thi tang den2
//kiem tra den2 tron 10 thi tang den3
if (d3==xoa) {d3=1;} if (d3==10) else {d3=d3+1;} //kiem tra den3 tron 10 thi { if (d1==10)
{d3=0; if (d4==xoa) {d4=1;} if (d4==10) else {d4=d4+1;} //kiem tra else {d2=d2+1;} {d2=0;
{ d1=1; d2=xoa; d3=xoa; d4=xoa; } } }
if ((d1==a1)&&(d2==a2)&&(d3==a3)&&(d4==a4))
{ if ((d1==0)&&(d2==xoa)) {while (1) {hien_thi(); scan_key(); if (phim==11)
} } //kiem tra den1 0 va
void nap_du_lieu (void) {d1=0; if (d2==xoa) {d2=1;} if (d2==10) tang den4 den4 tron 10 thi nhay ve ...1 } {d1=0;d2=xoa;d3=xoa;d4=xoa;} }//end nap_du_lieu void nap_du_lieu_lui (void) {d1=a1;d2=a2;d3=a3;d4=a4;break;} den2=xoa thi dung lai else { if (d1==255) {d1=9; d2=d2-1; if ((d2==0)&&(d3==xoa)) {d2=xoa;} else {
if (d2==255) {d2=9; d3=d3-1; if ((d3==0)&&(d4==xoa))
else { if (d3==255) {d3=9; d4=d4-1; if (d4==0)
} }//end else d3=0 } }//end else d2=0 }//end if d1=255 }//end else d1=0 }//end nap_du_lieu
unsigned char i,j,k,n;//vi su dung thach anh 12Mhz nen 1chu ki
for(j=1;j<66;j++){ for(k=1;k<60;k++){ for(n=1;n<35;n++){}
} } }
unsigned char i,j,k;
for(k=1;k } } {
if (phim==1) {}
}*/ {d3=xoa;}
{d4=xoa;}
void delays (unsigned char m)//10->4//
{
lenh=12/12=1us
for (i=1;i khoi_tao();
begin:
d4=xoa;
d3=xoa;
d2=xoa;
d1=0;
quet_key();
P1_1=!P1_1;//bao quet phim xong {
hien_thi();
scan_key();
if (phim==12) {delayms(100);phim=240;goto hanh_trinh2;} //dem tien tu 0 if (phim==13) {delayms(100);phim=240;goto hanh_trinh3;} //dem tu so dat } d4=xoa;
d3=xoa;
d2=xoa;
d1=0;
while (1)
{
hien_thi();
KT_sensor();
scan_key();
//kiem tra special key
if (phim==10) {delayms(150);goto begin;} //nhap lai va chay lai tu //dem lai tu dau d2=xoa;
d3=xoa;
d4=xoa;
delayms(150);
phim=15; if (phim==11) {
if (phim==12) { d1=0;
}
phim=15; //dung dem de chuyen while (1) // chon chuong trinh
-> so dat.
-> 0.
//*******************************
//*******************************
while (1)
{
hanh_trinh2:P1_1=!P1_1;//bao chuong trinh hoat dong
dau
ca,nhap them hoac bot so delayms(150);
while (1) { hien_thi(); scan_key(); if (phim==13) //tang them 1 if (phim==14) phim=15;delayms(150);} if (phim==12) phim=15;delayms(150);} } } //end special key
}//end while d1=a1;
d2=a2;
d3=a3;
d4=a4;
while (1)
{
hien_thi();
KT_sensor_lui();
scan_key();
//kiem tra special key
if (phim==10) {delayms(150);goto begin;} //nhap lai va chay lai tu //dem lai tu dau d2=a2;
d3=a3;
d4=a4;
delayms(150);
phim=15; if (phim==11) {
if (phim==12) { d1=a1;
}
phim=15; //dung dem de chuyen hien_thi(); scan_key();
if (phim==13) {d1=d1+1;nap_du_lieu();
{d1=d1-1;nap_du_lieu_lui(); //bot di 1
{phim=15;delayms(150);break;} //chay tiep
}//end hanh_trinh2
//*******************************
while (1)
{
hanh_trinh3:P1_1=!P1_1;//bao chuong trinh hoat dong
dau
ca,nhap them hoac bot so
{d1=d1+1;nap_du_lieu(); delayms(150);
while (1) {
//tang them 1 if (phim==14) phim=15;delayms(150);} if (phim==12) phim=15;delayms(150);} } } //end special key
}//end while {d1=d1-1;nap_du_lieu_lui(); //bot di 1
{phim=15;delayms(150);break;} //chay tiep
}//end hanh_trinh2
//*******************************
}//end main().