Đồ án Máy bán hàng tự động

Chương trình này chức năng giống chương trình trên, tuy nhiên chỉ thay đổi chiều chạy của màn hình, làm cho chữ hiển thị chạy theo chiều ngược lại. Do vậy, đối với chương trình con này việc dịch chuyển màn hình sẽ được thực hiện trước việc hiển thị chữ. Sau khi màn hình dịch chuyển sang phải, thông tin sẽ được đưa vào ở vị trí con trỏ đầu tiên của LCD, tiếp đó màn hình sẽ dịch theo hướng ngược lại so với hướng dịch chuyển ban đầu.

doc51 trang | Chia sẻ: oanh_nt | Lượt xem: 1573 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đồ án Máy bán hàng tự động, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
7 HEX 0 0 1 8/4 2/1 10/7 X X 20 TO 3F 8/4 = 1: LCD dùng 8 bít D0- D7 để trao đổi thông tin. 8/4 = 0: LCD dùng 4 bít D0- D4 để trao đổi thông tin. 2/1 = 1: LCD hiển thị trên cả 2 dòng. 2/1 = 0: LCD chỉ hiển thị trên 1 dòng. 10/7 = 1: mỗi kí tự sẽ được hiển thị cỡ 5*10. 10/7 = 0: mỗi kí tự sẽ được hiển thị cỡ 5*7. 7/ Set CGRAM: Khối chức năng hiển thị các kí tự, hình dạng theo định nghĩa riêng của người sử dụng. D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 1 A A A A A A 40 TO 7F 8/ Set display Address: Hiển thị kí tự tại 1 vị trí bất kì trên LCD. D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 1 A A A A A A 80 TO FF Trong phạm vi bài tập lớn này, chúng em sử dụng tất cả 8 tập lệnh này. * Các chế độ vào ra thông tin của LCD (kết hợp các chân E, RS, R/W). Có 2 chế độ đưa thông tin vào LCD (từ vi điều khiển): đọc trạng thái hiện hành của LCD cho Vi điều khiển biết. Điều khiển LCD là phải sử dụng linh hoạt các chế độ này. Việc quyết định dùng chế độ vào ra thông tin nào là do 3 chân E,RS,R/W của LCD quyết định. Chân E quyết định việc khi nào nhận thông tin ở các chân còn lại. Đó là kho tín hiệu ở chân E chuyển từ mức 1à0. Chân RS quyết định việc nhận lệnh hay dữ liệu. Lệnh (RS = 0); Dữ liệu (RS = 1). Chân R/W quyết định chiều truyền dữ liệu. Vào LCD (R/W = 0); Ra khỏi LCD (R/W = 1). Ví dụ: Muốn hiển thị chữ cái A trên LCD ta phải lần lượt qua các chế độ sau: Cấp nguồnà Đọc trạng thái của LCD xem LCD đã sẵn sàng chưaà gửi lệnh từ vi điều khiển vào LCD để thiết lập chế độ hiển thịà gửi mã của kí tự cần hiển thị vào LCD. III. Hiển thị trên LCD: Phần này sẽ sử dụng tập lệnh của LCD được xét ở mục 2 để đạt được mục đích hiển thị trên LCD kết hợp với sử dụng linh hoạt nhóm các chân điều khiển vào ra thông tin E, RS, R/W. 1. Thiết lập chế độ hiển thị cho LCD. Sử dụng các lệnh số 1, 4, và 6. 1/ Clear display: lệnh xoá màn hình. D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 0 0 0 0 0 0 1 01 4/ Display on/off and cursor: D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 0 0 0 1 D U B 08 TO 0F D = 1: bật LCD D = 0: tắt LCD. U = 1: con trỏ màn hình được gạch chân. U = 0: Con trỏ màn hình không được gạch chân. B = 1: con trỏ nhấp nháy. B = 0: con trỏ không nhấp nháy. 6/ Function set: D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 0 1 8/4 2/1 10/7 X X 20 TO 3F 8/4 = 1: LCD dùng 8 bít D0- D7 để trao đổi thông tin. 8/4 = 0: LCD dùng 4 bít D0- D4 để trao đổi thông tin. 2/1 = 1: LCD hiển thị trên cả 2 dòng. 2/1 = 0: LCD chỉ hiển thị trên 1 dòng. 10/7 = 1: mỗi kí tự sẽ được hiển thị cỡ 5*10. 10/7 = 0: mỗi kí tự sẽ được hiển thị cỡ 5*7. Thông thường chúng em thiết lập chế độ hiển thị ban đầu cho LCD bằng lệnh: Display on/off and Cursor : 00001111 ($0F). Function Set : 00111000 ($38). 2. Hiển thị kí tự trên LCD: LCD có bộ nhớ ROM mã hoá các kí tự mà nó có thể hiển thị. Tổng số có 192 kí tự. Khi cần chọn những kí tự này thì chỉ cần đặt mã nhị phân của nó ở đầu vào, có tới 96 mã kí tự ASCII, 64 mã kí tự tiếng Nhật, 32 kí tự đặc biệt khác. 3. Hiển thị tại một vị trí bất kì trên LCD. Sử dụng lệnh số 8: 8/ Set display Address: Hiển thị kí tự tại 1 vị trí bất kì trên LCD. D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 1 A A A A A A 80 TO FF Khi LCD bắt đầu được hoạt động, sau khi được thiết lập kiểu hiển thị, ta thấy trên LCD có một con trỏ ở đầu dòng đầu tiên (đây gọi là địa chỉ $00). Mỗi khi 1 biểu tượng, kí tự được hiển thị, con trỏ đó lại dịch sang phải 1 vị trí (tức là sang địa chỉ tiếp theo $01, $02,…). Sự tự động tăng địa chỉ của con trỏ như vậy đã tạo sự thuận tiện trong hiển thị 1 chuỗi kí tự trên LCD vì ta không cần phải định địa chỉ hiển thị cho từng kí tự. Nhưng nếu không muốn hiển thị chuỗi kí tự ở vị trí đầu của dòng đầu tiên nữa, mà muốn hiển thị tại 1 vị trí bất kì, thì lúc này ta phải cho LCD biết địa chỉ hiển thị thông qua lệnh : Set display Address. Địa chỉ đặt con trỏ có thể có thể nhận giá trị trong khoảng $00-$7F tức là 128 địa chỉ. Nhưng trên thực tế chỉ có 80 địa chỉ được xác định (do kích thước của LCD), 40 địa chỉ cho dòng trên và 40 địa chỉ cho dòng dưới. Chỉ có LCD loại 40x 2 hàng mới dùng hết 80 địa chỉ đó, còn loại LCD nhỏ hơn (như của chúng ta đang xét) cũng không dùng hết 80 địa chỉ đó. Vì Set display Address là lệnh nên LCD phải làm việc ở chế độ lệnh từ vi điều khiển gửi vào LCD. 4. Hiển thị chữ chạy bằng LCD: Sử dụng lệnh số 5: 5/ Display/ cursor Shif D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 0 0 1 D/C R/L X X 10 TO 1F -D/C = 1: LCD dịch chuyển màn hình. -D/C = 0: LCD dịch chuyển con trỏ. -R/L = 1: LCD dịch chuyển sang phải. -R/L = 0: LCD dịch chuyển sang trái. Tuỳ thuộc vào kích thước của LCD mà số lượng kí tự hiển thị trên LCD bị hạn chế .Nhưng hầu hết các LCD đều có chức năng dịch chuyển khối kí tự được hiển thị sang trái hoặc sang phải. Điều ày giúp ích rất nhiều nếu nội dung cần hiển thị lớn hơn cửa sổ LCD, và cũng làm cho hiển thị của LCD trở nên sinh động hơn. Muốn vậy , ta dùng lệnh Cursor/Display Shirt. Tuy nhiên trên LCD ta chỉ quan sát được 16 kí tự ở dòng trên , từ A-P .Những kí tự còn lại và con trỏ đều bị khuất về bên phải nên ta không quan sát được. 5./ Con trỏ cơ sở Sử dụng lệnh số 1 và số 2. 1./Clear display, lệnh xoá màn hình. D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 0 0 0 0 0 0 1 01 2./ Display and Cursor Home D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 0 0 0 0 0 1 X 02 or 03 Cursor Home: đưa con trỏ trở về vị trí đầu tiên ($00) , vừa kéo địa chỉ o của khối địa chỉ của LCD về vị trí góc trái của dòng đầu tiên. X : 0 hoặc 1 tuỳ ý. 6./ Chế độ nhận dữ liệu Sử dụng các lệnh số 3 3./ Character Entry mode D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 0 0 0 0 0 1/D S 04 or 07 -S =1 : con trỏ tự động dịch chuyển về vị trí sau khi hiển thị. -S =0 :con trỏ sẽ không dich chuyển -1/D =1 : địa chỉ con trỏ tự động tăng lên 1 tức là con trỏ dịch sang phải -1/D =0 :con trỏ dịch sang trái. Khi 1 kí tự được nhập vào , sau khi LCD hiển thị ký tự đó thì con trỏ tự động tăng địa chỉ của nó lên . Tuy nhiên không phải nhất thiết lúc nào cũng phải hiển thị theo cách đó , tức là sau khi hiển thị cỏntỏ có thể tự động giảm địa chỉ. 7./ Hiển thị ký tự tuỳ ý trên LCD theo định nghĩa người dùng Sử dụng lệnh số 7 7./ Set CGRAM : Khối động chức năng hiển thị các kí tự, hình dạng theo định nghĩa riêng của người sử dụng. D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 0 A A A A A A 40 to 7F 8./ Chu trình thời gian trên LCD Cần để ý tới thời gian LCD thực hiện 1 lệnh để tạo những khoảng thời gian trễ thích hợp trong khi lập trình Assembly. Khoảng thời gian trễ có tác dụng đợi để LCD thực hiện xong lệnh trước rồi mới thực hiện lệnh tiếp theo. Sau khi cấp nguồn cho LCD phải đợi cho tới khi LCD khởi động xong hoàn toàn , ta chèn vào đó 1 thời gian trễ. 9./ Đọc thông tin về LCD Phần này sẽ ứng dụng lệnh -Lệnh: Cờ bận của LCD sẽ được đọc trên đường D7. Nếu D7 =1 tức là LCD đang thực hiện lệnh và nó chưa sẵn sàng để nhận thông tin từ VI điều khiển (Nếu D7=0 tức là LCD đã sẵn sàng chờ thông tin) . 6 bít A là mã hoá vị trí của con trỏ trên màn hình, được đọc ra ở chân D0 – D6. - Các thông tin trạng thái báo về VI điều khiển để VĐK đợi LCD hết bận mới gửi lệnh tiếp theo. - Chú ý rằng LCD phải để ở chế độ đọc thông tin ra : RS =1 , R/W=1 10./LCD trao đổi với bên ngoài bằng 4 bít. Sử dụng lệnh số 6: 6./ Function Set D0 D1 D2 D3 D4 D5 D6 D7 HEX 0 0 1 8/4 2/1 10/7 X X 20 to 3F 8/4 =1 : LCD dùng 8 bít D0 – D7 để trao đổi thông tin. 8/4=0 : LCD dùng 4 bít D0 – D7 để trao đổi thông tin. 2/1 = 1 : LCD hiển thị trên cả 2 dòng 2/1 =0 : LCD chỉ hiển thị trên 1 dòng 10/7 =1 : Mỗi kí tự được hiển thị cỡ 5*10 10/7 =0 : Mỗi kí tự được hiển thị cỡ 5*7 Trong thực tế thường gặp LCD được điều khiển bằng loại Chip 4 bít ra. Trong khi LCD có 8 đường vào ra dữ liệu . Vì thế ta phải xem xét khả năng làm việc với LCD mà chỉ dùng 4 đường dữ liệu (để tương thích với loại Vi Điều khiển 4 bít) 4 bít được gọi là nửa byte. Ở chế độ 4 bít , dùng 4 bít nào để trao đổi thông tin ? Trả lời : Dùng 4 bít cao D4 – D7 để trao đổi thông tin. 4 bít thấp còn lại D0 – D3 phải tuân thủ cách xử lý sau: 4 bít không sử dụng này phải thả tự do hoặc nối với 1 cực thông qua điện trở 4k7- 47k. Tuyết đối không được nối 4 chân không sử dụng này trực tiếp với đất vì sẽ làm cho LCD hiểu nhầm là dùng 8 bít để trao đổi dữ liệu (4 bít D0 – D7 là 0000). Để LCD làm việc ở chế độ giao tiếp 4 bit thì việc đầu tiên là phải thiết lập ( ra lệnh cho LCD ) chọn chế độ làm việc 4 bít (dùng lệnh Function Set ). Nhưng có vấn đề nảy sinh là lệnh đó cũng chỉ được dưa vào LCD bằng 4 bít D4 – D7 mà thôi, còn 4 bít thấp thì không thể thay đổi giá trị tuỳ ý được. Nhưng thật may mắn là trong lệnh Function Set bít ra lệnh cho LCD làm việc ở chế độ 4 bít là bít 4, vì vậy chỉ cần gửi tới LCD mã lệnh 00100000 là đã thiết lập được chế độ trao đổi thông tin 4 bít. Sau khi thiết lập chế độ trao đổi thông tin 4 bít, kể từ lúc này mọi lệnh và dữ liệu được gửi tới LCD đều phải chia ra làm 2 phần: 4 bít cao gửi trước, sau đó mới gửi 4 bít phần thấp. Mỗi lần gửi thông tin tới LCD đều phải cấp cho chân E 1 xung dương. Như vậy vì số lần gửi ở chế độ 4 bít gấp 2 lần gửi ở chế độ 8 bít, nên số xung dương cần cấp cho chân E cũng gấp đôi. PhÇn 3 Ng¾t vµ lËp tr×nh c¸c ng¾t 1.1 C¸c ng¾t cña 8051. 1.1.1 C¸c ng¾t ng­îc víi th¨m dß. Mét bé vi ®iÒu khiÓn cã thÓ phôc vô mét vµi thiÕt bÞ, cã hai c¸ch ®Ó thùc hiÖn ®iÒu nµy ®ã lµ sö dông c¸c ng¾t vµ th¨m dß (polling). Trong ph­¬ng ph¸p sö dông c¸c ng¾t th× mçi khi cã mét thiÕt bÞ bÊt kú cÇn ®Õn dÞch vô cña nã th× nã bao cho bé vi ®iÒu khiÓn b»ng c¸ch göi mét tÝn hiÖu ng¾t. Khi nhËn ®­îc tÝn hiÖu ng¾t th× bé vi ®iÒu khiÓn ng¾t tÊt c¶ nh÷ng g× nã ®ang thùc hiÖn ®Ó chuyÓn sang phôc vô thiÕt bÞ. Ch­¬ng tr×nh ®i cïng víi ng¾t ®­îc gäi lµ tr×nh dÞch vô ng¾t ISR (Interrupt Service Routine) hay cßn gäi lµ tr×nh qu¶n lý ng¾t (Interrupt handler). Cßn trong ph­¬ng ph¸p th¨m dß th× bé vi ®iÒu khiÓn hiÓn thÞ liªn tôc t×nh tr¹ng cña mét thiÕt bÞ ®· cho vµ ®iÒu kiÖn tho¶ m·n th× nã phôc vô thiÕt bÞ. Sau ®ã nã chuyÓn sang hiÓn thÞ t×nh tr¹ng cña thiÕt bÞ kÕ tiÕp cho ®Õn khi tÊt c¶ ®Òu ®­îc phôc vô. MÆc dï ph­¬ng ph¸p th¨m dß cã thÓ hiÓn thÞ t×nh tr¹ng cña mét vµi thiÕt bÞ vµ phôc vô mçi thiÕt bÞ khi c¸c ®iÒu kiÖn nhÊt ®Þnh ®­îc tho¶ m·n nh­ng nã kh«ng tËn dông hÕt céng dông cña bé vi ®iÒu khiÓn. §iÓm m¹nh cña ph­¬ng ph¸p ng¾t lµ bé vi ®iÒu khiÓn cã thÓ phôc vô ®­îc rÊt nhiÒu thiÕt bÞ (tÊt nhiªn lµ kh«ng t¹i cïng mét thêi ®iÓm). Mçi thiÕt bÞ cã thÓ nhËn ®­îc sù chó ý cña bé vi ®iÒu khiÓn dùa trªn møc ­u tiªn ®­îc g¸n cho nã. §èi víi ph­¬ng ph¸p th¨m dß th× kh«ng thÓ g¸n møc ­u tiªn cho c¸c thiÕt bÞ v× nã kiÓm tra tÊt c¶ mäi thiÕt bÞ theo kiÓu h¬i vßng. Quan träng h¬n lµ trong ph­¬ng ph¸p ng¾t th× bé vi ®iÒu khiÓn còng cßn cã thÓ che hoÆc lµm l¬ mét yªu cÇu dÞch vô cña thiÕt bÞ. §iÒu nµy l¹i mét lÇn n÷a kh«ng thÓ thùc hiÖn ®­îc trong ph­¬ng ph¸p th¨m dß. Lý do quan träng nhÊt lµ ph­¬ng ph¸p ng¾t ®­îc ­u chuéng nhÊt lµ v× ph­¬ng ph¸p th¨m dß lµm l·ng phÝ thêi gian cña bé vi ®iÒu khiÓn b»ng c¸ch hái dß tõng thiÕt bÞ kÓ c¶ khi chóng kh«ng cÇn ®Õn dÞch vô. Nh»m ®Ó tr¸nh ….. th× ng­êi ta sö dông ph­¬ng ph¸p ng¾t. 1.1.2 Tr×nh phôc vô ng¾t. §èi víi mçi ng¾t th× ph¶i cã mét tr×nh phôc vô ng¾t ISR hay tr×nh qu¶n lý ng¾t. khi mét ng¾t ®­îc gäi th× bé vi ®iÒu khiÓn phôc vô ng¾t. Khi mét ng¾t ®­îc gäi th× bé vi ®iÒu khiÓn ch¹y tr×nh phôc vô ng¾t. §èi víi mçi ng¾t th× cã mét vÞ trÝ cè ®Þnh trong bé nhí ®Ó gi÷ ®Þa chØ ISR cña nã. Nhãm c¸c vÞ trÝ nhí ®­îc dµnh riªng ®Ó göi c¸c ®Þa chØ cña c¸c ISR ®­îc gäi lµ b¶ng vÐc t¬ ng¾t . 1.1.3 C¸c b­íc khi thùc hiÖn mét ng¾t. Khi kÝch ho¹t mét ng¾t bé vi ®iÒu khiÓn ®i qua c¸c b­íc sau: Nã kÕt thóc lÖnh ®ang thùc hiÖn vµ l­u ®Þa chØ cña lÖnh kÕ tiÕp (PC) vµo ng¨n xÕp. Nã còng l­u t×nh tr¹ng hiÖn t¹i cña tÊt c¶ c¸c ng¾t vµo bªn trong (nghÜa lµ kh«ng l­u vµo ng¨n xÕp). Nã nh¶y ®Õn mét vÞ trÝ cè ®Þnh trong bé nhí ®­îc gäi lµ b¶ng vÐc t¬ ng¾t níi l­u gi÷ ®Þa chØ cña mét tr×nh phôc vô ng¾t. Bé vi ®iÒu khiÓn nhËn ®Þa chØ ISR tõ b¶ng vÐc t¬ ng¾t vµ nh¶y tíi ®ã. Nã b¾t ®Çu thùc hiÖn tr×nh phôc vô ng¾t cho ®Õn lÖnh cuèi cïng cña ISR lµ RETI (trë vÒ tõ ng¾t). Khi thùc hiÖn lÖnh RETI bé vi ®iÒu khiÓn quay trë vÒ n¬i nã ®· bÞ ng¾t. Tr­íc hÕt nã nhËn ®Þa chØ cña bé ®Õm ch­¬ng tr×nh PC tõ ng¨n xÕp b»ng c¸ch kÐo hai byte trªn ®Ønh cña ng¨n xÕp vµo PC. Sau ®ã b¾t ®Çu thùc hiÖn c¸c lÖnh tõ ®Þa chØ ®ã. 1.1.4 S¸u ng¾t trong 8051. Thùc tÕ chØ cã 5 ng¾t dµnh cho ng­êi dïng trong 8051 nh­ng nhiÒu nhµ s¶n xuÊt ®­a ra c¸c b¶ng d÷ liÖu nãi r»ng cã s¸u ng¾t v× hä tÝnh c¶ lÖnh t¸i thiÕt lËp l¹i RESET. S¸u ng¾t cña 8051 ®­îc ph©n bè nh­ sau: RESET: Khi ch©n RESET ®­îc kÝch ho¹t tõ 8051 nh¶y vÒ ®Þa chØ 0000. §©y lµ ®Þa chØ bËt l¹i nguån ®­îc bµn ë ch­¬ng 4. Gåm hai ng¾t dµnh cho c¸c bé ®Þnh thêi: 1 cho Timer0 vµ 1 cho Timer1. §Þa chØ cña c¸c ng¾t nµy lµ 000B4 vµ 001B4 trong b¶ng vÐc t¬ ng¾t dµnh cho Timer0 vµ Timer1 t­¬ng øng. Hai ng¾t dµnh cho c¸c ng¾t phÇn cøng bªn ngoµi ch©n 12 (P3.2) vµ 13 (P3.3) cña cæng P3 lµ c¸c ng¾t phÇn cøng bªn ngoµi INT0 vµ INT1 t­¬ng øng. C¸c ng¾t ngoµi còng cßn ®­îc coi nh­ EX1 vµ EX2 vÞ trÝ nhí trong b¶ng vÐc t¬ ng¾t cña c¸c ng¾t ngoµi nµy lµ 0003H vµ 0013H g¸n cho INT0 vµ INT1 t­¬ng øng. TruyÒn th«ng nèi tiÕp cã mét ng¾t thuéc vÒ c¶ thu vµ ph¸t. §Þa chØ cña ng¾t nµy trong b¶ng vÐc t¬ ng¾t lµ 0023H. Chó ý r»ng trong b¶ng 11.1 cã mét sè giíi h¹n c¸c byte dµnh riªng cho mçi ng¾t. VÝ dô, ®èi víi ng¾t INT0 ng¾t phÇn cøng bªn ngoµi 0 th× cã tæng céng lµ 8 byte tõ ®Þa chØ 0003H ®Õn 000AH dµnh cho nã. T­¬ng tù nh­ vËy, 8 byte tõ ®Þa chØ 000BH ®Õn 0012H lµ dµnh cho ng¾t bé ®Þnh thêi 0 lµ TI0. NÕu tr×nh phôc vô ng¾t ®èi mÆt víi mét ng¾t ®· cho mµ ng¾n ®ñ ®Æt võa kh«ng gian nhí ®­îc. NÕu kh«ng võa th× mét lÖnh LJMP ®­îc ®Æt vµo trong b¶ng vÐc t¬ ng¾t ®Ó chØ ®Õn ®Þa chØ cña ISR, ë tr­êng hîp nµy th× c¸c byte cßn l¹i ®­îc cÊp cho ng¾t nµy kh«ng dïng ®Õn. D­íi ®©y lµ c¸c vÝ dô vÒ lËp tr×nh ng¾t minh ho¹ cho c¸c ®iÒu tr×nh bµy trªn ®©y. Tõ b¶ng 9 cïng ®Ó ý thÊy mét thùc tÕ r»ng chÝ cã 3 byte cña kh«ng gian bé nhí ROM ®­îc g¸n cho ch©n RESET. §ã lµ nh÷ng vÞ trÝ ®Þa chØ 0, 1 vµ 2 cña ROM. VÞ trÝ ®Þa chØ 3 thuéc vÒ ng¾t phÇn cøng bªn ngoµi 0 víi lý do nµy trong ch­¬ng tr×nh chóng ta phaØ ®Æt lÖnh LJMP nh­ lµ lÖnh ®Çu tiªn vµ h­íng bé xö lý lÖnh khái b¶ng vÐc t¬ ng¾t . B¶ng vÐc t¬ ng¾t cña 8051. Ng¾t §Þa chØ ROM Ch©n BËt l¹i nguån (RESET) 0000 9 Ng¾t phÇn cøng ngoµi (INT0) 0003 12 (P3.2) Ng¾t bé Timer0 (TF0) 000B Ng¾t phÇn cøng ngoµi 1 (INT1) 0013 13 (P3.3) Ng¾t bé Timer1 (TF1) 001B Ng¾t COM nèi tiÕp (RI vµ TI) 0023 1.1.5 Cho phÐp vµ cÊm ng¾t. Khi bËt l¹i nguån th× tÊt c¶ mäi ng¾t ®Òu bÞ cÊm (bÞ che) cã nghÜa lµ kh«ng cã ng¾t nµo sÏ ®­îc bé vi ®iÒu khiÓn ®¸p øng nÕu chóng ®­îc kÝch ho¹t. C¸c ng¾t ph¶i ®­îc kÝch ho¹t b»ng phÇn mÒm ®Ó bé vi ®iÒu khiÓn ®¸p øng chóng. Cã mét thanh ghi ®­îc gäi lµ cho phÐp ng¾t IE (Interrupt Enable) chÞu tr¸ch nhiÖm vÒ viÖc cho phÐp (kh«ng che) vµ cÊm (che) c¸c ng¾t. H×nh 11.2 tr×nh bµy thanh ghi IE, l­u ý r»ng IE lµ thanh ghi cã thÓ ®¸nh ®Þa chØ theo bÝt. Tõ h×nh 11.2 ta thÊy r»ng D7 cña thanh ghi IE ®­îc gäi lµ bÝt cho phÐp tÊt c¶ c¸c ng¾t EA (Euable All). BÝt nµy ph¶i ®­îc thiÕt lËp lªn 1 ®Ó phÇn cßn l¹i cña thanh ghi ho¹t ®éng ®­îc. BÝt D6 ch­a ®­îc sö dông. BÝt D54 ®­îc dµnh cho 8051, cßn bÝt D4 dïng cho ng¾t nèi tiÕp v.v… 1.1.6 C¸c b­íc khi cho phÐp ng¾t. §Ó cho phÐp mét ng¾t ta ph¶i thùc hiÖn c¸c b­íc sau: BÝt D7 cña thanh ghi IE lµ EA ph¶i ®­îc bËt lªn cao ®Ó cho phÐp c¸c bÝt cßn l¹i cña thanh ghi nhËn ®­îc hiÖu øng. NÕu EA = 1 th× tÊt c¶ mäi ng¾t ®Òu ®­îc phÐp vµ sÏ ®­îc ®¸p øng nÕu c¸c bÝt t­¬ng øng cña chóng trong IE cã møc cao. NÕu EA = 0 th× kh«ng cã ng¾t nµo sÏ ®­îc ®¸p øng cho dï bÝt t­¬ng øng cña nã trong IE cã gi¸ trÞ cao. Thanh ghi cho phÐp ng¾t IE. EA -- ET2 ES ET1 EX1 ET0 EX0 D0 D7 EA IE.7 NÕu EA = 0 th× mäi ng¾t bÞ cÊm NÕu EA = 1 th× mçi nguån ng¾t ®­îc cho phÐp hoÆc bÞ cÊm b»ng c¸c bËt hoÆc xo¸ bÝt cho phÐp cña nã. - - IE.6 Dù phßng cho t­¬ng lai ET2 IE.5 Cho phÐp hoÆc cÊm ng¾t trµn hoÆc thu cña Timer2 (8051) ES IE.4 Cho phÐp hoÆc cÊm ng¾t cæng nèi tiÕp ET1 IE.3 Cho phÐp hoÆc cÊm ng¾t trµn cña Timer1 EX1 IE.2 Cho phÐp hoÆc cÊm ng¾t ngoµi 1 ET0 IE.1 Cho phÐp hoÆc cÊm ng¾t trµn cña Timer0 EX0 IE.0 Cho phÐp hoÆc cÊm ng¾t ngoµi 0 * Ng­êi dïng kh«ng ph¶i ghi 1 vµo bÝt dù phßng nµy. BÝt nµy cã thÓ dïng cho c¸c bé vi ®iÒu khiÓn nhanh víi ®Æc tÝnh míi 1.3 LËp tr×nh c¸c ng¾t phÇn cøng bªn ngoµi. Bé vi ®iÒu khiÓn 8051 cã hai ng¾t phÇn cøng bªn ngoµi lµ ch©n 12 (P3.2) vµ ch©n 13 (P3.3) dïng cho ng¾t INT0 vµ INT1. Khi kÝch ho¹t nh÷ng ch©n nµy th× 8051 bÞ ng¾t t¹i bÊt kú c«ng viÖc nµo mµ nã ®ang thùc hiÖn vµ nã nh¶y ®Õn b¶ng vÐc t¬ ng¾t ®Ó thùc hiÖn tr×nh phôc vô ng¾t. IE0 (TCON.1) INTO (Pin 3.2) Level - tringgered Edge - triggered 0003 ITO 0 1 IE0 (TCON.3) INTO (Pin 3.3) Level - tringgered Edge - triggered 0013 IT1 0 1 1.3.1 C¸c ng¾t ngoµi INT0 vµ INT1. ChØ cã hai ng¾t phÇn cøng ngoµi trong 8051 lµ INT0 vµ INT1. Chóng ®­îc bè trÝ trªn ch©n P3.2 vµ P3.3 vµ ®Þa chØ cña chóng trong b¶ng vÐc t¬ ng¾t lµ 0003H vµ 0013H. Nh­ ®· nãi ë môc 11.1 th× chóng ®­îc ghÐp vµ bÞ cÊm b»ng viÖc sö dông thanh ghi IE. VËy chóng ®­îc kÝch ho¹t nh­ thÕ nµo? Cã hai møc kÝch ho¹t cho c¸c ng¾t phÇn cøng ngoµi: Ng¾t theo møc vµ ng¾t theo s­ên. D­íi ®©y lµ m« t¶ ho¹t ®éng cña mçi lo¹i. 1.3.2 Ng¾t theo møc. ë chÕ ®é ng¾t theo møc th× c¸c ch©n INT0 vµ INT1 b×nh th­êng ë møc cao (gièng nh­ tÊt c¶ c¸c ch©n cña cæng I/O) vµ nÕu mét tÝn hiÖu ë møc thÊp ®­îc cÊp tíi chóng th× nã ghi nh·n ng¾t. Sau ®ã bé vi ®iÒu khiÓn dõng tÊt c¶ mäi c«ng viÖc nã ®ang thùc hiÖn vµ nh¶y ®Õn b¶ng vÐc t¬ ng¾t ®Ó phôc vô ng¾t. §iÒu nµy ®­îc gäi lµ ng¾t ®­îc kÝch ho¹t theo møc hay ng¾t theo møc vµ lµ chÕ ®é ng¾t mÆc ®Þnh khi cÊp nguån l¹i cho 8051. TÝn hiÖu møc thÊp t¹i ch©n INT ph¶i ®­îc l©ý ®i tr­íc khi thùc hiÖn lÖnh cuèi cïng cña tr×nh phôc vô ng¾t RETI, nÕu kh«ng mét ng¾t kh¸c sÏ l¹i ®­îc t¹o ra. Hay nãi c¸ch kh¸c, nÕu tÝn hiÖu ng¾t møc thÊp kh«ng ®­îc lÊy ®i khi ISR kÕt thóc th× nã kh«ng thÓ hiÖn nh­ mét ng¾t kh¸c vµ 8051 nh¶y ®Õn b¶ng vÐc t¬ ng¾t ®Ó thùc hiÖn ISR. 1.3.3 TrÝch mÉu ng¾t theo møc. C¸c ch©n P3.2 vµ P3.3 b×nh th­êng ®­îc dïng cho vµo - ra nÕu c¸c bÝt INT0 vµ INT1 trong thanh ghi IE kh«ng ®­îc kÝch ho¹t. Sau khi c¸c ng¾t phÇn cøng trong thanh ghi IE ®­îc kÝch ho¹t th× bé vi ®iÒu khiÓn duy tr× trÝch mÉu trªn ch©n INTn ®èi víi tÝn hiÖu møc thÊp mét lÇn trong mét chu tr×nh m¸y. Theo b¶ng d÷ liÖu cña nhµ s¶n xuÊt cña bé vi ®iÒu khiÓn th× “ch©n ng¾t ph¶i ®­îc gi÷ ë møc thÊp cho ®Õn khi b¾t ®Çu thùc hiÖn tr×nh phôc vô ng¾t ISR. NÕu ch©n INTn ®­îc ®­a trë l¹i møc cao tr­íc khi b¾t ®Çu thùc hiÖn ISR th× sÏ ch¼ng cã ng¾t nµo x¶y ra”. Tuy nhiªn trong qu¸ tr×nh kÝch ho¹t ng¾t theo møc thÊp nªn nã l¹i ph¶i ®­a lªn møc cao tr­íc khi thùc hiÖn lÖnh RET1 vµ l¹i theo b¶ng d÷ liÖu cña nhµ s¶n xuÊt th× “nÕu ch©n INTn vÉn ë møc thÊp sau lÖnh RETI cña tr×nh phôc vô ng¾t th× mét ng¾t kh¸c l¹i sÏ ®­îc kÝch ho¹t sau khi lÖnh RET1 ®­îc thùc hiÖn”. Do vËy, ®Ó b¶o ®¶m viÖc kÝch ho¹t ng¾t phÇn cøng t¹i c¸c ch©n INTn ph¶i kh¼ng ®Þnh r»ng thêi gian tån t¹i tÝn hiÖu møc thÊp lµ kho¶ng 4 chu tr×nh m¸y vµ kh«ng ®­îc h¬n. §iÒu nµy lµ do mét thùc tÕ lµ ng¾t theo møc kh«ng ®­îc chèt. Do vËy ch©n ng¾t ph¶i ®­îc gi­a ë møc thÊp cho ®Õn khi b¾t ®Çu thùc hiÖn ISR. 1 chu tr×nh m¸y 1.085ms 4 chu tr×nh m¸y (4MC) 4 ´ 1.085ms ®Õn ch©n INT0 hoÆc INT1 Ghi chó: Khi bËt l¹i nguån (RESET) th× c¶ hai ch©n INT0 vµ INT1 ®Òu ë møc thÊp t¹o c¸c ng¾t ngoµi theo møc. Thêi gian tèi thiÓu cña ng¾t theo møc thÊp (XTAL = 11.0592MHz) 1.3.4 C¸c ng¾t theo s­ên. Nh­ ®· nãi ë tr­íc ®©y trong qu¸ tr×nh bËt l¹i nguån th× 8051 lµm c¸c ch©n INT0 vµ INT1 lµ c¸c ng¾t theo møc thÊp. §Ó biÕn c¸c ch©n nµy trë thµnh c¸c ng¾t theo s­ên th× chóng ta ph¶i viÕt ch­n¬g tr×nh cho c¸c bÝt cña thanh ghi TCON. Thanh thi TCON gi÷ c¸c bÝt cê IT0 vµ IT1 x¸c ®Þnh chÕ ®é ng¾t theo s­ên hay ng¾t theo møc cña c¸c ng¾t phÇn cøng IT0 vµ IT1 lµ c¸c bÝt D0 vµ D2 cña thanh ghi TCON t­¬ng øng. Chóng cã thÓ ®­îc biÓu diÔn nh­ TCON.0 vµ TCON.2 v× thanh ghi TCON cã thÓ ®¸nh ®Þa chØ theo bÝt. Khi bËt l¹i nguån th× TCON.0 (IT0) vµ TCON.2 (IT1) ®Òu ë møc thÊp (0) nghÜa lµ c¸c ng¾t phÇn cøng ngoµi cña c¸c ch©n INT0 vµ INT1 lµ ng¾t theo møc thÊp. B»ng viÖc chuyÓn c¸c bÝt TCON.0 vµ TCON.2 lªn cao qua c¸c lÖnh “SETB TCON.0” vµ “SETB TCON.2” th× c¸c ng¾t phÇn cøng ngoµi INT0 vµ INT1 trë thµnh c¸c ng¾t theo s­ên. VÝ dô, lÖnh “SETB TCON.2” lµm cho INT1 mµ ®­îc gäi lµ ng¾t theo s­ên trong ®ã khi mét tÝn hiÖu chuyÓn tõ cao xuèng thÊp ®­îc cÊp ®Õn ch©n P3.3 th× ë tr­êng hîp nµy bé vi ®iÒu khiÓn sÏ bÞ ng¾t vµ bÞ c­ìng bøc nh¶y ®Õn b¶ng vÐc t¬ ng¾t t¹i ®Þa chØ 0013H ®Ó thùc hiÖn tr×nh phôc vô ng¾t. Tuy nhiªn lµ víi gi¶i thiÕt r»ng bÝt ng¾t ®· ®­îc cho phÐp trong thanh ghi IE. TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 D0 D7 Thanh ghi TCON. BÝt TF1 hay TCON.7 lµ cê trµn cña bé Timer1. Nã ®­îc lËp bëi phÇn cøng khi bé ®Õm/ bé ®Þnh thêi 1 trµn, nã ®­îc xo¸ bëi phÇn cøng khi bé xö lý chØ ®Õn tr×nh phôc vô ng¾t. BÝt TR1 hay TCON.6 lµ bÝt ®iÒu khiÓn ho¹t ®éng cña Timer1. Nã ®­îc thiÕt lËp vµ xo¸ bëi phÇn mÒm ®Ó bËt/ t¾t Timer1. BÝt TF0 hay TCON.5 t­¬ng tù nh­ TF1 dµnh cho Timer0. BÝt TR0 hay TCON.4 t­¬ng tù nh­ TR1 dµnh cho Timer0. BÝt IE1 hay TCON.3 cê ng¾t ngoµi 1 theo s­ên. Nã ®­îc thiÕt lËp bëi CPU khi s­ên ng¾t ngoµi (chuyÓn tõ cao xuèng thÊp) ®­îc ph¸t hiÖn. Nã ®­îc xãa bëi CPU khi ng¾t ®­îc xö lý. L­u ý: Cê nµy kh«ng chèt nh÷ng ng¾t theo møc thÊp. BÝt IT1 hay TCON.2 lµ bÝt ®iÒu khiÓn kiÓu ng¾t. Nã ®­îc thiÕt lËp vµ xo¸ bëi phÇn mÒm ®Ó x¸c ®Þnh kiÓu ng¾t ngoµi theo s­ên xuèng hay møc thÊp. BÝt IE0 hay TCON.1 t­¬ng tù nh­ IE1 dµnh cho ng¾t ngoµi 0. BÝt IT0 hay TCON.0 t­¬ng tù nh­ bÝt IT1 dµnh cho ng¾t ngoµi 0. 1.3.5 Tr×nh mÉu ng¾t theo s­ên. Tr­íc khi kÕt thóc phÇn nµy ta cÇn tr¶ lêi c©u hái vËy th× ng¾t theo s­ên ®­îc trÝch mÉu th­êng xuyªn nh­ thÕ nµo? Trong c¸c ng¾t theo s­ên, nguån ngoµi ph¶i gi÷ ë møc cao tèi thiÓu lµ mét chu tr×nh m¸y n÷a ®ª ®¶m b¶o bé vi ®iÒu khiÓn nh×n thÊy ®­îc sù chuyÓn dÞch tõ cao xuèng thÊp cña s­ên xung. 1.085ms 1.085ms 1MC 1MC Thêi h¹n xung tèi thiÓu ®Ó ph¸t hiÖn ra c¸c ng¾t theo s­ên xung víi tÇn sè XTAL = 11.0592MHz S­ên xuèng cña xung ®­îc chèt bëi 8051 vµ ®­îc gi÷a bëi thanh ghi TCON. C¸c bÝt TCON.1 vµ TCON.3 gi÷ c¸c s­ên ®­îc chèt cña ch©n INT0 vµ INT1 t­¬ng øng. TCON.1 vµ TCON.3 còng cßn ®­îc gäi lµ c¸c bÝt IE0 vµ IE1 nh­ chØ ra trªn h×nh 11.6. Chóng ho¹t ®éng nh­ c¸c cê “ng¾t ®ang ®­îc phôc vô” (Interrupt-in-server). Khi mét cê “ng¾t ®ang ®­îc phôc vô” bËt lªn th× nã b¸o cho thÕ giíi thùc bªn ngoµi r»ng ng¾t hiÖn nay ®ang ®­îc xö lý vµ trªn ch©n INTn nµy sÏ kh«ng cã ng¾t nµo ®­îc ®¸p øng chõng nµo ng¾t nµy ch­a ®­îc phôc vô xong. §©y gièng nh­ tÝn hiÖu b¸o bËn ë m¸y ®iÖn tho¹i. CÇn ph¶i nhÊn m¹nh h¹t ®iÓm d­íi ®©y khi quan t©m ®Õn c¸c bÝt IT0 vµ IT1 cña thanh ghi TCON. Khi c¸c tr×nh phôc vô ng¾t ISR kÕt thóc (nghÜa lµ trong thanh ghi thùc hiÖn lÖnh RETI). C¸c bÝt nµy (TCON.1 vµ TCON.3) ®­îc xo¸ ®Ó b¸o r»ng ng¾t ®­îc hoµn tÊt vµ 8051 s½n sµng ®¸p øng ng¾t kh¸c trªn ch©n ®ã. §Ó ng¾t kh¸c ®­îc nhËn vµ th× tÝn hiÖu trªn ch©n ®ã ph¶i trë l¹i møc cao vµ sau ®ã nh¶y xuèng thÊp ®Ó ®­îc ph¸t hiÖn nh­ mét ng¾t theo s­ên. Trong thêi gian tr×nh phôc vô ng¾t ®ang ®­îc thùc hiÖn th× ch©n INTn bÞ lµm ng¬ kh«ng quan t©m ®Õn nã cã bao nhiªu lÇn chuyÓn dÞch tõ cao xuèng thÊp. Trong thùc tÕ nã lµ mét trong c¸c chøc n¨ng cña lÖnh RETI ®Ó xo¸ bÝt t­¬ng øng trong thanh ghi TCON (bÝt TCON.1 vµ TCON.3). Nã b¸o cho ta r»ng tr×nh phôc vô ng¾t x¾p kÕt thóc. V× lý do nµy mµ c¸c bÝt TCON.1 vµ TCON.3 ®­îc gäi lµ c¸c c¬ b¸o “ng¾t ®ang ®­îc phôc vô” cê nµy sÏ lªn cao khi mét s­ên xuèng ®­îc ph¸t hiÖn trªn ch©n INT vµ dõng ë møc cao trong toµn bé qu¸ tr×nh thùc hiÖn ISR. Nã chØ bÞ xo¸ bëi lÖnh RETI lµ lÖnh cuèi cïng cña ISR. Do vËy, sÏ kh«ng b¸o giê cÇn ®Õn c¸c lÖnh xo¸ bÝt nµy nh­ “CLR TCON.1” hay “CLR TCON.3” tr­íc lÖnh RETI trong tr×nh phôc vô ng¾t ®èi víi c¸c ng¾t cøng INT0 vµ INT1. §iÒu nµy kh«ng ®óng víi tr­êng hîp cña ng¾t nèi tiÕp. B¶ng 11.2: C¸c bÝt cê ng¾t. Ng¾t Cê BÝt cña thanh ghi SFR Ng¾t ngoµi 0 IE0 TCON.1 Ng¾t ngoµi 1 IE1 TCON.3 Ng¾t Timer0 TF0 TCON.5 Ng¾t Timer1 TF1 TCON.7 Ng¾t cæng nèi tiÕp T1 SCON.1 Ng¾t Timer2 TF2 T2CON.7 (TA89C52) Ng¾t Timer2 EXF2 T2CON.6 (TA89C52) 1.5 C¸c møc ­u tiªn ng¾t trong 8051. 1.5.1 C¸c møc ­u tiªn trong qu¸ tr×nh bËt l¹i nguån. Khi 8051 ®­îc cÊp nguån th× c¸c møc ­u tiªn ng¾t ®­îc g¸n theo b¶ng 11.3. Tõ b¶ng nµy ta thÊy vÝ dô nÕu c¸c ng¾t phÇn cøng ngoµi 0 vµ 1 ®­îc kÝch ho¹t cïng mét lóc th× ng¾t ngoµi 0 sÏ ®­îc ®¸p øng tr­íc. ChØ sau khi ng¾t INT0 ®· ®­îc phôc vô xong th× INT1 míi ®­îc phôc vô v× INT1 cã møc ­u tiªn thÊp h¬n. Trong thùc tÕ s¬ ®å møc ­u tiªn ng¾t trong b¶ng kh«ng cã ý nghÜa g× c¶ mµ mét quy tr×nh th¨m dß trong ®ã 8051 th¨m dß c¸c ng¾t theo tr×nh tù cho trong b¶ng 11.3 vµ ®¸p øng chóng mét c¸ch phï hîp. Møc ­u tiªn c¸c ng¾t trong khi cÊp l¹i nguån. Møc ­u tiªn cao xuèng thÊp Ng¾t ngoµi 0 INT0 Ng¾t bé ®Þnh thêi 0 TF0 Ng¾t ngoµi 1 INT1 Ng¾t bé ®Þnh thêi 1 TF1 Ng¾t truyÒn th«ng nèi tiÕp (RI + TI) -- -- PT2 PS PT1 PX1 PT0 PX0 D0 D7 H×nh 11.8: Thanh ghi møc ­u tiªn ng¾t IP, bÝt ­u tiªn = 1 lµ møc ­u tiªn cao, bÝt ­u tiªn = 0 lµ møc ­u tiªn thÊp. BÝt D7 vµ D6 hay IP.7 vµ IP.6 - ch­a dïng. BÝt D5 hay IP.5 lµ bÝt ­u tiªn ng¾t Timer2 (dïng cho 8052) BÝt D4 hay IP.4 lµ bÝt ­u tiªn ng¾t cæng nèi tiÕp BÝt D3 hay IP.3 lµ bÝt ­u tiªn ng¾t Timer1 BÝt D2 hay IP.2 lµ møc ­u tiªn ng¾t ngoµi 1 BÝt D1 hay IP.1 lµ møc ­u tiªn ng¾t Timer 0 BÝt D0 hay IP.0 lµ møc ­u tiªn ng¾t ngoµi 0 Ng­êi dïng kh«ng ®­îc viÕt phÇn mÒm ghi c¸c sè 1 vµo c¸c bÝt ch­a dïng v× chóng dµnh cho c¸c øng dông t­¬ng l¹i. QUY TRÌNH LÀM MẠCH. I. Phân nguồn cho LCD và IC 8051. Chọn nguồn phân cấp ổn định cho mạch là 5V. Nguồn được lấy từ nguồn điện nhà qua biến áp là 12V, nguồn 12V AC được chỉnh lưu trước khi đưa vào mạch ổn áp. Dòng cần cung cấp cho mạch khoảng 200mA. Ta cần chọn dạng mạch ổn áp cho mạch. Có nhiều loại ổn áp: - Ổn áp song song và nối tiếp tuyến tính. - Ổn áp song song và nối tiếp phi tuyến. Và có các IC ổn áp như các họ 78XX (ổn áp dương), 79XX (ổn áp âm),…Vì dòng tiêu thụ cho mạch nhỏ nên bỏ đến hiệu suất của mạch ổn áp, ta chọn IC 7805 cho mạch. 7805 là IC ổn áp dương. Đối với IC này người ta dùng tụ thoát 0,33.10-6 F. Khi không cần thiết cho ổn định, có thể dùng tụ 0,1.10-6 F ở ngõ ra để cải thiện đáp ứng quá độ của ổn áp.Các tụ này phải được đặt trên hay càng gần các IC ổn áp càng tốt. 78L03 dòng điện ra mặc định là 100mA. 7803 dòng điện ra mặc định là 1A. 78H05 dòng điện ra mặc định là 5A. II. Thiết kế mạch in bằng phần mềm Orcad với các thông số chính như sau: + Visible Grid: 100 mil (ứng với mỗi ô lưới là 2,5 mm bằng khoảng cách giữa 2 chân IC kề nhau). + Snap Grid: 50 mil (cho phép vẽ các điểm cách nhau 1.25 mm). + Bề rộng đường mạch in: Width 25 mil. + Kích thước các lỗ cắm chân linh kiện: X-size 100 mil và Y- size 60 mil đủ để đảm bảo phần đồng tại các lỗ cắm chân linh kiện đủ lớn nhưng không chạm vào nhau. Sau khi thiết kế xong sơ đồ chân linh kiện đến phần tự đi dây bằng tay dựa theo sơ đồ nguyên lý. CODE CHƯƠNG TRÌNH. I. Chú giải các chương trình con: 1. Chương trình con truyền dữ liệu lên LCD: Chương trình con này cho phép việc quyết định chấp nhận thông tin ở các chân còn lại. Như ta đã biết, công việc này được thực thi khi tín hiệu ở chân E chuyển từ mức 1à0. Chân P0.7 làm nhiệm vụ điều khiển chân E. Do vậy, chân P0.7 trước hết sẽ được set lên mức 1, sau đó sẽ chuyển xuống mức 0. Khi chương trình con này được gọi đến, chân Enable của LCD sẽ được thực thi. 2. Chương trình con chạy LCD: LCD có thể nhận dữ liệu hoặc nhận lệnh từ vi điều khiển. Chân RS được sử dụng được sử dụng để lựa chọn 1 trong 2 chế độ đó. Chương trình con này sẽ được sử dụng để quyết định việc nhận lệnh từ vi xử lý. Chân P0.5 làm nhiệm vụ điều khiển chân RS. Khi RS bằng 0, LCD nhận lệnh. Khi RS= 1, LCD nhận dữ liệu. Chương trình con này chỉ được gọi đến khi LCD được yêu cầu ở chế độ nhận lệnh. Ban đầu chân P0.7 được set xuống mức 0, tức là ở chế độ nhận lệnh. Sau khi được thi hành ở chân E, chân P0.7 được chuyển lên mức 1 (chế độ nhận dữ liệu). Nghĩa là, bình thường LCD luôn chờ sẵn ở chế độ nhận dữ liệu. Chỉ khi nào ta cần đưa lệnh vào LCD, chương trình con này mới được gọi đến. 3. Chương trình con LCD SETUP: Chương trình này được sử dụng để đưa ra những khởi tạo ban đầu cho LCD. Cổng P2 của LCD của vi xử lý được chọn để truyền dữ liệu. Để thực hiện các khả năng hiển thị, ta cần ra lệnh cho LCD thực hiện các thao tác, tức là phải sử dụng tập lệnh của LCD đã trình bày trong phần lý thuyết. Chương trình này thực hiện các công việc sau: + MOV P2, #3CH P2 = 0011100: Chỉnh chế độ 8 bit, hiển thị trên 2 dòng và độ phân giải của LCD là 5x10. Bít 1 ở vị trí D4 điều khiển chế độ 8 bit, bit 1 ở vị trí D3 điều khiển việc hiển thị trên cả 2 dòng, bít 1 ở vị trí D2 điều chỉnh độ phân giải của LCD ở chế độ 5x10. Do LCD loại 16x2 có 8 chân dữ liệu, đồng thời ta không cần quan tâm đến số lượng LCD được sử dụng cùng việc dành các chân của vi xử lý để điều khiển các công việc khác. Ta có thể lựa chọn ngay cổng P2 để điều khiển 8 bit truyền dữ liệu cho LCD, thay vì sử dụng chế độ 4 bit truyền dữ liệu, chế độ 8 bit dữ liệu giúp ta dễ dàng hơn trong việc lập trình điều khiển. + MOV P2,#0CH P2 = 00001100: Chỉnh bật màn hình LCD, tắt chế độ hiện và nhấp nháy con trỏ. Bít 1 ở vị trí D2 thực hiện bật màn hình LCD. Bít 0 ở vị trí D1 tắt chế độ gạch chân cho con trỏ. Bít 0 ở vị trí D0 làm nhiệm vụ tắt chế độ nhấp nháy của con trỏ. Ở đây vì mục đích là làm nhiệm vụ hiển thị và quảng cáo, không có sự giao tiếp 2 chiều vào ra, việc hiển thị con trỏ là không cần thiết, thậm chí là không phù hợp trong việc hiển thị nội dung quảng cáo. Do vậy trong chương trình, LCD luôn được đặt ở chế độ tăt sự hiển thị của con trỏ. Còn việc bật LCD luôn được thực hiện từ đầu để sẵn sàng cho việc hiển thị thông tin. + MOV P2,#06H P2 = 00000110: Con trỏ tự động tăng lên 1 địa chỉ sau khi hiển thị. Bít 1 ở vị trí D1 điều khiển địa chỉ con trỏ tự tăng lên 1 sau khi kí tự ở vị trí con trỏ trước đó được hiển thị. Bit 0 ở vị trí D0 tắt chế độ dịch vị trí con trỏ trên LCD. + MOV P2,#02H P2 = 00000010: Chỉnh chế độ xoá màn hình và đưa con trỏ về vị trí đầu tiên. Một số cách hiển thị sử dụng việc điều khiển địa chỉ của con trỏ hoặc vị trí tương đối của màn hình LCD làm cho việc hiển thị các kí tự khác có thể bị sai mục đích không như mong muốn do cách định địa chỉ bị sai hoặc bị hiểu nhầm. Lệnh này vừa có vai trò đưa con trỏ về vị trí đầu tiên, vừa có tác dụng kéo địa chỉ 0 của khối địa chỉ LCD về vị trí góc trái của dòng đầu tiên. 4. Đoạn chương trình tạo bộ nhớ đệm: BND EQU 070H ……………. BND EQU 07FH Màn hình LCD chỉ có thể hiển thị tối đa 16 kí tự. Do vậy, việc tạo ra bộ nhớ đệm 16 địa chỉ là rất phù hợp. Thông tin đưa vào để hiển thị trên LCD luôn luôn thay đổi, mỗi công việc được thực thi thì phải có sự hoạt động của chân Enable, làm cho việc hiển thị 1 kí tự sẽ tốn nhiều công sức nếu lựa chọn cách đưa trực tiếp thẳng vào LCD. Tuy cách này làm cho phần lập trình dài ra đôi chút nhưng lại điều chỉnh được từng vị trí một trên màn hình hiển thị. Do vậy có thể thay đổi nội dung hiển thị 1 cách dễ dàng và nhanh chóng. 5. Chương trình con WRITE BND. Chương trình này thực hiện nhiệm vụ ghi thông tin từ bộ nhớ đệm ra ngoài màn hình LCD. Thanh ghi R0 làm trung gian để lưu lại địa chỉ của bộ nhớ đệm. Do địa chỉ của bộ nhớ đệm là liên tiếp nhau nên ta sử dụng 1 vòng lặp, địa chỉ của R0 sẽ tăng lên 1 đơn vị. Khi nội dung của thông tin được đưa vào bộ nhớ đệm, R0 sẽ đóng vai trò như một con trỏ chạy đi qua tất cả các địa chỉ của bộ nhớ đệm. Khi con trỏ đến vị trí nào thì nội dung thông tin chứa trong địa chỉ ấy lập tức được hiển thị trên LCD tại vị trí con trỏ trên màn hình được định trước. 6. Chương trình con CLEAR BND. Trong quá trình thực hiện hiển thị trên LCD, mỗi lần hiển thị ta có thể thay đổi nội dung hiển thị thông qua bộ nhớ đệm. Do chỉ có một bộ nhớ đệm nên để có thể đưa nội dung khác vào, ta phải xoá những nội dung trước đó, sau đó mới đưa thông tin khác vào thực hiện việc hiển thị. Hoạt động của chương trình con này giống như của chương trình WRITE BND sử dụng vòng lặp và thanh ghi R0. Chỉ khác ở chỗ, khi R0 được đưa tới địa chỉ nào thì nội dung thông tin đưa vào bộ nhớ đệm sẽ là rỗng, như vậy nội dung của bộ nhớ đệm coi như được xoá hoàn toàn. 7. Chương trình con HIENTUNGTU. Thực hiện hiển thị thông tin trên LCD theo dạng hiện lên từng chữ một. Thuật toán của việc hiển thị là tác động lên từng địa chỉ của con trỏ hiển thị. Khi đó, vị trí của con trỏ sẽ không tự động dịch chuyển theo mặc định mà sẽ chịu sự điều khiển của chương trình. Thanh ghi R1 được sử dụng để thiết lập vị trí con trỏ. Khi nội dung của mỗi địa chỉ của bộ nhớ đệm được ghi lên màn hình, nó sẽ không ghi tiếp nội dung của địa chỉ nhớ tiếp theo, giữa chúng có một khoảng thời gian trễ làm cho người nhìn có cảm giác từng chữ hiện lên một. Khi đó R1 sẽ tăng lên 1 đơn vị, khi đó xác định vị trí tiếp theo của con trỏ sẽ được trỏ tới. Vòng lặp này sẽ được thực hiện cho đến khi hiển thị đủ nội dung của bộ nhớ thì kết thúc. 8.Chương trình con LAPCHUCHAY Đây là sự kết hợp của việc hiển thị thông tin tại vị trí cố định trên màn hình rồi cho màn hình dịch chuyển. Như vậy người xem có cảm giác như chữ đang dịch chuyển trên màn hình còn thực tế là chữ vẫn giữ nguyên vị trí, nhưng thực tế là chữ vẫn giữ nguyên vị trí chỉ có màn hình là thực hiện dịch chuyển. Do đó vị trí tương đối của chữ trên màn hình sẽ bị dịch chuyển. 9.Chương trình con LAPDICHTRAI Chương trình này chức năng giống chương trình trên, tuy nhiên chỉ thay đổi chiều chạy của màn hình, làm cho chữ hiển thị chạy theo chiều ngược lại. Do vậy, đối với chương trình con này việc dịch chuyển màn hình sẽ được thực hiện trước việc hiển thị chữ. Sau khi màn hình dịch chuyển sang phải, thông tin sẽ được đưa vào ở vị trí con trỏ đầu tiên của LCD, tiếp đó màn hình sẽ dịch theo hướng ngược lại so với hướng dịch chuyển ban đầu. 10.Chương trình con XOA MH Chương trình con này sẽ thực hiện xoá toàn bộ nội dung hiển thị trên màn hình. LM324 LM324 có tác dụng so sánh. ở đây trong mạch này là so sánh điện áp ra ở các thiết bị (ổn định áp ra ). LM324 được sử dụng trong mạch để khuyếch đại công suất hoạt động của các thiết bị đầu ra. Với sự tham gia của nó sẽ lám cho các thiết bị đầu ra hoạt động ở mức khá tốt nhằm thu được hiệu quả của việc mô phỏng. CODE PROGRAM ;P2.0-P2.7 noi voi D0-D7 ;P0.5=RS ;P0.6=R/W ;P0.7=E ORG 0H LJMP MAIN ORG 0003H LJMP ISR_T1 ORG 0013H LJMP ISR_T2 ORG 30H MAIN: MOV IE,#10000101B SETB P1.0 CLR P1.1 CLR P1.2 CLR P1.3 CLR P1.4 ACALL LCD_SETUP ACALL DELAY ACALL DELAY ACALL DELAY MOV A,#03CH ;2dong ky tu 5X10 ACALL LENH ACALL XOA_MH ACALL DISPLAY_VXL;dong 1 ghi btl, dong 2 ghi bt khong chay ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DISPLAY_THUCHIEN ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY MOV A,#03CH ;2dong ky tu 5X10 ACALL LENH ACALL XOA_MH ACALL HIENTUNGTU ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY MOV A,#03CH ;2dong ky tu 5X10 ACALL LENH ACALL XOA_MH ACALL DISPLAY_CHAO ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY MOV A,#034H ;1 dong ma tran 5x7 de chay khau hieu ACALL LENH ACALL XOA_MH MOV A,#80H ;va hien thi o dau dong ACALL LENH ACALL RUN_LOIMOI ACALL LAPCHUCHAY HERE: SJMP HERE ;==================================================== LCD_SETUP: MOV A,#0CH ;bat hien thi khong nhap nhay con tro ACALL LENH MOV A,#06H ;con tro tu dong tang len 1 sau khi hien thi ACALL LENH RET XOA_MH: MOV A,#01H ACALL LENH RET ;khoi tao bo nho dem cho LCD,LCD 16x2 chi hien thi duoc 16 ky tu BND0 EQU 070H BND1 EQU 071H BND2 EQU 072H BND3 EQU 073H BND4 EQU 074H BND5 EQU 075H BND6 EQU 076H BND7 EQU 077H BND8 EQU 078H BND9 EQU 079H BND10 EQU 07AH BND11 EQU 07BH BND12 EQU 07CH BND13 EQU 07DH BND14 EQU 07EH BND15 EQU 07FH ;===================================================== WRITE_BND: MOV R0,#070H ;nap con tro tai dia chi dau tien cua BND AGAIN: MOV A,@R0 ;copy noi dung trong dia chi do R0 chi ra vao P3 ACALL DL ;de hien nthi len LCD INC R0 ;tang con tro len 1 de chi vao dia chi tep theotrong BND CJNE R0,#080H,AGAIN;hien thi het 16 ki tu trong BND RET ;===================================================== CLEAR_BND: ;xoa BND de dung cho chu tiep theo MOV R0,#070H CLEAR: MOV @R0,#' ' ;xoa noi dung BND INC R0 CJNE R0,#080H,CLEAR;xoa cho den khi het BND RET ;==================================================== LENH: ACALL READY ;LCD da san sang chua? kiem tra co ban truoc khi gui lenh MOV P2,A CLR P0.5 ;RS=0 gui lenh CLR P0.6 ;R/W=0 ghi len lcd SETB P0.7 ;gui xung H_to_L den chan E cho phep LCD CLR P0.7 RET DL: ACALL READY ;LCD da san sang chua?kiem tra co ban truoc khi gui data MOV P2,A SETB P0.5 ;RS=1 gui du lieu CLR P0.6 ;R/W=0 ghi len lcd SETB P0.7 CLR P0.7 ;gui xung H_to_L den chan E RET ;===================================================== READY: SETB P2.7 ;P2.7 lam dau vao CLR P0.5 ;RS=0 truy cap thanh ghi lenh SETB P0.6 ;R/W=1 doc thanh ghi lenh ;doc thanh ghi lenh va kiem tra co ban BACK: CLR P0.7 SETB P0.7 JB P2.7,BACK ;doi den khi co ban =0 RET ;====================================================== DISPLAY_VXL: ACALL XOA_MH ACALL CLEAR_BND MOV BND0, #' ' MOV BND1, #'V' MOV BND2, #'I' MOV BND3, #' ' MOV BND4, #'X' MOV BND5, #'U' MOV BND6, #' ' MOV BND7, #'L' MOV BND8, #'Y' MOV BND9, #':' MOV BND10,#' ' MOV BND11,#'L' MOV BND12,#'A' MOV BND13,#'P' MOV BND14,#' ' MOV BND15,#' ' MOV A,#80H ;dich con tro toi vi tri 1 dong 1 ACALL LENH ACALL WRITE_BND ACALL CLEAR_BND ;--------------------------------------------------------------------------------- MOV BND0, #'T' MOV BND1, #'R' MOV BND2, #'I' MOV BND3, #'N' MOV BND4, #'H' MOV BND5, #' ' MOV BND6, #'&' MOV BND7, #' ' MOV BND8, #'U' MOV BND9, #'N' MOV BND10,#'D' MOV BND11,#' ' MOV BND12,#'D' MOV BND13,#'U' MOV BND14,#'N' MOV BND15,#'G' MOV A,#0C0H ;dich con tro toi vi tri 1 dong 2 ACALL LENH ACALL WRITE_BND RET ;--------------------------------------------------------------------------- DISPLAY_THUCHIEN: ACALL XOA_MH ACALL CLEAR_BND MOV BND0, #'T' MOV BND1, #'H' MOV BND2, #'U' MOV BND3, #'C' MOV BND4, #' ' MOV BND5, #'H' MOV BND6, #'I' MOV BND7, #'E' MOV BND8, #'N' MOV BND9, #':' MOV BND10,#' ' MOV BND11,#' ' MOV BND12,#' ' MOV BND13,#' ' MOV BND14,#' ' MOV BND15,#' ' MOV A,#80H ;dich con tro toi vi tri 1 dong 1 ACALL LENH ACALL WRITE_BND ACALL CLEAR_BND ;--------------------------------------------------------------------------------- MOV BND0, #'S' MOV BND1, #'V' MOV BND2, #' ' MOV BND3, #'D' MOV BND4, #'T' MOV BND5, #'4' MOV BND6, #' ' MOV BND7, #'-' MOV BND8, #' ' MOV BND9, #'K' MOV BND10,#'4' MOV BND11,#'8' MOV BND12,#' ' MOV BND13,#' ' MOV BND14,#' ' MOV BND15,#' ' MOV A,#0C0H ;dich con tro toi vi tri 1 dong 2 ACALL LENH ACALL WRITE_BND RET ;--------------------------------------------------------------------------- HIENTUNGTU: ACALL XOA_MH ACALL CLEAR_BND MOV BND0, #' ' MOV BND1, #' ' MOV BND2, #'M' MOV BND3, #'A' MOV BND4, #'Y' MOV BND5, #' ' MOV BND6, #'B' MOV BND7, #'A' MOV BND8, #'N' MOV BND9, #' ' MOV BND10,#'N' MOV BND11,#'U' MOV BND12,#'O' MOV BND13,#'C' MOV BND14,#' ' MOV BND15,#' ' MOV A,#82H ;dich con tro toi vi tri 1 dong 1 ACALL LENH MOV R0,#072H LAP_MAY: MOV A,@R0 ACALL DL INC R0 CJNE R0,#76H,LAP_MAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY LAP_BAN: MOV A,@R0 ACALL DL INC R0 CJNE R0,#7AH,LAP_BAN ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY LAP_NUOC: MOV A,@R0 ACALL DL INC R0 CJNE R0,#80H,LAP_NUOC ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL CLEAR_BND MOV BND0, #' ' MOV BND1, #' ' MOV BND2, #' ' MOV BND3, #'G' MOV BND4, #'I' MOV BND5, #'A' MOV BND6, #'I' MOV BND7, #' ' MOV BND8, #'K' MOV BND9, #'H' MOV BND10,#'A' MOV BND11,#'T' MOV BND12,#' ' MOV BND13,#' ' MOV BND14,#' ' MOV BND15,#' ' MOV A,#0C3H ;dich con tro toi vi tri 1 dong 1 ACALL LENH MOV R0,#073H LAP_GIAI: MOV A,@R0 ACALL DL INC R0 CJNE R0,#78H,LAP_GIAI ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY LAP_KHAT: MOV A,@R0 ACALL DL INC R0 CJNE R0,#7CH,LAP_KHAT ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL CLEAR_BND RET ;===================================================== DISPLAY_CHAO: ACALL XOA_MH ACALL CLEAR_BND MOV BND0, #'C' MOV BND1, #'H' MOV BND2, #'A' MOV BND3, #'O' MOV BND4, #' ' MOV BND5, #'M' MOV BND6, #'U' MOV BND7, #'N' MOV BND8, #'G' MOV BND9, #' ' MOV BND10,#'Q' MOV BND11,#'U' MOV BND12,#'Y' MOV BND13,#' ' MOV BND14,#' ' MOV BND15,#' ' MOV A,#80H ;dich con tro toi vi tri 1 dong 1 ACALL LENH ACALL WRITE_BND ACALL CLEAR_BND ;--------------------------------------------------------------------------------- MOV BND0, #'K' MOV BND1, #'H' MOV BND2, #'A' MOV BND3, #'C' MOV BND4, #'H' MOV BND5, #' ' MOV BND6, #'H' MOV BND7, #'A' MOV BND8, #'N' MOV BND9, #'G' MOV BND10,#' ' MOV BND11,#'(' MOV BND12,#'^' MOV BND13,#'_' MOV BND14,#'^' MOV BND15,#')' MOV A,#0C0H ;dich con tro toi vi tri 1 dong 2 ACALL LENH ACALL WRITE_BND RET ;======================================== RUN_LOIMOI: ACALL CLEAR_BND MOV BND0, #' ' MOV BND1, #' ' MOV BND2, #'H' MOV BND3, #'I' MOV BND4, #'E' MOV BND5, #'N' MOV BND6, #' ' MOV BND7, #'N' MOV BND8, #'A' MOV BND9, #'Y' MOV BND10,#' ' MOV BND11,#'M' MOV BND12,#'A' MOV BND13,#'Y' MOV BND14,#' ' MOV BND15,#'C' ACALL WRITE_BND ;===================================================== ACALL CLEAR_BND MOV BND0, #'O' MOV BND1, #' ' MOV BND2, #'P' MOV BND3, #'H' MOV BND4, #'U' MOV BND5, #'C' MOV BND6, #' ' MOV BND7, #'V' MOV BND8, #'U' MOV BND9, #' ' MOV BND10,#'1' MOV BND11,#' ' MOV BND12,#'N' MOV BND13,#'U' MOV BND14,#'O' MOV BND15,#'C' ACALL WRITE_BND ;===================================================== ACALL CLEAR_BND MOV BND0, #' ' MOV BND1, #'H' MOV BND2, #'O' MOV BND3, #'A' MOV BND4, #' ' MOV BND5, #'Q' MOV BND6, #'U' MOV BND7, #'A' MOV BND8, #' ' MOV BND9, #'2' MOV BND10,#' ' MOV BND11,#'T' MOV BND12,#'R' MOV BND13,#'A' MOV BND14,#' ' MOV BND15,#'S' ACALL WRITE_BND ;===================================================== ACALL CLEAR_BND MOV BND0, #'U' MOV BND1, #'A' MOV BND2, #' ' MOV BND3, #'X' MOV BND4, #'I' MOV BND5, #'N' MOV BND6, #' ' MOV BND7, #'M' MOV BND8, #'O' MOV BND9, #'I' MOV BND10,#' ' MOV BND11,#'Q' MOV BND12,#'U' MOV BND13,#'Y' MOV BND14,#' ' MOV BND15,#'K' ACALL WRITE_BND ;==================================================== ACALL CLEAR_BND MOV BND0, #'H' MOV BND1, #'A' MOV BND2, #'C' MOV BND3, #'H' MOV BND4, #' ' MOV BND5, #'T' MOV BND6, #'H' MOV BND7, #'U' MOV BND8, #'O' MOV BND9, #'N' MOV BND10,#'G' MOV BND11,#' ' MOV BND12,#'T' MOV BND13,#'H' MOV BND14,#'U' MOV BND15,#'C' ACALL WRITE_BND ;======================================= ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ;======================================= LAPCHUCHAY: MOV R1,#04H ;dem so lan dich phai cua man hinh 1 lan LAPDICHTRAI: MOV A,#1BH ;0001 thuc thi chu chay,10xx thiet lap man hinh chay ACALL LENH ;va chay sang Trai trong khi con tro dung yen ACALL DELAY ACALL DELAY ACALL DELAY DEC R1 CJNE R1,#0H,LAPDICHTRAI DEC R2 CJNE R2,#0H,LAPCHUCHAY RET ;================================================ RUN_CAMON1: ACALL CLEAR_BND MOV BND0, #' ' MOV BND1, #'Q' MOV BND2, #'U' MOV BND3, #'Y' MOV BND4, #' ' MOV BND5, #'K' MOV BND6, #'H' MOV BND7, #'A' MOV BND8, #'C' MOV BND9, #'H' MOV BND10,#' ' MOV BND11,#'D' MOV BND12,#'A' MOV BND13,#' ' MOV BND14,#'C' MOV BND15,#'H' ACALL WRITE_BND ;================================================= ACALL CLEAR_BND MOV BND0, #'O' MOV BND1, #'N' MOV BND2, #' ' MOV BND3, #'N' MOV BND4, #'U' MOV BND5, #'O' MOV BND6, #'C' MOV BND7, #' ' MOV BND8, #'H' MOV BND9, #'O' MOV BND10,#'A' MOV BND11,#' ' MOV BND12,#'Q' MOV BND13,#'U' MOV BND14,#'A' MOV BND15,#'.' ACALL WRITE_BND ;================================================= ACALL CLEAR_BND MOV BND0, #' ' MOV BND1, #'C' MOV BND2, #'H' MOV BND3, #'U' MOV BND4, #'C' MOV BND5, #' ' MOV BND6, #'Q' MOV BND7, #'U' MOV BND8, #'Y' MOV BND9, #' ' MOV BND10,#'K' MOV BND11,#'H' MOV BND12,#'A' MOV BND13,#'C' MOV BND14,#'H' MOV BND15,#' ' ACALL WRITE_BND ;================================================= ACALL CLEAR_BND MOV BND0, #'N' MOV BND1, #'G' MOV BND2, #'O' MOV BND3, #'N' MOV BND4, #' ' MOV BND5, #'M' MOV BND6, #'I' MOV BND7, #'E' MOV BND8, #'N' MOV BND9, #'G' MOV BND10,#'.' MOV BND11,#' ' MOV BND12,#'C' MOV BND13,#'A' MOV BND14,#'M' MOV BND15,#' ' ACALL WRITE_BND ;================================================= ACALL CLEAR_BND MOV BND0, #'O' MOV BND1, #'N' MOV BND2, #'.' MOV BND3, #' ' MOV BND4, #'H' MOV BND5, #'E' MOV BND6, #'N' MOV BND7, #' ' MOV BND8, #'G' MOV BND9, #'A' MOV BND10,#'P' MOV BND11,#' ' MOV BND12,#'L' MOV BND13,#'A' MOV BND14,#'I' MOV BND15,#'.' ACALL WRITE_BND ;================================================= ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY RET ;======================================== RUN_CAMON2: ACALL CLEAR_BND MOV BND0, #' ' MOV BND1, #'Q' MOV BND2, #'U' MOV BND3, #'Y' MOV BND4, #' ' MOV BND5, #'K' MOV BND6, #'H' MOV BND7, #'A' MOV BND8, #'C' MOV BND9, #'H' MOV BND10,#' ' MOV BND11,#'D' MOV BND12,#'A' MOV BND13,#' ' MOV BND14,#'C' MOV BND15,#'H' ACALL WRITE_BND ;================================================= ACALL CLEAR_BND MOV BND0, #'O' MOV BND1, #'N' MOV BND2, #' ' MOV BND3, #'T' MOV BND4, #'R' MOV BND5, #'A' MOV BND6, #' ' MOV BND7, #'S' MOV BND8, #'U' MOV BND9, #'A' MOV BND10,#'.' MOV BND11,#' ' MOV BND12,#'C' MOV BND13,#'H' MOV BND14,#'U' MOV BND15,#'C' ACALL WRITE_BND ;================================================= ACALL CLEAR_BND MOV BND0, #' ' MOV BND1, #'Q' MOV BND2, #'U' MOV BND3, #'Y' MOV BND4, #' ' MOV BND5, #'K' MOV BND6, #'H' MOV BND7, #'A' MOV BND8, #'C' MOV BND9, #'H' MOV BND10,#' ' MOV BND11,#'N' MOV BND12,#'G' MOV BND13,#'O' MOV BND14,#'N' MOV BND15,#' ' ACALL WRITE_BND ;================================================= ACALL CLEAR_BND MOV BND0, #'M' MOV BND1, #'I' MOV BND2, #'E' MOV BND3, #'N' MOV BND4, #'G' MOV BND5, #'.' MOV BND6, #' ' MOV BND7, #'C' MOV BND8, #'A' MOV BND9, #'M' MOV BND10,#' ' MOV BND11,#'O' MOV BND12,#'N' MOV BND13,#'.' MOV BND14,#' ' MOV BND15,#'H' ACALL WRITE_BND ;================================================= ACALL CLEAR_BND MOV BND0, #'E' MOV BND1, #'N' MOV BND2, #' ' MOV BND3, #'G' MOV BND4, #'A' MOV BND5, #'P' MOV BND6, #' ' MOV BND7, #'L' MOV BND8, #'A' MOV BND9, #'I' MOV BND10,#' ' MOV BND11,#'(' MOV BND12,#'^' MOV BND13,#'_' MOV BND14,#'^' MOV BND15,#')' ACALL WRITE_BND ;================================================= ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY RET ;================================================== DELAY: MOV R5,#255 NEXT: MOV R6,#255 WAIT: DJNZ R6,WAIT DJNZ R5,NEXT RET ;===================================================== ISR_T1: CLR P1.2 CLR P1.4 SETB P1.0 SETB P1.1 SETB P1.3 ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY CLR P1.3 MOV R3,#255 MOV A,#01H ;dich con tro toi vi tri 1 dong 1 ACALL LENH ACALL RUN_CAMON1 ACALL LAPCHUCHAY WAIT1: SJMP WAIT1 DJNZ R3,WAIT1 RETI ;===================================================== ISR_T2: CLR P1.1 CLR P1.3 SETB P1.0 SETB P1.2 SETB P1.4 ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY ACALL DELAY CLR P1.4 MOV R3,#255 MOV A,#01H ;dich con tro toi vi tri 1 dong 1 ACALL LENH ACALL RUN_CAMON2 ACALL LAPCHUCHAY WAIT2: SJMP WAIT2 DJNZ R3,WAIT2 RETI END Lêi kÕt Víi ®Ò tµi m¸y b¸n hµng tù ®éng, chóng em lµm hiÓn thÞ b»ng LCD vµ dù ®Þnh cña nhãm lµ tiÕn tíi lµm m¸y rót tiÒn tù ®éng, vÉn hiÓn thÞ trªn LCD vµ cã c¸c c«ng ®o¹n nhËp ID, password, lùa chän, kiÓm tra tµi kho¶n vµ rót tiÒn. Tuy nhiªn, do thêi gian vµ tr×nh ®é cã h¹n nªn chóng em míi chØ lµm ®­îc ®Ò tµi nµy. LÇn ®Çu tiªn b¾t tay vµo lµm mét m¹ch ®iÖn tö thùc tÕ kh«ng tr¸nh khái nhiÒu khóc m¾c, trong thêi gian tíi chóng em sÏ tiÕp tôc nghiªn cøu ®Ó hoµn thiÖn thªm h­íng ®Ò tµi cña m×nh. Qua ®©y, chóng em xin göi lêi c¶m ¬n ®Õn thÇy Hµn Huy Dòng, gi¶ng viªn m«n KÜ thuËt vi xö lý ®· h­íng dÉn chóng em hoµn thµnh ®Ó tµi nµy.

Các file đính kèm theo tài liệu này:

  • docDAN174.doc