Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD

Lời nói đầu Chương 1 :Giới thiệu đề tài . 1. Giới thiệu 2. Sơ đồ khối 3. Chức năng các khối Chương 2: Giới thiệu phần cứng . 1. Sơ đồ mạch . 2. Giới thiệu các linh kiện có trong mạch 2.1. AT89S52 2.2. LCD . 2.2.1. Chức năng các chân 2.2.2. Sơ đồ khối của HD44780 . 2.2.3. Tâập lệnh của LCD 2.2.4. Biểu đồ thời gian 2.3. IC thời gian thực DS1307 . 2.3.1. Chức năng các chân 2.3.2. Một vài thông số kỹ thuật . 2.3.3. Sơ đồ khối của DS1307 . 2.3.4. Truyền dữ liệu trên bus 2 dây nối tiếp . 2.3.5. Hai chế độ hoạt động của DS1307 2.3.6. Biểu đồ thời gian . Chương 3: Thiết kế chương trình 1. Mạch mô phỏng 2. Thuật toán 3. Chương trình Tổng kết . Tài liệu tham khảo . LỜI NÓI ĐẦU Ngày nay cùng với sự tiến bộ của khoa học kỹ thuật công nghệ điện tử đã đang và sẽ phát triển ngày càng rộng rãi đặc biệt là trong kỹ thuật số. Mạch số ứng dụng rất nhiều trong kỹ thuật cũng như đời sống xã hội. Các ứng dụng của mạch số như đồng hồ số, mạch đếm sản phẩm, mạch đo nhiệt độ . Trong các trường học công sở, cơ quan xí nghiệp . đồng hồ số được dùng để xem giờ và báo giờ. Mục đích chính của đồ án này là thiết kế một đồng hồ số có chức năng xem giờ và báo giờ thời gian thực, vẫn lưu được giờ khi mất nguồn cung cấp. Vì kiến thức và thời gian hạn chế, kinh nghệm còn yếu nên đồ án không tránh được sai sót, rất mong sự đánh giá của Quý Thầy Cô và góp ý của các bạn sinh viên. Sinh viên thực hiện Hoàng Văn Ngân Triệu Văn Lục CHÚ THÍCH : TÀI LIỆU TRÊN GỒM FILE PDF + WORD

docx55 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2712 | Lượt tải: 5download
Bạn đang xem trước 20 trang tài liệu Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hân số Tên Chức năng 1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của mạch điều khiển 2 Vdd Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với Vcc=5V của mạch điều khiển 3 Vee Chân này dùng để điều chỉnh độ tương phản của LCD 4 RS Chân chọn thanh ghi (Register select). + Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read) + Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD. 5 RW Chân chọn chế độ đọc/ghi (Read/Write). Nối chân R/W với logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc. 6 E Chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus DB0- DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E. + Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E. + Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (low- to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp. 7-14 DB0- DB7 Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU. Có 2 chế độ sử dụng 8 đường bus này : + Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7. + Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7. 15,16 A,K Đèn của LCD Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  Hình:Sơ đồ khối của HD44780 a. Các thanh ghi: Chíp HD44780 có 2 thanh ghi 8 bit quan trọng : Thanh ghi lệnh IR (Instructor Register) và thanh ghi dữ liệu DR (Data Register) Thanh ghi IR : Để điều khiển LCD, người dùng phải “ra lệnh” thông qua tám đường bus DB0-DB7. Mỗi lệnh được nhà sản xuất LCD đánh địa chỉ rõ ràng. Người dùng chỉ việc cung cấp địa chỉ lệnh bằng cách nạp vào thanh ghi IR. Nghĩa là, khi ta nạp vào thanh SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 7 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  ghi IR một chuỗi 8 bit, chíp HD44780 sẽ tra bảng mã lệnh tại địa chỉ mà IR cung cấp và thực hiện lệnh đó. Thanh ghi DR : Thanh ghi DR dùng để chứa dữ liệu 8 bit để ghi vào vùng RAM DDRAM hoặc CGRAM (ở chế độ ghi) hoặc dùng để chứa dữ liệu từ 2 vùng RAM này gởi ra cho MPU (ở chế độ đọc). Nghĩa là, khi MPU ghi thông tin vào DR, mạch nội bên trong chíp sẽ tự động ghi thông tin này vào DDRAM hoặc CGRAM. Hoặc khi thông tin về địa chỉ được ghi vào IR, dữ liệu ở địa chỉ này trong vùng RAM nội của HD44780 sẽ được chuyển ra DR để truyền cho MPU. Bằng cách điều khiển chân RS và R/W chúng ta có thể chuyển qua lại giữ 2 thanh ghi này khi giao tiếp với MPU. Bảng sau đây tóm tắt lại các thiết lập đối với hai chân RS và R/W theo mục đích giao tiếp. b. Cờ báo bận BF(Busy Flag): Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng thời gian để hoàn tất. Khi đang thực thi các hoạt động bên trong chip như thế, LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có thiết lập RS=0, R/W=1) lên để báo cho MPU biết nó đang “bận”. Dĩ nhiên, khi xong việc, nó sẽ đặt cờ BF lại mức 0. c. Bộ Đếm địa chỉ AC (Address Counter): Như trong sơ đồ khối, thanh ghi IR không trực tiếp kết nối với vùng RAM (DDRAM và CGRAM) mà thông qua bộ đếm địa chỉ AC. Bộ đếm này lại nối với 2 vùng RAM theo kiểu rẽ nhánh. Khi một địa chỉ lệnh được nạp vào thanh ghi IR, thông tin được nối trực tiếp cho 2 vùng RAM nhưng việc chọn lựa vùng RAM tương tác đã được bao hàm trong mã lệnh. d. Vùng Ram hiển thị DDRAM(Display Data RAM): Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM là một ô kí tự trên màn hình và khi bạn ghi vào vùng RAM này một mã 8 bit, LCD sẽ hiển thị tại vị trí tương ứng trên màn hình một kí tự có mã 8 bit mà bạn đã cung cấp. SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 8RS RW Khi cần 0 0 Ghi vào thanh ghi IR để ra lệnh cho LCD (VD: cần display clear,…) 0 1 Đọc cờ bận ở DB7 và giá trị của bộ đếm địa chỉ ở DB0-DB6. 1 0 Ghi vào thanh ghi DR. 1 1 Đọc dữ liệu từ DR. Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  Hình:Mối quan hệ giữa địa chỉ của DDRAM và vị trí hiển thị của LCD Vùng RAM này có 80x8 bit nhớ, nghĩa là chứa được 80 kí tự mã 8 bit. Những vùng RAM còn lại không dùng cho hiển thị có thể dùng như vùng RAM đa mục đích. e. Vùng ROM chứa ký tự đồ họa: Vùng ROM này dùng để chứa các mẫu kí tự loại 5x8 hoặc 5x10 điểm ảnh/kí tự, và định địa chỉ bằng 8 bit. Tuy nhiên, nó chỉ có 208 mẫu kí tự 5x8 và 32 mẫu kí tự kiểu 5x10 (tổng cộng là 240 thay vì 28 = 256 mẫu kí tự). Người dùng không thể thay đổi vùng ROM này. f. Vùng RAM chứa kí tự đồ họa CGRAM (Character Generator RAM): Nhà sản xuất dành vùng có địa chỉ byte cao là 0000 để người dùng có thể tạo các mẫu kí tự đồ họa riêng. Tuy nhiên dung lượng vùng này rất hạn chế: Ta chỉ có thể tạo 8 kí tự loại 5x8 điểm ảnh, hoặc 4 kí tự loại 5x10 điểm ảnh. 2.2.3. Tập lệnh của LCD: Các lệnh của LCD có thể chia thành 4 nhóm như sau : · Các lệnh về kiểu hiển thị. VD : Kiểu hiển thị (1 hàng / 2 hàng), chiều dài dữ liệu (8 bit / 4 bit), … · Chỉ định địa chỉ RAM nội. · Nhóm lệnh truyền dữ liệu trong RAM nội. · Các lệnh còn lại . SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 9 Tên lệnh Hoạt động t (max) Clear Display Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 0 0 0 1 Lệnh Clear Display (xóa hiển thị) sẽ ghi một khoảng trống-blank (mã hiển kí tự 20H) vào tất cả ô nhớ trong DDRAM, sau đó trả bộ đếm địa AC=0, trả lại kiểu hiện thị gốc nếu nó bị thay đổi. Nghĩa là : Tắt hiển thị, con trỏ dời về góc trái (hàng đầu tiên), chế độ tăng AC Return home Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 0 0 1 * Lệnh Return home trả bộ đếm địa chỉ AC về 0, trả lại kiểu hiển thị 1.52 ms Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 10 gốc nếu nó bị thay đổi. Nội dung của DDRAM không thay đổi Entry mode set Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 0 1 [I/D] S I/D : Tăng (I/D=1) hoặc giảm (I/D=0) bộ đếm địa chỉ hiển thị AC 1 đơn vị mỗi khi có hành động ghi hoặc đọc vùng DDRAM. Vị trí con trỏ cũng di chuyển theo sự tăng giảm này. S : Khi S=1 toàn bộ nội dung hiển thị bị dịch sang phải (I/D=0) hoặc sang trái (I/D=1) mỗi khi có hành động ghi vùng DDRAM. Khi S=0: không dịch nội dung hiển thị. Nội dung hiển thị không dịch khi đọc DDRAM hoặc đọc/ghi vùng CGRAM. 37 us Display on/off control Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 0 1 [D] [C] [B] D: Hiển thị màn hình khi D=1 và ngược lại. Khi tắt hiển thị, nội dung DDRAM không thay đổi. C: Hiển thị con trỏ khi C=1 và ngược lại B: Nhấp nháy kí tự tại vị trí con trỏ khi B=1 và ngược lại 37 us Cursor or display shift Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 0 1 [S/C] [R/L] * * Lệnh Cursor or display shift dịch chuyển con trỏ hay dữ liệu hiển thị sang trái mà không cần hành động ghi/đọc dữ liệu. Khi hiển thị kiểu 2 dòng, con trỏ sẽ nhảy xuống dòng dưới khi dịch qua vị trí thứ 40 của hàng đầu tiên. Dữ liệu hàng đầu và hàng 2 dịch cùng một lúc. Chi tiết sử dụng xem bảng bên dưới: S/C R/L Hoạt động 0 0 Dịch vị trí con trỏ sang trái (Giảm AC một đơn vị). 0 1 Dịch vị trí con trỏ sang phải (Tăng AC lên 1 đơn vị). 1 0 Dịch toàn bộ nội dung hiển thị sang trái, con trỏ cũng dịch theo. 1 1 Dịch toàn bộ nội dung hiển thị sang phải, con trỏ cũng dịch theo 37 us Function set Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 0 1 [DL] [N] [F] * * DL: Khi DL=1, LCD giao tiếp với MPU bằng giao thức 8 bit (từ bit DB7 đến DB0). Ngược lại, giao thức giao tiếp là 4 bit (từ bit DB7 đến bit DB0). Khi chọn giao thức 4 bit, dữ liệu được truyền/nhận 2 lần liên tiếp. với 4 bit cao gởi/nhận trước, 4 bit thấp gởi/nhận sau. N: Thiết lập số hàng hiển thị. Khi N=0 : hiển thị 1 hàng, N=1: hiển thị 2 hàng. F : Thiết lập kiểu kí tự. Khi F=0: kiểu kí tự 5x8 điểm ảnh, F=1: kiểu kí tự 5x10 điểm ảnh. 37 us Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 11 * Chú ý: · Chỉ thực hiện thay đổi Function set ở đầu chương trình. Và sau khi được thực thi 1 lần, lệnh thay đổi Function set không được LCD chấp nhận nữa ngoại trừ thiết lập chuyển đổi giao thức giao tiếp. · Không thể hiển thị kiểu kí tự 5x10 điểm ảnh ở kiểu hiển thị 2 hàng Set CGRAM address Mã lệnh :DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 1 [ACG] [ACG] [ACG] [ACG] [ACG] [ACG] Lệnh này ghi vào AC địa chỉ của CGRAM. Kí hiệu [ACG] chỉ 1 bit của chuỗi dữ liệu 6 bit. Ngay sau lệnh này là lệnh đọc/ghi dữ liệu từ CGRAM tại địa chỉ đã được chỉ định. 37 us Set DDRAM address Mã lệnh :DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = 0 1 [AD] [AD] [AD] [AD] [AD] [AD] Lệnh này ghi vào AC địa chỉ của DDRAM, dùng khi cần thiết lập tọa độ hiển thị mong muốn. Ngay sau lệnh này là lệnh đọc/ghi dữ liệu từ DDRAM tại địa chỉ đã được chỉ định. Khi ở chế độ hiển thị 1 hàng: địa chỉ có thể từ 00H đến 4FH. Khi ở chế độ hiển thị 2 hàng, địa chỉ từ 00h đến 27H cho hàng thứ nhất, và từ 40h đến 67h cho hàng thứ 2. 37 us Read BF and address Mã lệnh :DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = [BF] [AC] [AC] [AC] [AC] [AC] [AC] [AC] (RS=0, R/W=1). Khi cờ BF bật, LCD đang làm việc và lệnh tiếp theo (nếu có) sẽ bị bỏ qua nếu cờ BF chưa về mức thấp. Cho nên, khi lập trình điều khiển, bạn phải kiểm tra cờ BF trước khi ghi dữ liệu vào LCD. Khi đọc cờ BF, giá trị của AC cũng được xuất ra các bit [AC]. Nó là địa chỉ của CG hay DDRAM là tùy thuộc vào lệnh trước đó. 0 us Write data to CG or DDRAM Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = [Write data] (RS=1, R/W=0) Sau khi ghi, bộ đếm địa chỉ AC tự động tăng/giảm 1 tùy theo thiết lập Entry mode. Lưu ý là thời gian cập nhật AC không tính vào thời gian thực thi lệnh. 40 us Read data from CG or DDRAM Mã lệnh : DBx = DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DBx = [Read data] (RS=1, R/W=1) Khi thiết lập RS=1, R/W=1,dữ liệu từ CG/DDRAM được chuyển ra MPU thông qua các chân DBx (địa chỉ và vùng RAM đã được xác định bằng lệnh ghi địa chỉ trước đó). Sau khi đọc, AC tự động tăng/giảm 1 tùy theo thiết lập Entry mode, tuy nhiên nội dung hiển thị không bị dịch bất chấp chế độ Entry mode. 40 us Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD 2.2.4. Biểu đồ thời gian : SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 12 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  2.3.  IC thời gian thực DS1307: 2.3.1. Chức năng các chân: X1,X2: nối với thạch anh 32,768 kHz Vcc,GND: nguồn một chiều được cung cấp tới các chân này. Vcc là đầu vào 5V. Khi 5 V được cung cấp thì thiết bị có thể truy cập hoàn chỉnh và dữ liệu có thể đọc và viết. Khi pin 3 V được nối tới thiết bị này và Vcc nhỏ hơn 1,25Vbat thì quá trình đọc và viết không được thực thi,tuy nhiên chức năng timekeeping không bị ảnh hưởng bởi điện áp vào thấp. Khi Vcc nhỏ hơn Vbat thì RAM và timekeeper sẽ được ngắt tới nguồn cung cấp trong (thường là nguồn 1 chiều 3V). Vbat: Đầu vào pin cho bất kỳ một chuẩn pin 3V. Điện áp pin phải được giữ trong khoảng từ 2,5 đến 3V để đảm bảo cho sự hoạt động của thiết bị. SDA(serial data input/out): là chân vào ra cho 2 đường dây nối tiếp. Chân SDA thiết kế theo kiểu cực máng hở , đòi hỏi phải có một điện trở kéo trong khi hoạt động. SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 13 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  SCL(serial clock input): SCL được sử dụng để đồng bộ sự chuyển dữ liệu trên đường dây nối tiếp SQW/OUT(square wave/output driver)- khi được kích hoạt thì bit SQWE được thiết lập, chân SQW/OUT phát đi 1 trong 4 tần số (1Hz,4kHz,8kHz,32kHz). Chân này cũng được thiết kế theo kiểu cực máng hở vì vậy nó cũng cần có một điện trở kéo trong. Chân này sẽ hoạt động khi cả Vcc và Vbat được cấp. 2.3.2. Một vài thông số kỹ thuật: DS1307 là một IC thời gian thực với nguồn cung cấp nhỏ, dùng để cập nhật thời gian và ngày tháng với 56 bytes NV SRAM. Địa chỉ và dữliệu được truyền nối tiếp qua 2 đường bus 2 chiều. Nó cung cấp thông tin về giờ,phút,giây ,thứ,ngày ,tháng, năm.Ngày cuối tháng sẽ tự động được điều chỉnh với các tháng nhỏ hơn 31 ngày,bao gồm cả việc tự động nhảy năm. Đồng hồ có thể hoạt động ở dạng 24h hoặc 12h với chỉ thị AM/PM. DS1307 có một mạch cảm biến điện áp dùng để dò các điện áp lỗi và tự động đóng ngắt với nguồn pin cung cấp. DS 1307 hoạt động với vai trò slave trên đường bus nối tiếp. Việc truy cập được thi hành với chỉ thị START và một mã thiết bị nhất định được cung cấp bởi địa chỉ các thanh ghi. Tiếp theo đó các thanh ghi sẽ được truy cập liên tục đến khi chỉ thị STOP được thực thi. 2.3.3. Sơ đồ khối của DS1307: Hình: Sơ đồ khối của DS1307 a. Địa chỉ Ram và RTC: SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 14 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  Thông tin về thời gian và ngày tháng được lấy ra bằng cách đọc các byte thanh ghi thích hợp. thời gian và ngày tháng được thiết lập cũng thông qua các byte thanh ghi này bằng cách viết vào đó những giá trị thích hợp. nội dung của các thanh ghi dưới dạng mã BCD(binary coded decreaseimal). Bit 7 của thanh ghi seconds là bit clock halt(CH),khi bit này được thiết lập 1 thì dao động disable,khi nó được xoá về 0 thì dao động được enable. Chú ý: Trạng thái đóng nguốn ban đầu của tất cả các thanh ghi không được định nghĩa. Do đó phải bật bộ dao độngtrong lúc cấu hình ban đầu (CH=0). Thanh ghi thời gian thực được mô tả như sau: 00h 07h 08h 3Fh  Seconds Minutes Hours Day Date Month Year Control Ram 56x8 DS1307 có thể chạy ở chế độ 24h cũng như 12h. Bit thứ 6 của thanh ghi hours là bit chọn chế độ 24h hoặc 12h. khi bit này ở mức cao thì chế độ 12h được chọn. ở chế độ 12h thì bit 5 là bit AM/PM với mức cao là là PM. ở chế độ 24h thì bit 5 là bit chỉ 20h(từ 20h đến 23h). Trong DS1307 có một thanh ghi điều khiển để điều khiển hoạt động của chân SQW/OUT. OUT(output control):bit này điều khiển mức ra của chân SQW/OUT khi đầu ra xung vuông bị cấm. Nếu SQWE=0 thì mức logic ở chân SQW/OUT sẽ là 1 nếu OUT=1,và =0 nếu OUT=0 SQWE(square wave enable): bit này được thiết lập 1 sẽ cho phép đầu ra của bộ tạo dao động. Tần số của đầu ra sóng vuông phụ thuộc vào giá trị của RS1 và RS0. SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 15 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 OUT 0 0 SQWE 0 0 RS1 RS0 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  b. Hoạt động: DS1307 hỗ trợ truyền dữ liệu bus 2 dây 2 chiều. Một thiết bị gửi dữ liệu lên đường truyền được định nghĩa như là 1 máy phát và một thiết bị nhận dữ liệu như là máy nhận. Thiết bị điều khiển thông điệp gọi là Master. Thiết bị được điều khiển bởi Master được gọi là Slaver. Đường truyền (Bus) phải được điều khiển bởi thiết bị master mà phát ra xung nối tiếp (Serial Clock_SCL) điều khiển sự truy cập đường truyền và phát ra điều kiện bắt đầu, dừng (Start ,Stop condition). DS1307 hoạt động như là Slave trên bus 2 dây. Hình: Cấc hình bus 2 dây điển hình Việc truyền dữ liệu chỉ có thể được bắt đầu khi bus không bận Trong lúc truyền dữ liệu, đường dữ liệu phải ổn định bất cứ khi nào đường Clock là cao (High). Do đó, các điều kiền về đường truyền sau được định nghĩa: · Bus not busy:cả đường dữ liệu và xung đều ở mức cao (High) · Start data transfer: một sự thay đổi trong trang thái của đường dữ liệu từ HIGH - LOW trong khi xung clock vẫn cao (H), đây là điều kiện bắt đầu (Start Condition). · Stop data transfer: một sự thay đổi trong trang thái của đường dữ liệu từ LOW - HIGH trong khi xung clock vẫn cao (H), đây là điều kiện dừng (Stop Condition) . · Data valid: trạng thái của đường dữ liệu biểu diễn dữ liệu hợp lệ khi mà : sau điều kiện Start đường dữ liệu ổn định trong khoảng thời gian chu kỳ cao (HIGH) của SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 16 RS1 RS0 Tần số xung vuông 0 0 1Hz 0 1 4,096kHz 1 0 8,192kHz 1 1 32,768kHz Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  tín hiệu clock. Dữ liệu trên đường phải thay đổi trong chu kỳ thấp (LOW) của tín hiệu clock. Có 1 xung clock/ 1 bit dữ liệu. Mỗi dữ liệu truyền đi với điều kiện Start và kết thúc với điều kiện Stop. Số byte dữ liệu truyền giữa điều kiện Start và Stop là không giới hạn và được quyết định bởi thiết bị master. Sau khi một byte được truyền thì được báo nhận ở bộ thu với bit thứ 9. · Acknowledge: Mỗi thiết bị nhận khi được định địa chỉ thì phải phát ra tín hiệu báo nhận sau khi nhận mỗi byte. Thiết bị master phải phat ra thêm 1 xung clock để ghép với bit báo nhận này Thiết bị báo nhận phải kéo đường SDA xuống trong suốt xung clock báo nhận như là cách mà đường SDA ổn định thấp trong chu kỳ High của xung clock báo nhận. Dĩ nhiên, thời gian thiết lập và thời gian giữ (chờ) phải được tính toán đến. Master phải báo hiệu kết thúc dữ liệu đến Slave bằng cách không phát ra một bit báo nhận trên byte cuối cùng mà được ghi vào Slave. Trong trường hơp này, Slave phải để đường dữ liệu ở mức cao (H) để cho phép Master phát ra điều kiện STOP. 2.3.4. Truyền dữ liệu trên bus 2 dây nối tiếp: Hình: Truyền dữ liệu trên bus 2 dây Tuỳ thuộc vào bit R/ w mà 2 loại truyền dữ liệu sẽ được thực thi. · Truyền dữ liệu từ master truyền và slave nhận: Master sẽ truyền byte đầu tiên là địa chỉ của slave. Tiếp sau đó là các byte dữ liệu. Slave sẽ gửi lại bit thông báo đã nhận được (bit acknowledge) sau mỗi byte dữ liệu nhận được. Dữ liệu sẽ truyền từ bit có giá trị nhất (MSB). · Truyền dữ liệu từ slave và master nhận: byte đầu tiên (địa chỉ của slave) được truyền tới slave bởi master. Sau đó slave sẽ gửi lại master bit acknowledge. Tiếp theo đó slave sẽ gửi các byte dữ liệu tới master. Master sẽ gửi cho slave các bit acknowledge sau mỗi byte nhận được trừ byte cuối cùng,sau khi nhận được byte cuối cùng thì bit acknowledge sẽ không được gửi. Master phát ra tất cả các chuỗi xung clock và các chỉ thị START và STOP. Sự truyền sẽ kết thúc với chỉ thị STOP hoặc chỉ thị quay vòng START. Khi chỉ thị START quay SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 17 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  vòng thì sự truyền chuỗi dữ liệu tiếp theo được thực thi và các bus vẫn chưa được giải phóng. Dữ liệu truyền luôn bắt đầu bằng bit MSB. 2.3.5. Hai chế độ hoạt động của DS1307: DS1307 có thể hoạt động ở 2 chế độ sau: · Chế độ slave nhận( chế độ DS1307 ghi):chuỗi dữ liệu và chuỗi xung clock sẽ được nhận thông qua SDA và SCL. Sau mỗi byte được nhận thì 1 bit acknowledge sẽ được truyền. các điều kiện START và STOP sẽ được nhận dạng khi bắt đầu và kết thúc một truyền 1 chuỗi. nhận dạng địa chỉ được thực hiện bởi phần cứng sau khi chấp nhận địa chỉ của slave và bit chiều. Byte địa chỉ là byte đầu tiên nhận được sau khi điều kiện START được phát ra từ master. Byte địa chỉ có chứa 7 bit địa chỉ của DS1307, là 1101000, tiếp theo đó là bit chiều (R/ w ) cho phép ghi khi nó bằng 0. sau khi nhận và giải mã byte địa chỉ thì thiết bị sẽ phát đi 1 tín hiệu acknowledge lên đường SDA. Sau khi DS1307 nhận dạng được địa chỉ và bit ghi thì master sẽ gửi một địa chỉ thanh ghi tới DS1307 , tạo ra một con trỏ thanh ghi trên DS1307 và master sẽ truyền từng byte dữ liệu cho DS1307 sau mỗi bit acknowledge nhận được. sau đó master sẽ truyền điều kiện STOP khi việc ghi hoàn thành. · Chế độ slave phát ( chế độ DS1307 đọc): byte đầu tiên slave nhận được tương tự như chế độ slave ghi. Tuy nhiên trong chế độ này thì bit chiều lại chỉ chiều truyền ngược lại. Chuỗi dữ liệu được phát đi trên SDA bởi DS 1307 trong khi chuỗi xung clock vào chân SCL. Các điều kiện START và STOP được nhận dạng khi bắt đầu hoặc kết thúc truyền một chuỗi. byte địa chỉ nhận được đầu tiên khi master phát đi điều kiện START. Byte địa chỉ chứa 7 bit địa chỉ của slave và 1 bit chiều cho phép đọc là 1. sau khi nhận và giải mã byte địa chỉ thì thiết bị sẽ nhận 1 bit acknowledge trên đường SDA. Sau đó DS1307 bắt đầu gửi dữ liệu tới địa chỉ con trỏ thanh ghi thông qua con trỏ thanh ghi. nếu con trỏ thanh ghi không được viết vào trước khi chế độ đọc được thiết lập thì địa chỉ đầu tiên được đọc sẽ là địa chỉ cuối cùng chứa trong con trỏ thanh ghi. DS1307 sẽ nhận được một tín hiệu Not Acknowledge khi kết thúc quá trình đọc. SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 18 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD 2.3.6. Biểu đồ thời gian: Hình: Biểu đồ thời gian. SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 19 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  Chương 3: THIẾT KẾ CHƯƠNG TRÌNH 1. Mạch mô phỏng SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 20 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  2. Thuật toán: CMD check BF RS=[0] RW=[1] LCD_Port=#0FFh Out_Cmd A=[0] A=@A+dptr  BF=[1]? No RS=[0] RW=[0]  Yes E=[1] E=[0] BF=[1] No RET  Yes Yes A=End_Sig ? No CMD dptr ++  LCD_Port=A E=[1] E=[0] RET SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 21 RET Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD DTA  BF=[1]?  Yes No RS=[1] RW=[0] LCD_Port=A E=[1] E=[0] RET R6=[40h] A ? R6 CMD  EX1ISR Alarm_Flag = [1]  Hex_Dec R6 ++ A=[0] A=@A+dptr Yes A=End_Sig ? No DTA dptr ++  No  A_Ring=[0]? Yes Alarm_port=[1] "ALARM OFF" A_Ring= [0] Alarm_Flag= [0] RETI B=[10h] A/B 70h? B B=[0Ah] A.B A=A+70h RET SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 22 RET Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD Sta_Cond _2W_Busy=[1]  Sto_Cond SDA=[0] SCL_High SDA=[1] _2W_Busy=[1] RET  ACK=[0] SDA=[1] SCL_High SDA=[0] Hold SCL=[0] RET SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 23 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD Disp_Val Delay 50ms  Delayms Push ms Timer 0, Mode1 Push ACC Swap A A & 0Fh Th0= #High(50000) TL0= #Low(50000) TR0 =[1]  A=A+[30h] DTA  Disp_RTC Dat vi tri con tro No  TF0 = 0 ? No TF0 = [0] ms -- ms=[0]? Yes  Pop ACC Push ACC A & 0Fh A=A+[30h] Hien thi Thoi gian No Yes No A_Hour = Hour? Yes Yes TR0 =[0] Push ms RET DTA Pop ACC RET  A_Min =Minute? Yes A_Ring=[1] RET No A_Ring=[0] SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 24 Alarm_ON=[1]? Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD MAIN Cho phep ngat Khoi tao LCD Xay dung CGRAM Ten Xoa co Khoi tao cac bien R1=[Second] Byte_Count=[0] Last_Read=[0] Tro thanh ghi 0h RTC Bat dau doc DS1307  No No  Byte_Count=[7]? Yes Last_Read=[1] Recv @R1? A Byte_Count=[0]? A? @R1 ACC.7 = [0] @R1? A R1 ++ Byte_Count ++ Byte_Count=[8]? Yes Sto_Cond Disp_RTC Time_Flag=[0]?  No Yes No EA = [0] Time_Flag= [0] Set_Time EA = [1]  Alarm_Flag=[0]? No Alarm_Flag = [0] Alarm_ON= [0] Set_Alarm Yes  A_Ring=[0]? No Alarm_Alarm  Yes Yes Alarm_ON=[0]? No Hien gio hen SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 25 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD Set_Hour "HOUR =" Dat vi tri con tro A ? Hour A & 3Fh R4 ? A Disp_Val Dat vi tri con tro Hex_Dec  Up=[0]?  No  Down=[0]?  No  T_Key=[0]?  No  A_Key=[0]? Yes Bip Delay A ++ Yes Bip Delay A -- Yes Bip Delay Dec_Hex Yes Bip Delay Dec_Hex A = [24]?  Yes  Yes  Hour ? A  Hour ? A No A =[0] No A =[23] Set_Minute Set_Finish Dec_Hex Disp_Val R4 ? A SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 26 A = [0FFh]? Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  3. Chương trình: ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++ DO AN VI DIEU KHIEN (THANG 5/2009) ++++++++++ ;+++++++ DAI HOC BACH KHOA DA NANG ++++++++++ ;+++++++ KHOA CO KHI ++++++++++ ;+++++++ LOP: 05CDT2 ++++++++++ ;+++++++ HOANG VAN NGAN ++++++++++ ;+++++++ TRIEU VAN LUC ++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ E bit p1.0 RW bit p1.1 RS bit p1.2 SCL bit p3.0 SDA bit p3.1 Time_Key bit p3.2 Alarm_Key bit p3.3 Down bit p3.4 Up bit p3.5 Alarm_Port bit p3.7 ;Noi den coi bip BF bit p2.7 Lcd_Port equ p2 Flag data 20h Last_Read bit Flag.0 Mode_12 bit Flag.1 Mode_AM bit Flag.2 Ack bit Flag.3 _2W_Busy bit Flag.4 OSC bit Flag.5 Time_flag bit Flag.6 Alarm_FLag bit Flag.7 Alarm_On bit 08h Alarm_ring bit 09h Byte_Count data 30h Second data 28h Minute data 29h Hour data 2Ah Day data 2bh Date data 2ch Month data 2dh Year data 2eh Sig data 2Fh A_hour data 50h A_Minute data 31h SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 27 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  DS1307W DS1307R  equ equ  0D0h 0D1h End_Sig equ 11010000b ;dau hieu bao ket thuc chuoi lenh ;hoac chuoi cac ki tu hien thi Mode8Bit equ 38h ;2 hang, ma tran 5x7 Disp_Off equ 08h ;Tat hien thi, DDR khong bi anh huong Disp_On equ 0Ch ;bat hien thi Cursor_On equ 0Eh ;Bat hien thi, bat con tro Disp_All equ 0Fh ;Bat hien thi, bat con tro, bat nhap nhay Clr_Disp equ 01h ;xoa DDR, AC=1, tat hien thi Cursor_Home equ 03h ;AC=0 ;============Thiet lap che do=============================== Inc_Ctrl equ 06h ;Tang AC moi khi co hoat dong doc, ghi toi LCD Dec_Ctrl equ 04h ;Giam AC moi khi co hoat dong doc, ghi toi LCD L_Ctrl equ 07h ;Dich trai DDR moi khi co hoat dong doc, ; ghi toi LCD R_Ctrl equ 05h ;Dich phai DDR moi khi co hoat dong doc, ; ghi toi LCD ;=============Dich con tro va hien thi============================ L_Cur equ 10h ;Giam AC, dich con tro sang trai R_Cur equ 14h ;Tang AC, dich con tro sang phai L_Disp equ 18h ;Dich toan bo DDR, hien thi sang trai, ;con tro cung dich theo R_Disp equ 1Ch ;Dich toan bo DDR, hien thi ; sang phai, con tro cung dich theo ;======================================================== Org Org Org 00h 03h 13h  jmp Main Setb Time_Flag ;Ngat ngoai 0, chinh gio reti jmp EX1ISR ;------------------------------------------------------------------------ ;----------CHUONG TRINH CHINH--------------------------- ;-------------------------------------------------------------------------- Org 30h Main: ; Chuong trinh chinh mov ie,#85h ;Cho phep ngat ngoai 0 va ngat ngoai 1 mov r2,#01h call delayms mov dptr,#Ready ;Khoi tao LCD, 8bit, bat hien thi call Out_Cmd SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 28 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  mov call mov mov call call mov call mov call mov call mov call mov call mov call mov call mov clr clr clr clr setb mov mov call mov call mov call call call mov call call call cjne  dptr,#CGRAM Out_Cg r2,#15 dptr,#Mes1 Out_Str delayms a,#0C1h Cmd a,#01h Cmd dptr,#Mes2 Out_Str a,#0C1h Cmd dptr,#Mes3 Out_Str r2,#1 Delayms a,#Clr_Disp Cmd r2,#01h Time_Flag Alarm_Flag Alarm_ON Alarm_ring Alarm_Port a_hour,#00h a_Minute,#00h Sta_Cond a,#DS1307W Send a,#08h send Sto_Cond Sta_cond a,#DS1307R Send recv Sto_Cond a,#'~',done SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 29 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  done:  sjmp mov call mov mov mov mov mov mov mov mov mov mov  Read_Clock a,#01h Cmd Second,#00h Minute,#0 Hour,#10h day,#06h date,#12h month,#06h year,#09h sig,#'~' r1,#second r0,#00h kk: mov a,#DS1307W call Send mov a,r0 mov a,@r1 call Send inc r1 inc r0 call Sto_Cond cjne r0,#9,kk call Sto_Cond ;----------------------------------------------------------------------------- ;---Doc va hien thi dong ho--------------------------------------------- ;----------------------------------------------------------------------------- Read_Clock: mov r1,#28h ;bat dau cua vung nho tam ma doc duoc tu DS1307 mov byte_count,#00h ;dem so byte clr Last_Read call Sta_cond mov a,#DS1307W call Send mov a,#00h ;tro den thanh ghi 00h chua DS1307 call Send call Sto_cond call Sta_cond mov a,#DS1307R call Send Read_Loop: mov a,byte_count ;kiem tra xem phai byte cuoi cung chua cjne a,#07h,No_Last setb Last_Read SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 30 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD No_Last:  call call mov mov cjne clr mov jnb setb clr mov Not_First: inc inc mov cjne call call jnb clr clr call clr setb jmp Check2: jnb clr setb call jnb mov call mov call mov call mov call mov call mov call Recv Sto_Cond @r1,a a,byte_count a,#00h,Not_First ;nhay neu khong phai dang doc ;thanh ghi dau tien OSC a,@r1 acc.7,Not_First ;neu bit 7 la 1, co OSC=1 OSC ACC.7 @r1,a r1 byte_count a,byte_count a,#08h,Read_Loop Sto_Cond Disp_RTC Time_Flag,Check2 EA Time_Flag Set_time Time_Flag EA Read_Clock Alarm_Flag,Check3 Alarm_Flag Alarm_On Set_Alarm Alarm_on,Check3 dptr,#ready Out_Cmd dptr,#D_A_ok Out_STr a,#0C5h Cmd a,a_Hour Disp_Val a,#':' Dta a,A_Minute Disp_Val SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 31 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD push 2 mov r2,#50 call Delayms pop 2 mov a,#01h call Cmd setb ea jmp Read_Clock  Check3: ;kiem tra den gio hen thi do chuong jnb Alarm_Ring,aa call Alarm_Alarm aa: jmp Read_Clock ;============================================================== EX1ISR: Setb Alarm_Flag ;Ngat ngoai 1, chinh gio jnb Alarm_ring,ii setb Alarm_port mov a,#01h call Cmd mov dptr,#D_No_Alarm call Out_Str mov r2,#50 call Delayms mov a,#01 call Cmd mov r2,#01 clr Alarm_on clr alarm_ring clr Alarm_Flag ii: reti ;--------------------------------------------------------- ;----Cai dat thoi gian------------------------------------ ;--------------------------------------------------------- Set_Time: call Bip jnb Time_Key,$ mov a,#Clr_Disp call Cmd mov r2,#01h mov dptr,#M_Set_Time call Out_Str mov r2,#50 call Delayms ;=============================================== Set_Hour: SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 32 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  mov call mov mov call  a,#Clr_Disp Cmd r2,#01h dptr,#M_Set_Hour Out_Str mov a,#0C7h call Cmd mov a,hour anl a,#3Fh ;che do 24h mov r4,a call Disp_Val L_Set_hour1: mov a,#0c7h call cmd mov a,r4 ;lay so gio call hex_dec jb Up,Ch_Down_31 call Bip call De_bounce inc a cjne a,#24,Conti_31 mov a,#00 Conti_31: call Dec_Hex call Disp_Val mov r4,a jmp L_Set_Hour1 Ch_Down_31: ;kiem tra nhan phim DOWN jb Down,Ch_Time_key_31 call Bip call De_bounce dec a cjne a,#0FFh,Conti_31 ;Tiep tuc giam neu gio chua ve 0 mov a,#23 jmp Conti_31 Ch_Time_Key_31: jb Time_Key,Ch_Alarm_Key_31 call Bip call De_bounce call dec_hex ;dua tro ve lai ma BCD de dua vao thanh ghi mov Hour,a jmp Set_Minute Ch_Alarm_Key_31: jb Alarm_Key,L_Set_Hour1 call Bip SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 33 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  call call mov jmp  De_Bounce dec_hex ;dua tro ve lai ma BCD de dua vao thanh ghi Hour,a Set_Finish ;------------------ Set phut (minute) --------------------------------------------- Set_Minute: mov dptr,#Clear call Out_Cmd mov r2,#01h mov dptr,#M_Set_Minute call Out_Str mov a,#0c7h call Cmd mov a,Minute push acc call Disp_Val pop acc call Hex_Dec L_Set_Minute: push acc mov a,#0c7h call cmd pop acc jb up,Ch_Down_8 call Bip call De_bounce inc a cjne a,#60,Conti_8 mov a,#00 Conti_8: call Dec_Hex call Disp_Val call Hex_Dec jmp L_Set_Minute Ch_Down_8: jb Down,Ch_Time_Key_8 call Bip call De_bounce dec a cjne a,#0FFh,Conti_8 mov a,#59 jmp Conti_8 ;vi khi da nhan phim tang hoac giam ;thi deu hien thi giong nhau Ch_Time_Key_8: SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 34 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD jb Time_Key,Ch_Alarm_Key_8 call Bip call De_Bounce call Dec_Hex mov Minute,a jmp Set_Second Ch_Alarm_Key_8: jb Alarm_Key,L_Set_Minute call Bip call De_bounce call Dec_Hex mov Minute,a jmp Set_Finish ;------- Set giay (Second) ---------------------------------------------------- Set_Second: mov dptr,#Clear call Out_Cmd mov r2,#01h mov dptr,#M_Set_Second call Out_Str mov a,#0c7h call Cmd mov a,Second push acc call Disp_Val pop acc call Hex_Dec L_Set_Second: push acc mov a,#0c7h call cmd pop acc jb up,Ch_Down_9 call Bip call De_bounce inc a cjne a,#60,Conti_9 mov a,#00 Conti_9: call Dec_Hex call Disp_Val call Hex_Dec jmp L_Set_Second Ch_Down_9: jb Down,Ch_Time_Key_9 SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 35 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD call Bip call De_bounce dec a cjne a,#0FFh,Conti_9 mov a,#59 jmp Conti_9 Ch_Time_Key_9: jb Time_Key,Ch_Alarm_Key_9 call Bip call De_Bounce call Dec_Hex mov Second,a jmp Set_Day Ch_Alarm_Key_9: jb Alarm_Key,L_Set_Second call Bip call De_bounce call Dec_Hex mov Second,a jmp Set_Finish ;-------------------------Day (thu)------------------------------------------------ Set_Day: mov dptr,#Clear call Out_Cmd mov r2,#01h mov dptr,#M_Set_Day call Out_Str  mov call mov call L_Set_Day: Push mov call pop jb call call inc cjne mov Conti_41: call jmp  a,#0C5h Cmd a,Day Disp_Day acc a,#0C5h Cmd acc Up,Ch_Down_4 Bip De_bounce a a,#8,Conti_41 a,#01 Disp_Day L_Set_Day SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 36 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  Ch_Down_4: jb Down,Ch_Time_Key_4 call Bip call De_Bounce dec a jnz Conti_42 ;Neu a #0 thi tiep tuc, con khong thi set a=7 mov a,#07 Conti_42: call Disp_Day jmp L_Set_Day Ch_Time_Key_4: jb Time_Key,Ch_Alarm_Key_4 call Bip call De_bounce call Dec_Hex mov Day,a jmp Set_date Ch_Alarm_Key_4: jb Alarm_Key,L_Set_Day call Bip call De_bounce call Dec_Hex mov Day,a jmp Set_Finish ;------- Set ngay (date) ---------------------------------------------------- Set_Date: mov dptr,#Clear call Out_Cmd mov r2,#01h mov dptr,#M_Set_Date call Out_Str mov call mov push call pop call L_Set_Date: push mov call pop jb call  a,#0c7h Cmd a,date acc Disp_Val acc Hex_Dec acc a,#0c7h cmd acc up,Ch_Down_5 Bip SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 37 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  call inc cjne mov Conti_5: call call call jmp Ch_Down_5: jb call call dec jnz mov  De_bounce a a,#32,Conti_5 a,#1 Dec_Hex Disp_Val Hex_Dec L_Set_Date Down,Ch_Time_Key_5 Bip De_bounce a Conti_5 a,#31 jmp Conti_5 ;vi khi da nhan phim tang hoac giam thi deu ;hien thi giong nhau Ch_Time_Key_5: jb Time_Key,Ch_Alarm_Key_5 call Bip call De_Bounce call Dec_hex mov Date,a jmp Set_month Ch_Alarm_Key_5: jb Alarm_Key,L_Set_Date call Bip call De_bounce call Dec_hex mov Date,a jmp Set_Finish ;---------------------- Set thang (month)---------------------------------- Set_Month: mov dptr,#Clear call Out_Cmd mov r2,#01h mov dptr,#M_Set_Month call Out_Str mov call mov push call pop  a,#0c7h Cmd a,Month acc Disp_Val acc SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 38 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  call Hex_Dec L_Set_Month: push acc mov a,#0c7h call cmd pop acc jb up,Ch_Down_6 call Bip call De_bounce inc a cjne a,#13,Conti_6 mov a,#1 Conti_6: call Dec_Hex call Disp_Val call Hex_Dec jmp L_Set_month Ch_Down_6: jb Down,Ch_Time_Key_6 call Bip call De_bounce dec a jnz Conti_6 mov a,#12 jmp Conti_6 ;vi khi da nhan phim tang hoac giam ; thi deu hien thi giong nhau Ch_Time_Key_6: jb Time_Key,Ch_Alarm_Key_6 call Bip call De_Bounce call Dec_Hex mov Month,a jmp Set_year Ch_Alarm_Key_6: jb Alarm_Key,L_Set_Month call Bip call De_bounce call Dec_Hex mov Month,a jmp Set_Finish ;----------------------- Set year------------------------------------------ Set_Year: mov dptr,#Clear call Out_Cmd mov r2,#01h mov dptr,#M_Set_Year SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 39 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  call mov call mov push call pop call L_Set_Year: push mov call pop jb call call inc cjne mov Conti_7: call call call jmp Ch_Down_7: jb call call dec cjne mov jmp  Out_Str a,#0c7h Cmd a,Year acc Disp_Val acc Hex_Dec acc a,#0c7h cmd acc up,Ch_Down_7 Bip De_bounce a a,#100,Conti_7 a,#0 Dec_Hex Disp_Val Hex_Dec L_Set_Year Down,Ch_Time_Key_7 Bip De_bounce a a,#0FFH,Conti_7 a,#99 Conti_7 ;vi khi da nhan phim tang hoac giam ; thi deu hien thi giong nhau Ch_Time_Key_7: jb Time_Key,Ch_Alarm_Key_7 call Bip call De_Bounce call Dec_Hex mov Year,a jmp Set_Finish Ch_Alarm_Key_7: jb Alarm_Key,L_Set_Year call Bip call De_bounce call Dec_Hex SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 40 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD mov Year,a jmp Set_Finish ;----------------------------------------------------------- ;--- khi da thiet lap xong, ghi thoi gian vao cac thanh ghi-- ;----------------------------------------------------------- Set_Finish: call Sta_Cond mov a,#DS1307W call Send mov a,#00h call Send mov r1,#second Send_Set: mov a,@r1 call Send inc r1 cjne r1,#2Fh,Send_Set call Sto_Cond  mov call mov call mov call mov  dptr,#clear Out_cmd dptr,#Set_Ok Out_Str r2,#50 delayms r2,#01 mov dptr,#clear call Out_Cmd ret ;-------------------------------------------------------------------------------- ;----------- SET ALARM --------------------------- ;-------------------------------------------------------------------------------- Set_Alarm: call Bip clr EA ;cam ngat clr Alarm_flag mov dptr,#Ready call Out_Cmd mov r2,#01h mov dptr,#M_Set_Alarm call Out_Str mov r2,#50 call Delayms ;------- Set gio hen ---------------------------------------------------- SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 41 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  A_Set_hour: mov A,#Clr_Disp call Cmd mov r2,#01h mov dptr,#M_Set_Hour call Out_Str mov a,#0c7h call Cmd mov a,A_hour call Disp_Val call Hex_Dec A_L_Set_Hour: push acc mov a,#0c7h call cmd pop acc jb up,A_Ch_Down_7 call Bip call De_bounce inc a cjne a,#24,A_Conti_7 mov a,#00 A_Conti_7: call Dec_Hex call Disp_Val call Hex_Dec jmp A_L_Set_Hour A_Ch_Down_7: jb Down,A_Ch_Alarm_Key_7 call Bip call De_bounce dec a cjne a,#0FFh,A_Conti_7 mov a,#23 jmp A_Conti_7 ;vi khi da nhan phim tang hoac giam ; thi deu hien thi giong nhau A_Ch_Alarm_Key_7: jb Alarm_Key,A_Ch_Time_Key_7 call Bip call De_Bounce call Dec_Hex mov A_Hour,a jmp A_Set_Minute A_Ch_Time_Key_7: jb time_Key,A_L_Set_Hour SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 42 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  call Bip call De_bounce jmp Cancel ;------- Set phut (minute) ---------------------------------------------------- A_Set_Minute: mov dptr,#Ready call Out_Cmd mov r2,#01h mov dptr,#M_Set_Minute call Out_Str mov a,#0c7h call Cmd mov a,A_Minute call Disp_Val call Hex_Dec A_L_Set_Minute: push acc mov a,#0c7h call cmd pop acc jb up,A_Ch_Down_8 call Bip call De_bounce inc a cjne a,#60,A_Conti_8 mov a,#00 A_Conti_8: call Dec_Hex call Disp_Val call Hex_Dec jmp A_L_Set_Minute A_Ch_Down_8: jb Down,A_Ch_Alarm_Key_8 call Bip call De_bounce dec a cjne a,#0FFh,A_Conti_8 mov a,#59 jmp A_Conti_8 ;vi khi da nhan phim tang hoac giam ; thi deu hien thi giong nhau A_Ch_Alarm_Key_8: jb Alarm_Key,A_Ch_Time_Key_8 call Bip call De_Bounce call Dec_Hex SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 43 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  mov A_Minute,a jmp return3 A_Ch_Time_Key_8: jb time_Key,A_L_Set_Minute call Bip call De_bounce ;----------------------- Huy bo thiet lap hen gio--------------------------------- Cancel: mov dptr,#ready call Out_cmd mov dptr,#D_No_Alarm call Out_str push 2 mov r2,#50 call delayms pop 2 mov a,#01h call Cmd clr Alarm_on clr Alarm_ring setb ea return3: ret ;----------------------------------------------------------------------- ;-------Chong nay phim------------------------------------------- ;---------------------------------------------------------------------- De_bounce: push 2 mov r2,#10 call delayms pop 2 ret ;--------------coi --------------------------------------------------- alarm_alarm: clr alarm_port mov r3,#0ffh a_loop: mov r4,#0ffh djnz r4,$ djnz r3,a_loop setb alarm_port mov r3,#0ffh a_loop1: mov r4,#0ffh djnz r4,$ djnz r3,a_loop1 SVTH: Hoàng Văn Ngân - Triệu Văn Lục ;Alarm Ring  Trang 44 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD clr alarm_port mov r3,#0ffh a_loop2: mov r4,#0ffh djnz r4,$ djnz r3,a_loop2 setb alarm_port mov r3,#0ffh a_loop3: mov r4,#0ffh djnz r4,$ djnz r3,a_loop3 clr alarm_port mov r3,#0ffh a_loop4: mov r4,#0ffh djnz r4,$ djnz r3,a_loop4 setb alarm_port mov r3,#0ffh a_loop5: mov r4,#0ffh djnz r4,$ djnz r3,a_loop5 clr alarm_port mov r3,#0ffh a_loop6: mov r4,#0ffh djnz r4,$ djnz r3,a_loop6 setb alarm_port ret ;-------------------------------------------------------------------- ;-----------Chuyen doi tu hexa sang dec----------------------- ;-------------------------------------------------------------------- Hex_Dec: mov b,#10h div ab mov 70h,b mov b,#0ah mul ab add a,70h ret ;---------------------------------------------------- ;------Hien thi thu trong tuan----------------- ;-------------------------------------------------- SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 45 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  Disp_Day: push acc cjne a,#01,D_Mon mov dptr,#Sun call Out_Str jmp exit D_Mon: cjne a,#02h,D_Tue mov dptr,#Mon call Out_Str jmp exit D_Tue: cjne a,#03h,D_Wed mov dptr,#Tue call Out_Str jmp exit D_Wed: cjne a,#04h,D_Thu mov dptr,#Wed call Out_Str jmp exit D_Thu: cjne a,#05h,D_Fri mov dptr,#Thu call Out_Str jmp exit D_Fri: cjne a,#06h,D_Sat mov dptr,#Fri call Out_Str jmp exit D_Sat: mov dptr,#Sat call Out_Str Exit: pop acc ret ;----Hien thi gia tri thap phan voi so dua vao la ma BCD (lay tu DS1307)----- Disp_Val: push acc swap a anl a,#0Fh add a,#30h ;ki tu so tuong ung voi ma BCD call Dta pop acc push acc SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 46 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  anl a,#0Fh add a,#30h call Dta pop acc ret ;------Gui du lieu tu VDK den DS1307 ------------------------------------- Send: mov r7,#08 ;dem so bit L_Send: jnb acc.7,SDA_0 ;chuyen bit 7 cua thanh ghi A vao SDA setb SDA jmp Cont SDA_0: Clr SDA Cont: call SCL_High rl A ;chuyen dan bit cao den thap clr SCL djnz r7,L_Send setb SDA ;chot de doc xung bao nhan call SCL_High clr ACK jnb SDA,Ack_0 setb ACK ACK_0: call Hold clr Scl call Hold ret ;-----Nhan du lieu tu DS1307 ------------------------------------------------------- Recv: mov r7,#08h mov a,#00h L_Recv: call SCL_High mov C,SDA ;dua gia tri doc duoc 0 SDA vao co Carry rlc a clr SCL djnz r7,L_Recv jb  Last_Read,N_Send_ACK  ;neu khong phai la lan doc cuoi cung ;thi gui bit bao nhan clr SDA N_Send_ACK: call SCL_High clr SCl SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 47 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD ret ;-------Dieu kien bat dau DS1307------- Sta_Cond: setb _2W_Busy clr Ack setb SDA call SCL_High clr SDA call Hold clr SCL ret ;-------Dieu kien dung cua DS1307-------- Sto_Cond: clr SDA call SCL_High setb SDA clr _2W_Busy ret ;-------thiet lap duong clock len bit cao------------- SCL_High: setb SCL jnb SCL,$ ret ;--------------------------------------------------------------------  Out_Str: ;Xuat 1 chuoi ki tu ra man hinh LCD mov a,#00h movc a,@a+dptr cjne a,#End_Sig,Next_Char ;Xuat den khi ket thuc chuoi jmp return ;Tro lai chuong trinh Next_Char: call Dta ;Gui du lieu den LCD push 2 ;Cat gia tri R2, so miligiay call Delayms pop 2 inc dptr jmp Out_Str Out_Cmd: mov a,#00h movc a,@a+dptr cjne a,#End_Sig,Next_Cmd jmp Return Next_Cmd: call cmd inc dptr jmp Out_Cmd SVTH: Hoàng Văn Ngân - Triệu Văn Lục ;Xuat 1 chuoi lenh den LCD Trang 48 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  Out_Cg:  ;Xay dung ki tu dac biet vao CGRAM CG: mov mov call inc  cmd R6,#40h a,r6 r6 ;bat dau dia chi cua CGRAM tai 00h mov a,#00h movc a,@a+dptr cjne a,#End_Sig,Next_Cg jmp return Next_Cg: call dta inc dptr jmp CG ;========================================================= Cmd: ;Xuat 1 lenh den LCD call Check_BF clr RS clr RW jmp Out ;======================================================== Dta: ;Xuat du lieu den LCD call Check_BF setb RS clr RW Out: mov Lcd_Port,a setb E clr E ret ;======================================================= Check_BF: ;Kiem tra co ban BF clr RS setb RW mov Lcd_Port,#0FFh ;Chot de doc co ban L_Check: clr E Setb E jb BF,L_Check Return: ret ;----------------------------------------------------------------------------------- ;-----Delay ms, so ms duoc dua vao R2 o chuong trinh chinh------------ ;------------------------------------------------------------------------------------ SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 49 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  Delayms: push 2 ;Delay 50 ms mov Tmod,#01h L_Delay: mov Th0,#High(50000) mov Tl0,#Low(50000) setb tr0 jnb tf0,$ clr tf0 djnz r2,L_Delay clr tr0 pop 2 ret ;--------------------------------------------------------------------------- ;------Thoi gian giu giua cac hoat dong cua DS1307-------------- ;-------------------------------------------------------------------------- Hold: nop nop nop nop ret ;------------------------------------------------------------------------ ;---Xuat ra man hinh LCD du lieu nhan duoc tu LCD--------- ;----------------------------------------------------------------------- Disp_RTC: mov a,#80h ;dua con tro ve dau hang thu 1 call Cmd mov r1,#2Bh ;thu (day) mov a,@r1 call Disp_Day mov call mov mov call mov call mov mov call mov call  a,#88h Cmd r1,#2Ch a,@r1 Disp_Val a,#'/' Dta r1,#2Dh a,@r1 Disp_Val a,#'/' Dta  ;vi tri thu 9, hang 1 ;ngay ;thang SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 50 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  mov call  a,year Disp_year jnb mov call mov call D_next: mov call  Cmd Dta Cmd Alarm_on,D_Next a,#0C2h a,#01h a,#0C7h ;hien thi cai chuong neu co hen gio ;vi tri thu 8,hang 2 mov r1,#2Ah ;gio mov a,@r1 call Disp_Hour mov a,#':' call Dta mov r1,#29h ;phut mov a,@r1 call Disp_Val mov a,#':' call Dta mov r1,#28h ;giay mov a,@r1 call Disp_Val jnb Alarm_on,return4 mov a,A_hour cjne a,hour,return4 mov a,A_minute cjne a,Minute,return5 setb Alarm_ring jmp return4 return5: clr Alarm_ring return4: ret ;------------------------------------------------- ;--------------Hien thi gio----------------------- ;------------------------------------------------- Disp_hour: anl a,#3Fh call Disp_Val Ret ;------------------------------------------------------------------- ;------Chuyen doi tu Dec sang HEXA----------------------- ;------------------------------------------------------------------- Dec_Hex: SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 51 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD  mov b,#0ah div ab mov 70h,b mov b,#10h mul ab add a,70h ret ;-------------------------------------------------------------------- ;-----Tao tieng Bip moi khi nhan phim--------------------- ;------------------------------------------------------------------- Bip: push 2 mov r2,#01 clr alarm_port call delayms setb alarm_port pop 2 ret ;-------------------------------------------- ---------------------- ;-------Chuoi lenh va chuoi hien thi------------------------- ;------------------------------------------------------------------ Ready: db Mode8Bit,Disp_On,Clr_Disp,End_Sig Clear: db Clr_Disp,Disp_On,End_Sig CGRAM: db 00h,0Eh,15h,1dh,11h,0eh,00,00 ;hinh dong ho db 4h,0eh,0eh,0eh,1fh,0h,4h,0h ;hinh cai chuong db 0h,1h,3h,16h,1ch,8h,0h,0h ;OK db 1h,3h,0fh,0fh,0fh,3h,1h,0h ;SPEAKER OFF db 8h,10h,0h,18h,0h,10h,8h,0h ;SPEAKER ON db 0ah,1fh,1fh,1fh,0eh,4h,0h,0h ;hinh trai tim db 2h,3h,2h,0eh,1eh,0ch,0h,0h,End_Sig ;MUSIC Sun: db '',End_Sig Mon: db '',End_Sig Tue: db '',End_Sig Wed: db '',End_Sig Thu: db '',End_Sig Fri: db '',End_Sig Sat: db '',End_Sig Mes1: db 'DO AN VDK',End_Sig Mes2: db 'HOANG VAN NGAN',End_Sig Mes3: db 'TRIEU VAN LUC',End_Sig M_Set_time: db 0,'SET TIME !',End_Sig M_Set_Second: db 'SECOND =',End_Sig M_Set_Minute: db 'MINUTE =',End_Sig M_Set_Hour: SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 52 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD db 'HOUR =',End_Sig M_Set_Day: db 'DAY =',End_Sig M_Set_Date: db 'DATE =',End_Sig M_Set_Month: db 'MONTH =',End_Sig M_Set_Year: db 'YEAR =',End_Sig M_Set_Alarm: db 1,' SET ALARM !',End_Sig Set_ok: db 2,' SET TIME',End_sig D_No_Alarm: db 2,' ALARM OFF',End_Sig D_A_ok: db 2,' ALARM ON :',End_Sig :============================================= End SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 53 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD Tổng Kết  - - - -  Ứng dụng thực tế: không (vì đồng hồ điện tử ngoài thị trường rất rẻ) Ứng dụng những gì đã học để làm mạch Giao tiếp với LCD Giao tiếp chuẩn I2C SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 54 Đồ án VĐK: Đồng hồ thời gian thực hiển thị LCD Tài liệu tham khảo  - - Cấu trúc và lập trình họ vi điều khiển_Nguyễn Tăng Cường LCD_Lập trình và giao tiếp_ Triết Nguyên SVTH: Hoàng Văn Ngân - Triệu Văn Lục  Trang 55

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

  • docxDong ho thoi gian hien thi LCD.docx
  • pdfDong ho thoi gian hien thi LCD.pdf