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
55 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2849 | Lượt tải: 5
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:
- Dong ho thoi gian hien thi LCD.docx
- Dong ho thoi gian hien thi LCD.pdf