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ử

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 #include /*phan dinh nghia cac hang so*/ #define s1 P1_0 #define quet P2_6 #define chot P2_7

{ 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().