Đồ án Đồng hồ số hiển thị giờ trên LED 7 đoạn

MỤC LỤC

Mở đầu

Chương 1: Giới thiệu và mô tả chức năng 3

1.1-Giới thiệu 3

1.2-Sơ đồ mạch 3

1.3-Mô tả chức năng 3

Chương 2: Nguyên lý hoạt động 5

2.1-Mô tả cấu trúc phần cứng của vi điều khiển 8951 5

2.1.1-Giới thiệu họ MCS51 5

2.1.2-Chức năng các khối của chip 89C51 6

2.1.3-Sơ đồ chân và chức năng chip 89C51 8

2.2-DS1307Serial Real Time Clock 12

2.2.1-Giới thiệu 12

2.2.2-Các thanh ghi của DS1307 13

2.2.3-Điều kiện của giao thức truyền I2C 13

a) Write mode 15

b) Read mode 16

2.3-Xử lý phím nhấn 17

2.3.1-Sơ đồ nguyên lý 17

2.3.2-Chức năng 17

2.4-Hiển thị trên LED 7 đoạn 18

2.4.1-Sơ đồ nguyên lý 18

2.4.2-Chức năng và nguyên lý hoạt động 19

2.4.3-Cấu tạo LED 7 đoạn 19

2.4.4-Xây dựng module hiển thị LED 7 đoạn 21

Chương 3: Lưu đồ giải thuật & Chương trình 23

3.1-Lưu đồ giải thuật 23

3.2-Chương trình 25

 

 

doc57 trang | Chia sẻ: maiphuongdc | Lượt xem: 3864 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Đồ án Đồng hồ số hiển thị giờ trên LED 7 đoạn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
8031 0 KB 128 byte 2 8032 0 KB 256 byte 3 8051 4 KB PROM 128 byte 2 8052 8 KB PROM 256 byte 3 8751 4 KB UV-EPROM 128 byte 2 8752 8 KB UV-EPROM 256 byte 3 8951 4 KB FLASH ROM 128 byte 2 8952 8 KB FLASH ROM 256 byte 3 Hình 2.1: Khoái vi xöû lyù 2.1.2-Chöùc naêng caùc khoái cuûa chip 89C51 Hình 2.2: Sô ñoà khoái cuûa chip 89C51 CPU (Central Processing Unit - Ñôn vò xöû lyù trung taâm): tính toaùn vaø ñieàu khieån quaù trình hoaït ñoäng cuûa heä thoáng. OSC (Oscillator - Maïch dao ñoäng): taïo tín hieäu xung clock cung caáp cho caùc khoái trong chip hoaït ñoäng. Interrupt control (Ñieàu khieån ngaét): nhaän tín hieäu ngaét töø beân ngoaøi (INT0\, INT1\), töø boä ñònh thôøi (TIMER0, TIMER1) vaø töø coång noái tieáp (SERIAL PORT), laàn löôït ñöa caùc tín hieäu ngaét naøy ñeán CPU ñeå xöû lyù. Other registers (Caùc thanh ghi khaùc): löu tröõ döõ lieäu cuûa caùc port xuaát/nhaäp, traïng thaùi laøm vieäc cuûa caùc khoái trong chip trong suoát quaù trình hoaït ñoäng cuûa heä thoáng. RAM (Random Access Memory - Boä nhôù döõ lieäu trong chip): löu tröõ caùc döõ lieäu. ROM (Read Only Memory - Boä nhôù chöông trình trong chip): löu tröõ chöông trình hoaït ñoäng cuûa chip. I/O ports (In/Out ports - Caùc port xuaát/nhaäp): ñieàu khieån vieäc xuaát nhaäp döõ lieäu döôùi daïng song song giöõa trong vaø ngoaøi chip thoâng qua caùc port P0, P1, P2, P3. Serial port (Port noái tieáp): ñieàu khieån vieäc xuaát nhaäp döõ lieäu döôùi daïng noái tieáp giöõa trong vaø ngoaøi chip thoâng qua caùc chaân TxD, RxD. Timer 0, Timer 1 (Boä ñònh thôøi 0, 1): duøng ñeå ñònh thôøi gian hoaëc ñeám söï kieän (ñeám xung) thoâng qua caùc chaân T0, T1. Bus control (Ñieàu khieån bus): ñieàu khieån hoaït ñoäng cuûa heä thoáng bus vaø vieäc di chuyeån thoâng tin treân heä thoáng bus. Bus system (Heä thoáng bus): lieân keát caùc khoái trong chip laïi vôùi nhau. 2.1.2-Sô ñoà chaân vaø chöùc naêng caùc chaân cuûa chip 89C51: Hình 2.3 - Sơ đồ chân chip 89C51 Port 0: Port 0 (P0.0 – P0.7) coù soá chaân töø 32 – 39. Port 0 coù hai chöùc naêng: Port xuaát nhaäp döõ lieäu (P0.0 - P0.7) _ khoâng söû duïng boä nhôù ngoaøi. Bus ñòa chæ byte thaáp vaø bus döõ lieäu ña hôïp (AD0 – AD7)_ coù söû duïng boä nhôù ngoaøi. Löu yù: Khi Port 0 ñoùng vai troø laø port xuaát nhaäp döõ lieäu thì phaûi söû duïng caùc ñieän trôû keùo leân beân ngoaøi. Khi laäp trình cho ROM trong chip thì Port 0 ñoùng vai troø laø ngoõ vaøo cuûa döõ lieäu (D0 – D7) (SGK, tr. 333-352). Port 1: Port 1 (P1.0 – P1.7) coù soá chaân töø 1 – 8. Port 1 coù moät chöùc naêng: Port xuaát nhaäp döõ lieäu (P1.0 – P1.7) _ söû duïng hoaëc khoâng söû duïng boä nhôù ngoaøi. Khi laäp trình cho ROM trong chip thì Port 1 ñoùng vai troø laø ngoõ vaøo cuûa ñòa chæ byte thaáp (A0 – A7) (SGK, tr. 333-352). Port 2: Port 2 (P2.0 – P2.7) coù soá chaân töø 21 – 28. Port 2 coù hai chöùc naêng: Port xuaát nhaäp döõ lieäu (P2.0 – P2.7) _ khoâng söû duïng boä nhôù ngoaøi. Bus ñòa chæ byte cao (A8 – A15) _ coù söû duïng boä nhôù ngoaøi. Khi laäp trình cho ROM trong chip thì Port 2 ñoùng vai troø laø ngoõ vaøo cuûa ñòa chæ byte cao (A8 – A11) vaø caùc tín hieäu ñieàu khieån Port 3: Port 3 (P3.0 – P3.7) coù soá chaân töø 10 – 17. Port 0 coù hai chöùc naêng: Port xuaát nhaäp döõ lieäu (P3.0 – P3.7) _ khoâng söû duïng boä nhôù ngoaøi hoaëc caùc chöùc naêng ñaëc bieät. Caùc tín hieäu ñieàu khieån _ coù söû duïng boä nhôù ngoaøi hoaëc caùc chöùc naêng ñaëc bieät. Khi laäp trình cho ROM trong chip thì Port 3 ñoùng vai troø laø ngoõ vaøo cuûa caùc tín hieäu ñieàu khieån (SGK, tr. 333-352). Chöùc naêng cuûa caùc chaân Port 3: Chaân XTAL1, XTAL2: XTAL (Crystal): tinh theå thaïch anh, chaân soá 18-19. Chöùc naêng: Duøng ñeå noái vôùi thaïch anh hoaëc maïch dao ñoäng taïo xung clock beân ngoaøi, cung caáp tín hieäu xung clock cho chip hoaïtñoäng. XTAL1 _ ngoõ vaøo maïch taïo xung clock trong chip. XTAL2 _ ngoõ ra maïch taïo xung clock trong chip. Löu yù: fTYP = 12MHZ fOSC = fTYP: taàn soá danh ñònh. fOSC: taàn soá maïch dao ñoäng treân chip. fCLK: taàn soá maïch dao ñoäng beân ngoaøi. Chaân RST: RST (Reset): thieát laäp laïi, chaân soá 9. Chöùc naêng: Laø tín hieäu cho pheùp thieát laëp (ñaët) laïi traïng thaùi ban ñaàu cho heä thoáng. Laø tín hieäu nhaäp, tích cöïc möùc cao. RST = 0 : Chip 8051 hoaït ñoäng bình thöôøng. RST = 1 : Chip 8051 ñöôïc thieát laëp laïi traïng thaùi ban ñaàu. Chaân Vcc, GND: Vcc, GND: nguoàn caáp ñieän, chaân soá 40-20. Chöùc naêng: Cung caáp nguoàn ñieän cho chip 8051 hoaït ñoäng. Vcc = +5V ± 10%. GND = 0V. 2.2-DS1307 Serial Real Time Clock (RTC) 2.2.1-Giới thiệu: Hình 2.4- Khoái RTC (DS1307) DS1307 là IC thời gian thực (RTC). Sử sụng giao thức I2C để truyền dữ liệu với các thiết bị khác như vi xử lý, vi điều khiển. Dữ liệu hiển thị thời gian, lịch là mã BCD nén, thêm vào đó có 56 byte SRAM bên trong. Địa chỉ và dữ liệu được truyền nối tiếp thông qua phương thức I2C. Thời gian và lịch bao gồm có các thông tin về giây, phút, giờ, ngày, ngày trong tuần, tháng và năm. Ngày cuối cùng của tháng thì tự động điều chỉnh nếu một vài tháng có 31 ngày, tương tự với năm nhuận. 2.2.2 Các thanh ghi của DS1307: Việc lấy dữ liệu thời gian và lịch chỉ đơn giản là đọc dữ liệu từ các thanh ghi thích hợp. Địa chỉ và chức năng của các thanh ghi được liệt kê trong bảng sau: Hình 2.5- Các thanh ghi RTC DS12C887 có chạy ở cả 2 mode 12 giờ, hoặc chế độ 24 giờ. Bit thứ 6 của thanh ghi giờ quyết định chế độ chạy chế độ 12 hoặc 24. Khi ở mức cao chế độ 12 giờ được chọn. 2.2.3- Điều kiện của giao thức truyền I2C Trong giao thức truyền này DS1307 được hiểu như một thiết bị Slave, điều kiện của giao thức I2C là: Dữ liệu bắt đầu truyển chỉ khi bus không bận. Suốt quá trình truyền SDA phải ở trạng thái ổn định bất cứ khi nào SCL ở mức cao. Thay đổi SDA khi SCL ở mức cao sẽ được hiểu như là 1 tín hiệu điều khiển. Chi tiết hơn là như sau: Bus không bận: Cả hai đường SDA và SCL vẫn ổn định ở mức cao. Bắt đầu chuyển dữ liệu: Sự thay đổi trạng thái của SDA, từ cao xuống thấp, trong khi SCL ở mức cao được định nghĩa là điều kiện Start. Kết thúc chuyển dữ liệu: Sự thay đổi trạng thái của SDA, từ thấp lên cao, trong khi SCL ở mức cao được định nghĩa là điều kiện Stop. Dữ liệu hợp lệ: Trạng thái của dữ liệu tiêu biểu cho giá trị hợp lệ khi, sau khi bắt đầu điểu kiện Start, SDA phải ở trạng thái ổn định trong suốt quá trình ở mức cao của xung clock. SDA chỉ được thay đổi suốt chu kì mức thấp của xung clock. Có một xung clock trên 1 bit dữ liệu. mỗi lần truyền dữ liệu được bắt đầu bởi điều kiện Start và kết thúc bởi điều kiện Stop, số byte được truyền giữa điều kiện Start, Stop là không bị giới hạn, và được quyết định bởi thiết bị Master (89C51). Cuối mỗi byte có 1 bit Acknowledge (bit thứ 9). Công nhận: Mỗi thiết bị sau khi được định địa chỉ, thì báo cho Master biết đã nhận đối với mỗi byte. Thiết bị Master phải tạo thêm 1 xung clock phụ liên kết với bit Acknowledged thiết bị thừa nhận phải kéo đường data xuống mức thấp (SDA) phải ổn định ở mức thấp suốt chu kì mức cao của xung clock). Dĩ nhiên thời gian thiết đặt và chờ phải được tính toán trước. Thiết bị Master phải tạo 1 tín hiệu kết thúc dữ liệu với Slave, bởi vì nếu không tạo ra bit Acknowledged cuối byte, Master vẫn tạo ra xung clock nhưng không có sự đáp ứng nào của Slave. Trong trường hợp này, thiết bị Slave phải cho đường data lên mức cao để cho phép master tạo ra điều kiện Stop. Hình 10: Dữ liệu truyền trn BUS I2C Dữ liệu truyền từ Master đến Slave: Byte đầu tiên được truyền là địa chỉ của Slave. Tiếp theo sau là 1 số byte cần truyền. Slave trả về bit thừa nhận sau mỗi byte nhận được. Dữ liệu được truyền với bit có trọng số lớn nhất (MSB) đầu tiên. Dữ liệu truyền từ Slave sang Master: Địa chỉ của Slave được truyền đầu tiên. Slave trả về bit thừa nhận (ACK). Slave truyền một số byte cần truyền. Master trả về bit thừa nhận sau tất cả các byte đã nhận được, ngoại trừ byte cuối cùng. Bit không thừa được gán cho byte cuối cùng. Thiết bị Master tạo tất cả các xung clock cũng như điều kiện Start, Stop. Sự truyền dữ liệu bắt đầu với điều kiện Start và kết thúc với điều kiện Stop. Từ khi điều Start bắt đầu nó cũng bắt đầu quá trình mới, truyền dữ liệu. a) Write mode Dữ liệu và xung clock được nhận thông qua SDA và SCL. Sau mỗi bit nhận được có 1 bit thừa nhận được truyền đi. Điều kiện Start, Stop ghi nhận việc bắt đầu truyền hay nhận dữ liệu. Phần cứng thực hiện việc ghi nhận địa chỉ sau khi địa chỉ của thiết bị Slave, bit chỉ phương truyền (Nhìn hình 5). Byte chứa địa chỉ Slave là byte đầu tiên được nhận sau khi Master tạo điều kiện Start. Địa chỉ Slave chứa 7-bit địa chỉ của DS12C887 là 1101000, theo sau đó là bit chiều (R/W), vì đây là chế độ Write nên bit này là 0. Sau khi nhận và giải mã địa chỉ Slave, DS1307 xuất ra một bit thừa nhận trên SDA. Công việc tiếp theo Master chỉ việc truyền địa chỉ Word (đặt con trỏ thanh ghi cho DS1307, và DS1307 có bit công nhận việc truyền này). Master có thể chuyển một hay nhiều byte dữ liệu ngay sau đó với sự công nhận sau mỗi byte của DS1307. Con trỏ thanh ghi tự động tăng sau mỗi byte được viết. Master sẽ tạo điều kiện Stop để ngưng việc ghi dữ liệu. Hình 2.6- Ghi dữ liệu – Chế độ Slave làm bộ nhận b) Read mode Byte đầu tiên được nhận và xử lý như chế độ Slave làm bộ nhận. Mặt dù vậy, trong chế độ này bit chiều sẽ chỉ rõ chiều được đảo lại. Điều kiện Start và Stop ghi nhận việc bắt đầu truyền và nhận dữ liệu. Byte chứa địa chỉ Slave là byte đầu tiên được chấp nhận sau khi bắt đầu điều kiện Start, tương tự như chế độ Write, địa chỉ Slave là 1101000, theo sau là bit chiều (R/W), ứng với chế độ Read nên bit này bằng 1. Sau khi nhận và giải mã địa chỉ Slave, DS1307 xuất 1 bit thừa nhận (Ack) trên SDA. DS1307 bắt đầu truyền dữ liệu bắt đầu với địa chỉ thanh ghi đã được trỏ bởi con trỏ thanh ghi. Con trỏ thanh ghi tự động tăng sau mỗi byte được đọc. DS1307 phải nhận 1 bit Ack để kết thúc việc đọc. Hình 2.7- Đọc dữ liệu – Chế độ Slave phát 2.3- Xử lý phím nhấn: 2.3.1-Sơ đồ nguyên lý: Hình 2.8- Sơ đồ Xử lý phím nhấn 2.3.2-Chức năng: Cấp nguồn cho khối vi điều khiển hoạt động bằng cách bật cộng tắc trên khối vi điều khiển và chương trình sẽ bắt đầu chạy. Ban đầu, chương trình sẽ chạy theo đồng hồ từ máy tính xuất vào mạch Vi xử lý, chương trình chạy như vậy là do mặc định ban đầu của chương trình. Muốn chương trình chạy đúng như thực tế thì ta phải hiệu chỉnh bằng các nút nhấn. Khối nút nhấn gồm 4 nút để hiệu chỉnh đồng hồ . Nút MODE kết nối với P3.2 của vi điều khiển: dùng để nhảy đến các giá trị cần hiệu chỉnh: giờ, phút, giây…. mỗi khi ta nhấn cho nối mass một lần thì nó sẽ nhảy đến giá trị cần hiệu chỉnh: Thời gian sẽ tự lưu vào bộ nhớ ta chỉ cần cài đặt 1 lần là được Để chỉnh giờ nhấn “mode” lần thứ nhất, nhấn phím “up” để chỉnh tăng giờ lên, nhấn phím “down”để giảm giờ xuống. Để chỉnh phút nhấn “mode” lần thứ 2, nhấn phím “up” để điều chỉnh tăng phút lên,nhấn phím “down” để giảm phut xuống. Để chỉnh giờ hẹn giờ nhấn “mode” lần thứ 3. Để chỉnh phút hẹn giờ nhấn “mode” lần thứ 4. Để thoát ra thì nhấn phím “exit”. Nút UP kết nối với P3.4 của vi điều khiển: dùng để tăng giá trị khi hiệu chỉnh sau mỗi lần nhấn cho nối mass. Nút DOWN kết nối với P3.5 của vi điều khiển: Dùng để giảm giá trị khi hiệu chỉnh sau mỗi lần nhấn cho nối mass. Khi muốn trở về chương trình mặc định ban đầu thì ta nhấn nút “exit” trên khối vi điều khiển . 2.4-Hiển thị trên LED 7 đoạn: 2.4.1-Sơ đồ LED. Hình 2.9- Khoái LED 7 ñoaïn 2.4.2-Chức năng và nguyên lý hoạt động. Khối LED 7 đoạn bao gồm 6 LED 7 đoạn Anode chung kết hợp với nhau. Tất cả các led này đều được cấp nguồn thông qua 6 Transistor đóng vai trò như các công tắc và được điều khiển thông qua các tín hiệu điều khiển tích cực mức thấp. Trong đó các led mắc theo kiểu phương pháp đa hợp có nghĩa là tất cả các đoạn của các led sẻ được nối chung vào nhau và vào port điều khiển (Port 1), còn anode của tất cả các led sẽ được nối vào một port điều khiển khác (Port 0), và được cấp tín hiệu quét led một cách tuần tự, tại một thời điểm thì chỉ có một led cấp nguồn hoạt động. Phương pháp điều khiển trong trường hợp này là phải tiến hành tuần tự qua các giai đoạn: Cấp một tín hiệu quét led sao cho chỉ có led đầu tiên được cấp nguồn, rồi đưa mã 7 đoạn tương ứng của số cần hiện thị ra led 7 đoạn đó; kế tiếp cần cấp một tín hiệu quét led sao cho chỉ có led thứ 2 được cấp nguồn rối đưa mã 7 đoạn tương ứng của số cần hiện thị ra led 7 đoạn đó; quá trình cứ diễn ra liên tục như vậy và do hiện tượng lưu ảnh của mắt mà ta thấy được các led dường như sáng cùng một lúc. 2.4.3-Cấu tạo của LED 7 đoạn Hình 2.10- Sơ đồ chân và cấu tạo LED 7 đoạn LED 7 đoạn là một công cụ thông dụng được dùng để hiển thị các thông số dưới dạng các số từ 0 đến 9. Mặc dù công cụ LCD giúp ta thể hiện các thông số một cách linh động hơn nhưng LED 7 đoạn vẫn được sử dụng nhiều trong công nghiệp do các ưu thế của nó như: ít chịu ảnh hưởng của nhiệt độ, dễ tạo sự chú ý và góc nhìn rộng. LED 7 đoạn bao gồm 7 đoạn LED được đánh dấu là các kí tự a, b, c, d, e, f, g và một dấu chấm thập phân kí hiệu là dp. Ta có thể xem LED 7 đoạn là một tổ hợp gồm 8 LED. 8 LED này có một đầu (Anode hoặc Cathode) được nối chung và được bố trí theo một qui tắc nhất định dùng để hiển thị các chữ số thập phân. Có hai loại LED 7 đoạn, đó là loại Anode chung (cực Anode của các LED được nối chung với nhau) và loại Cathode chung (cực Cathode của các LED được nối chung với nhau). Tùy theo từng loại LED mà ta có các phương pháp điều khiển các LED trong tổ hợp đó sáng tắt một cách thích hợp. Đối với loại Anode chung, một LED sẽ được bật sáng nếu mức logic đưa vào chân điều khiển đoạn LED đó là mức logic 0. Đối với loại Cathode chung, một LED sẽ được bật sáng nếu mức logic đưa vào chân điều khiển đoạn LED đó là mức logic 1. Một phương pháp để xác định chính xác các chân điều khiển của LED 7 đoạn là kiểm tra từng chân của LED đó. Dựa vào hình vẽ cấu tạo LED 7 đoạn ta có thể hiểu một phần nào phương pháp hiển thị của một LED. Ví dụ, muốn hiển thị số “6”, ta sẽ điều khiển các đoạn LED a, c, d, e, g, f sáng lên. Việc điều khiển sáng tắt được thực hiện bằng cách đưa dữ liệu thích hợp vào các chân a-g và dp (tạm gọi là các chân dữ liệu) của LED 7 đoạn. Đó là cách hiển thị theo từng LED. Tuy nhiên, trong thực tế, để tiết kiệm số chân cần thiết để điều khiển cùng một lúc nhiều LED 7 đoạn, các chân dữ liệu của các LED sẽ được nối song song với nhau, các chân anode chung (hoặc cathode chung) được dùng để cho phép LED đó sáng hay tắt (tạm gọi là các chân điều khiển). 2.4.4 - Xây dựng module hiển thị trên LED 7 đoạn Module ứng dụng sau đây được xây dựng dùng để hiển thị 2 chữ số thập phân trên 2 LED 7 đoạn sử dụng loại LED 7 đoạn Anode chung. Trước hết ta sẽ tiến hành kết nối phần cứng giữa vi điều khiển và LED 7 đoạn để từ đó xác định được dữ liệu cần đưa vào LED 7 đoạn để hiển thị một chữ số thập phân nào đó. Thứ tự kết nối các chân như sau: - Chân dp nối vào chân RD7. - Chân g nối vào chân RD6. - Chân f nối vào chân RD5. - Chân e nối vào chân RD4. - Chân d nối vào chân RD3. - Chân c nối vào chân RD2. - Chân b nối vào chân RD1. - Chân a nối vào chân RD0. Muốn điều khiển một đoạn LED nào đó sáng lên, ta đưa vào chân điều khiển LED đó về mức logic 0. Chương 3 LÖU ÑOÀ GIAÛI THUAÄT VAØ CHÖÔNG TRÌNH 3.1 Löu ñoà giaûi thuaät: HIỂN THỊ CHUYỂN MẢ BCDQUA MẢ 7 ĐOẠN SCANKED RET CHUYỂN MẢ BCD QUA MẢ 7 ĐOẠN XÓA ĐƠN VỊ A= @A+DPTR 20 = A A = @A+DPTR 21 = A RET GHI ĐỊA CHỈ CẦN ĐỌC GỞI NHÂN GIÁ TRỊ TỪ RTC LƯU VAO THANH GHI A START ĐỌC DATA RET SCANLED RET XUẤT Mà HIỂN THỊ RA PORT 0 DELAY LED 2.5ms BẬT BIT ĐIỀU KHIỂN TẮT BIT ĐIỀU KHIỂN MAIN DELAY 2S ĐỌC DỮ LIỆU GIÂY RTC = 80HZ ĐOC DATA DỮ LIỆU CỦA RTC GHI VÀO GIÂY GIÁ TRỊ 00H HIỂN THỊ LED 7 ĐOẠN BÁO GIỜ HẸN GIỜ HIỆU CHỈNH RTC P3.2 =0 HIỆU CHỈNH RTC P3.2 = 0 P3.4 = 0 P3.3 = 0 P3.5 = 0 THOÁT CHUYỂN TĂNG GIÁ TRỊ GIẢM GIÁ TRỊ RET Chương trình: ;################################################ ;chuong trinh giao tiep VDK 89c51 va RTC ds1307. ;noi dung: 1. cho hien thi gia tri ; cua gio-phut-giay ; len 6 led 7 doan anod chung. ; 2. bao chuong sau moi tieng ; 3. hen gio ;nguoi thuc hien: Trương thạch lam,Đoàn thị hoà ;############################################### $MOD51 ;GIAO TIEP VOI RTC DS1307 SCL BIT P3.0 SDA BIT P3.1 ;GIAO TIEP VOI NUT NHAN MODE BIT P3.2 EXIT BIT P3.3 UP BIT P3.4 DOWN BIT P3.5 ;GIAO TIEP VOI LED 7 DOAN THEO PHUONG PHAP QUET LED LED_CHGIO BIT P2.0 LED_DVGIO BIT P2.1 LED_CHPHUT BIT P2.2 LED_DVPHUT BIT P2.3 LED_CHGIAY BIT P2.4 LED_DVGIAY BIT P2.5 ALARM BIT P2.6 BELL BIT P2.7 OUT_MADISP EQU P0 ;PHAN CHIA VUNG RAM TRONG 89C51 GIAY EQU 20 PHUT EQU 21 GIO EQU 22 GIAY_ALARM EQU 27 PHUT_ALARM EQU 28 GIO_ALARM EQU 29 ORG 0000H LJMP MAIN ; ORG 0003H ; LJMP CAIDAT_RTC ORG 00H MAIN: MOV SP,#5FH ;dinh dia chi RAM nhap va RAM da dung ; MOV IE,#81H ;bat ngat ngoai 0 SETB P2.6 ;tat hen gio ;-------------------------------------------------------------- MOV R7,#6 DELAY2S: LCALL CHONGDOI ;0.5S DJNZ R7,DELAY2S ;------------------------ DOC DU LIEU CUA GIAY------------------ LCALL START MOV A,#0D0H LCALL GUI MOV A,#00H LCALL GUI LCALL STOP LCALL START MOV A,#0D1H LCALL GUI LCALL NHAN LCALL STOP CJNE A,#80H,YES ;KIEM TRA BIT 7 CO BANG 1 ;BIT 7= 1 --> DS1307 KO HOAT DONG ---> KHONG TOT ;BIT 7= 0 --> DS1307 HOAT DONG LCALL START MOV A,#0D0H LCALL GUI MOV A,#00H ;DIA CHI CUA GIAY TRONG RTC1307 LCALL GUI MOV A,#00H ;DATA BIT CH7=0 CHO PHEP BAT OSC LCALL GUI LCALL STOP YES: SJMP MP1 ;################################### ; CHUONG TRINH CHINH BAT DAU TAI DAY ;################################### MP1: ; LCALL DOCDATA ; MOV DPTR,#MA7SEG LCALL DISPLAYTIMER ;GOI CTC XU LY HIEN THI JNB P3.2,CONHANPHIM LCALL BAOGIO JNB P2.6,HENGIO SJMP MP1 CONHANPHIM: MOV P0,#00H LCALL CHUYENPHUT SJMP MP1 HENGIO: MOV A,20 CJNE A,#00H,EXIT2 MOV A,21 CJNE A,28,EXIT2 MOV A,22 CJNE A,29,EXIT2 LJMP CHUONGHG EXIT2: SJMP MP1 ;########################## ;CTC XU LY DU LIEU HIEN THI ;########################## DISPLAYTIMER: MOV DPTR,#MA7SEG LCALL DOCDATA ;DOC DU LIEU TU RTC LCALL DISPLAY ;CHO HIEN THI RET ;#################################### ;CTC DOC DU LIEU ;SAU DO LUU DIEU LIEU VAO RAM CUA VDK ;#################################### DOCDATA: MOV R0,#00H ;DIA CHI DU LIEU CAN DOC BAT DAU LA GIAY MOV R1,#20 ;LUU VAO O NHO CUA VDK DOCTIEP: LCALL START MOV A,#0D0H ;DIA CHI CUA RTC1307, D0 = GHI, D1 = DOC LCALL GUI MOV A,R0 ;DIA CHI CUA GIAY TRONG RTC1307 LCALL GUI LCALL STOP LCALL START MOV A,#0D1H ;NHAN DATA GIAY TU RTC1307 LCALL GUI LCALL NHAN LCALL STOP MOV @R1,A ;DOC XONG GIAY INC R0 INC R1 CJNE R0,#0BH,DOCTIEP RET BAOGIO: MOV A,20 CJNE A,#00H,NO ;0 GIAY CHUA? MOV A,21 CJNE A,#00H,NO ;0 PHUT CHUA? MOV A,22 CJNE A,#03H,BG4 LJMP CHUONGBG NO: RET BG4: CJNE A,#04H,BG5 LJMP CHUONGBG BG5: CJNE A,#05H,BG6 LJMP CHUONGBG BG6: CJNE A,#06H,BG7 LJMP CHUONGBG BG7: CJNE A,#07H,BG8 LJMP CHUONGBG BG8: CJNE A,#08H,BG9 LJMP CHUONGBG BG9: CJNE A,#09H,BG10 LJMP CHUONGBG BG10: CJNE A,#10H,BG11 LJMP CHUONGBG BG11: CJNE A,#11H,BG12 LJMP CHUONGBG BG12: CJNE A,#12H,BG13 LJMP CHUONGBG BG13: CJNE A,#13H,BG14 LJMP CHUONGBG BG14: CJNE A,#14H,BG15 LJMP CHUONGBG BG15: CJNE A,#15H,BG16 LJMP CHUONGBG BG16: CJNE A,#16H,BG17 LJMP CHUONGBG BG17: CJNE A,#17H,BG18 LJMP CHUONGBG BG18: CJNE A,#18H,BG19 LJMP CHUONGBG BG19: CJNE A,#19H,BG20 LJMP CHUONGBG BG20: CJNE A,#20H,BG21 LJMP CHUONGBG BG21: CJNE A,#21H,BG22 LJMP CHUONGBG BG22: CJNE A,#22H,BG23 LJMP CHUONGBG BG23: CJNE A,#23H,EXIT1 LJMP CHUONGBG EXIT1: RET CHUONGBG: MOV R6,#5 SJMP TTCHUONG CHUONGHG: MOV R6,#25 TTCHUONG: CLR P2.7 LCALL DELAYCHUONG SETB P2.7 LCALL DELAYCHUONG DJNZ R6,TTCHUONG LJMP MP1 ;--------------------------------------- ;CAIDAT_RTC: ; MOV R7,#6;100mS ;POWER1: ; LCALL CHONGDOI ; DJNZ R7,POWER1 ; JNB P3.2,CHUYENPHUT ; LJMP MP2 CHUYENPHUT: ;--------------------------------SET PHUT--------------- LCALL CHONGDOI CHINHPHUT: LCALL DISP_PHUT JNB P3.2,CHUYENGIO JNB P3.3,THOATCAIDAT1 JNB P3.4,TANGPHUT JNB P3.5,GIAMPHUT SJMP CHINHPHUT THOATCAIDAT1: LJMP THOATCAIDAT TANGPHUT: MOV A,21 LCALL HEXTODEC INC A CJNE A,#60,GHIPHUT MOV A,#00H SJMP GHIPHUT GIAMPHUT: MOV A,21 LCALL HEXTODEC DEC A CJNE A,#-1,GHIPHUT MOV A,#59 GHIPHUT: LCALL DECTOHEX MOV 21,A ACALL START MOV A,#0D0H ;DIA CHI CUA RTC1307, D0 = GHI, D1 = DOC ACALL GUI MOV A,#01H ACALL GUI MOV A,21 ACALL GUI ACALL STOP SJMP CHUYENPHUT CHUYENGIO: ACALL CHONGDOI CHINHGIO: ACALL DISP_GIO JNB P3.2,CHUYENOK1 JNB P3.3,THOATCAIDAT2 JNB P3.4,TANGGIO JNB P3.5,GIAMGIO SJMP CHINHGIO THOATCAIDAT2: LJMP THOATCAIDAT TANGGIO: MOV A,22 LCALL HEXTODEC INC A CJNE A,#24,GHIGIO MOV A,#00H SJMP GHIGIO GIAMGIO: MOV A,22 LCALL HEXTODEC DEC A CJNE A,#-1,GHIGIO MOV A,#23 GHIGIO: LCALL DECTOHEX MOV 22,A ACALL START MOV A,#0D0H ;DIA CHI CUA RTC1307, D0 = GHI, D1 = DOC ACALL GUI MOV A,#02H ;DIA CHI CUA GIO TRONG RTC1307 ACALL GUI MOV A,22 ACALL GUI ACALL STOP ACALL CHONGDOI SJMP CHINHGIO CHUYENOK1: ACALL CHONGDOI CHINHOK1: LCALL DISP_PHUT ACALL DISP_GIO JNB P3.2,CAIDATALARM JNB P3.3,THOATCAIDAT3 SJMP CHINHOK1 THOATCAIDAT3: LJMP THOATCAIDAT CAIDATALARM: LCALL CHONGDOI CHINHPHUT_A: ACALL DISP_PHUT_A JNB P3.2,CHUYENGIO_A JNB P3.3,THOATCAIDAT4 JNB P3.4,TANGPHUT_A JNB P3.5,GIAMPHUT_A SJMP CHINHPHUT_A THOATCAIDAT4: LJMP THOATCAIDAT TANGPHUT_A: MOV A,28 LCALL HEXTODEC INC A CJNE A,#60,GHIPHUT_A MOV A,#00H SJMP GHIPHUT_A GIAMPHUT_A: MOV A,28 LCALL HEXTODEC DEC A CJNE A,#-1,GHIPHUT_A MOV A,#59 GHIPHUT_A: LCALL DECTOHEX MOV 28,A ACALL START MOV A,#0D0H ;DIA CHI CUA RTC1307, D0 = GHI, D1 = DOC ACALL GUI MOV A,#08H ;DIA CHI CUA PHUT TRONG RTC1307 ACALL GUI MOV A,28 ACALL GUI ACALL STOP ACALL CHONGDOI SJMP CHINHPHUT_A CHUYENGIO_A: ACALL CHONGDOI CHINHGIO_A: ACALL DISP_GIO_A JNB P3.2,TRANGTHAIALARM JNB P3.3,THOATCAIDAT5 JNB P3.4,TANGGIO_A JNB P3.5,GIAMGIO_A SJMP CHINHGIO_A THOATCAIDAT5: LJMP THOATCAIDAT TANGGIO_A: MOV A,29 LCALL HEXTODEC INC A CJNE A,#24,GHIGIO_A MOV A,#00H SJMP GHIGIO_A GIAMGIO_A: MOV A,29 LCALL HEXTODEC DEC A CJNE A,#-1,GHIGIO_A MOV A,#23 GHIGIO_A: LCALL DECTOHEX MOV 29,A ACALL START MOV A,#0D0H ;DIA CHI CUA RTC1307, D0 = GHI, D1 = DOC ACALL GUI MOV A,#09H ;DIA CHI CUA GIO TRONG RTC1307 ACALL GUI MOV A,29 ACALL GUI ACALL STOP ACALL CHONGDOI SJMP CHINHGIO_A TRANGTHAIALARM: LCALL CHONGDOI CHINHTRANGTHAI: LCALL DISP_PHUT_A LCALL DISP_GIO_A JNB P3.2,QUAYVE JNB P3.3,THOATCAIDAT JNB P3.4,BAT_ALARM JNB P3.5,TAT_ALARM SJMP CHINHTRANGTHAI ;THOATCAIDAT6: ; LJMP THOATCAIDAT QUAYVE: LCALL CHONGDOI LJMP CHINHPHUT BAT_ALARM: LCALL CHONGDOI BAT_ALARM_1: CLR P2.6 LCALL DISP_PHUT_A LCALL DISP_GIO_A JNB P3.2,QUAYVE JNB P3.3,THOATCAIDAT JNB P3.4,BAT_ALARM JNB P3.5,TAT_ALARM SJMP BAT_ALARM_1 TAT_ALARM: LCALL CHONGDOI TAT_ALARM_1: SETB P2.6 LCALL DISP_PHUT_A LCALL DISP_GIO_A JNB P3.2,QUAYVE JNB P3.3,THOATCAIDAT JNB P3.4,BAT_ALARM JNB P3.5,TAT_ALARM SJMP TAT_ALARM_1 THOATCAIDAT: LCALL CHONGDOI RET START: CLR SCL SETB SDA NOP NOP NOP SETB SCL CLR SDA NOP NOP NOP RET STOP: NOP NOP NOP CLR SDA SETB SCL NOP NOP NOP SETB SDA CLR SCL RET GUI: MOV R7,#8 BACK_GUI: CLR SCL NOP NOP NOP RLC A MOV SDA,C SETB SCL NOP NOP NOP CLR SCL NOP NOP NOP DJNZ R7,BACK_GUI SETB SDA NOP NOP NOP SETB SCL NOP NOP NOP CLR SCL NOP NOP NOP RET NHAN: MOV R7,#08 BACK_NHAN: SETB SCL NOP NOP NOP MOV C,SDA NOP NOP NOP CLR SCL NOP NOP NOP RLC A DJNZ R7,BACK_NHAN SETB SDA NOP NOP NOP SETB SCL NOP NOP NOP CLR SCL NOP NOP NOP RET ;------------ ;CTC HIEN THI ;------------ DISPLAY: LCALL DISP_GIAY LCALL DISP_PHUT LCALL DISP_GIO RET DISP_GIAY: MOV A,20 ANL A,#0FH MOVC A,@A+DPTR MOV 30,A MOV A,20 ANL A,#0F0H SWAP A MOVC A,@A+DPTR MOV 31,A MOV P0,30 CLR P2.5 LCALL DELAY SETB P2.5 MOV P0,31 CLR P2.4 LCALL DELAY SETB P2.4 RET DISP_PHUT: MOV A,21 ANL A,#0FH MOVC A,@A+DPTR MOV 32,A MOV A,21 ANL A,#0F0H SWAP A MOVC A,@A+DPTR MOV 33,A MOV P0,32 CLR P2.3 LCALL DELAY SETB P2.3 MOV P0,33 CLR P2.2 LCALL DELAY SETB P2.2 RET DISP_GIO: MOV A,22 ANL A,#0FH MOVC A,@A+DPTR MOV 34,A MOV A,22 ANL A,#0F0H SWAP A MOVC

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

  • docbao_cao_do_an_2_dong_ho_led_7_doan_9812.doc