Thời gian là một vấn đề hết sức quan trọng trong cuộc sống cũng như trong sản xuất, thời gian cũng là thước đo cho một sự vật sự việc nào đó chẳng hạn khi đo vận tốc của chiếc xe, sự nhanh hay chậm, . do đó thời gian rất cần thiết. Từ xa xưa các nhà khoa học đã phát minh ra rất nhiều vật để đo được thời gian mà họ gọi là ĐỒNG HỒ, cũng từ đó mà có rất nhiều công trình nghiên cứu về chiếc đồng hồ, có rất nhiều loại đồng hồ và theo từng thời kỳ mà có nhiều tên gọi khác nhau, và theo sự phát triển của khoa học đã cho ra những chiếc ĐỒNG HỒ vô cùng tinh vi.
76 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2731 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Thiết kế và thi công đồng hồ số dùng at89c51 và ds 1307, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lời cảm ơn
Em xin bày tỏ lòng biết ơn chân thành và sâu sắc đến Ban giám hiệu nhà trường và toàn thể các thầy (cô)trong trường đã giúp em có những kiến thức cơ bản và đặc biệt là thầy (cô)của khoa Điện – Điện Tử của trường CĐ Kinh Tế - Công Nghệ TP.HCM đã truyền đạt kiến thức chuyên nghành và tạo điều kiện để cho em hoàn thành chuyên đề tốt nghiệp này. Và đây cũng là hành trang chuẩn bị cho em bước vào đời.
Em xin cám ơn cô NGUYỄN THỊ PHƯƠNG HÀ ( giáo viên hướng dẫn ) đã giúp đỡ và chỉ bảo tận tình cho em trong suốt quá trình làm luận văn.
Tp. HCM, ngày tháng năm 2011
Sinh viên
Mục lục
DANH SÁCH BẢNG VẼ VÀ HÌNH
Hình 1: Sơ đồ phần cứng 7
Hình 2 : Sơ đồ nguyên lí chi tiết 8
Hình 3: Sơ đồ chân 89C51 13
Hình 4: Mạch dao động cho Vi Xử Lí 15
Hình 5: Cấu trúc bộ nhớ AT89C51 16
Hình 6: Cơ chế hoạt động của DS1307 29
Hình 7: Sơ đồ khối DS1307 31
Hình 8: Địa chỉ RAM và RTC 32
Hình 9: Tần số sóng vuông ở chân SQWE 34
Hình 10: Chế độ ghi dữ liệu lên DS1307 35
Hình 11: Chế độ đọc dữ liệu từ DS1307 36
Hình 12: Led anode chung 39
Hình 13: Led Cathode chung 41
Hình 14: Sơ đồ chân IC 74HC138 44
Hình 15: Mạch điều khiển thiết kế trên Protues 7.6 48
Hình 16: Mạch hiển thị thiết kế trên Protues 7.6 49
Hình 17: Sơ đồ mạch nguồn 50
Hình 18: Mạch mô phỏng trên Protues 7.6 51
Hình 19: Sơ đồ mạch in 52
Hình 20: Lưu đồ giải thuật cho chương trình chính 54
Hình 21: Lưu đồ giải thuật quét nút nhấn 55
CHƯƠNG I : GIỚI THIỆU ĐỀ TÀI
GIỚI THIỆU ĐỀ TÀI
Đặt vấn đề
T
hời gian là một vấn đề hết sức quan trọng trong cuộc sống cũng như trong sản xuất, thời gian cũng là thước đo cho một sự vật sự việc nào đó chẳng hạn khi đo vận tốc của chiếc xe, sự nhanh hay chậm, . . . do đó thời gian rất cần thiết. Từ xa xưa các nhà khoa học đã phát minh ra rất nhiều vật để đo được thời gian mà họ gọi là ĐỒNG HỒ, cũng từ đó mà có rất nhiều công trình nghiên cứu về chiếc đồng hồ, có rất nhiều loại đồng hồ và theo từng thời kỳ mà có nhiều tên gọi khác nhau, và theo sự phát triển của khoa học đã cho ra những chiếc ĐỒNG HỒ vô cùng tinh vi.
Đồng hồ mặt trời
Đồng hồ nước
Đồng hồ cát
Đồng hồ lò xo (hay gọi là đồng hồ cơ )
Đồng hồ số (đang thịnh hành ngày nay)
Đồng thời ĐỒNG HỒ còn là trang sức đeo tay có thể là kim loại, da hoặc cao cấp hơn đó là bằng vàng . . .
Giải quyết vấn đề.
Đây là đồng hồ số sử dụng chương trình vi xử lý 89C51 và IC READ TIME CLOCK DS1307.
Mục tiêu của nhóm như sau:
Phần cứng : thiết kế được mạch điện hoàn chỉnh có hiện thị giờ, phút, giây, ngày tháng, năm và thứ lên trên LED 7 đoạn.
Phần mềm : Sử dụng thành thạo hợp ngữ để lập trình cho đồng hồ hiển thị, ứng dụng ngắt TIMER, ngắt ngoài. Sau khi lập trình thì thời gian chạy chính xác như mong muốn.
Giới hạn đề tài trong phạm vi: hiện thị ngày, tháng, năm, thứ, giờ, phút, giây, chưa có hẹn giờ báo thức và ngày âm lịch
Hình 1: Sơ đồ phần cứng
Hoạt động chung của hệ thống :
Khi cấp nguồn cho bộ điều khiển thì khối CPU sẽ cho đồng hồ hoạt động và hiển thị ra LED 7 đoạn. Khi ngưng cấp nguồn cho bộ điều khiển thì CPU sẽ không hoạt động.
Sơ đồ nguyên lí chi tiết:
Hình 2 : Sơ đồ nguyên lí chi tiết
Thiết kế chi tiết :
Khối hiển thị : gồm 14 Led 7 đoạn có nhiệm vụ hiển thị ngày giờ tháng năm …
Khối CPU – xử lí trung tâm
Để nhận, xuất, xử lí cũng như hiển thị ta cần phải có một điều khiển trung tâm.
Nhận tín hiệu điều khiển từ bộ điều khiển vật lí.
Xử lí tín hiệu : sau khi nhận tín hiệu từ nút nhấn, CPU sẽ xử lí và đưa ra kết quả tùy thuộc vào nút được nhấn là nút nào.
Xuất tín hiệu : Vi điều khiển được ta lập trình dùng bảng dữ liệu mã BCD cho Led 7 đoạn để điều khiển và hiển thị .
MSC51 là một giải pháp tốt và cũng nhằm phù hợp với yêu cầu của đề tài.
Cụ thể là IC 89c51 về chức năng cũng như phần cứng phần mềm đều có thể đáp ứng tốt nhu cầu của đề tài.
Việc lập trình cũng như thực hiện lắp mạch nguyên lí khi ta dùng AT89C51 cũng không khác nhiều so với các IC cùng họ MSC51.
Nguyên nhân dẫn đến sự lựa chọn này là ở sự đáp ứng tốt khả năng xuất nhập của các Port ( có 4 Port ). Và ở bộ nhớ lưu trữ ROM 8k byte và RAM 256 byte. Bên cạnh đó là giá thành cũng khá là phù hợp.
Khối điều khiển vật lí:
Để điều khiển đồng hồ hoạt động ta dùng nút nhấn thường hở 1 tần tiếp điểm . Để nhận tín hiệu từ nút nhấn này ta dùng 2 điện trở 330Ω kéo dương giữa nút nhấn và vi điều khiển như sơ đồ nguyên lí. Phía còn lại của nút nhấn ta nối MASS.
Chú ý : Ngoài các khối được kể trên thì còn một số phần khối khác ta không nhắc tới nhưng có lắp trong mạch như :
Khối Reset cho vi điều khiển.
Khối tạo xung cho vi điều khiển.
Khối tạo nguồn 5V cho mạch.
CHƯƠNG II : CƠ SỞ LÍ THUYẾT
CƠ SỞ LÍ THUYẾT
Giới thiệu chung về VI ĐIỀU KHIỂN
8
051 là vi điều khiển đầu tiên của họ vi điều khiển MCS51 được Intel sản xuất vào năm 1980.
Bộ vi điều khiển viết tắt là Micro-controller, là mạch tích hợp trên 1 chip có thể lập trình được, dùng để điều khiển hoạt động của một hệ thống. Theo các tập lệnh của người lập trình, bộ vi xử lý tiến hành đọc, lưu trữ thông tin, xử lý thông tin, đo thời gian và tiến hành mở một cơ cấu nào đó.
Họ vi điều khiển 8051 là họ 8 bit ( data bus ) có khả năng định địa chỉ 64K bộ nhớ chương trình và 64K bộ nhớ dữ liệu.
Mỗi vi điều khiển trong họ 8051 bao gồm tất cả các đặc tính chính và cộng thêm một số đặc tính khác như trong bảng sau:
Bảng 1: Họ Vi Điều Khiển
Trong các thiết bị điện và điện tử dân dụng, các bộ vi điều khiển, điều khiển hoạt động của Ti vi, máy giặt, đầu lọc Laser, điện thoại, lò vi ba… Trong hệ thống điều khiển tự động, bộ vi điều khiển được sử dụng trong Robot, dây chuyền tự động. Các hệ thống càng “thông minh” thì vi điều khiển càng trở nên quan trọng.
Giới thiệu VI ĐIỀU KHIỂN 89C51
Đây là loại vi xử lí điều khiển phổ biến ở Việt Nam, 89C51 mang đầy đủ các chức năng như 8051 .
Các đặc trưng của VI ĐIỀU KHIỂN.
4K bộ nhớ PLASH.
128 8 BIT RAM nội.
32 đường I/O lập trình.
2 Timer / Counter 16 bit.
6 nguồn ngắt.
Cổng lập trình được.
Sơ đồ chân.
Hình 3: Sơ đồ chân 89C51
Mô tả các chân và port
Port 0
Là một cổng xuất nhập song song cực thu hở (thiết kế cỡ nhỏ).
Là bus dữ liệu và byte thấp của địa chỉ (dồn kênh) trong các thiết kế có giao tiếp với ngoại vi. Trong trường hợp này thì Port 0 đã có Pull-ups.
Port 1
Là cổng xuất nhập song song có trở kéo lên ở cực thu.
Port 2
Là cổng xuất nhập song song có trở kéo lên ở cực thu.
Là byte cao của địa chỉ khi giao tiếp với bên ngoài.
Port 3
Là cổng xuất nhập song song có trở kéo lên ở cực thu.
Ngoài ra Port 3 còn có các chức năng đặc biệt như sau :
Bảng 2.2 : chức năng đặc biệt của Port 3
Port Pin
Chức năng đặc biệt
P3.0
RXD (ngõ vào cổng nối tiếp)
P3.1
TXD (ngõ ra cổng nối tiếp)
P3.2
/INT0 (ngắt ngoài 0)
P3.3
/INT1 (ngắt ngoài 1)
P3.4
T0 (ngõ vào Timer 0)
P3.5
T1 (ngõ vào Timer 1)
P3.6
/WR (cho phép ghi dữ liệu ra bộ nhớ ngoài)
P3.7
/RD (cho phép đọc dữ liệu từ bên ngoài)
Xuất ra xung cho phép chốt byte thấp của địa chỉ trong suốt quá trình truy xuất bộ nhớ ngoài. Trong hoạt động bình thường thì ALE phát ra xung có tần số 1/6 tần số dao động thạch anh, và chúng ta có thể dùng chân này để làm xung clock hoặc định thì.
Là tín hiệu điều khiển cho phép bộ nhớ chương trình mở rộng, thường được nối đến chân của EPROM để cho phép đọc các byte mã lệnh. ở mức thấp trong thời gian lấy lệnh.
Với các thiết kế cỡ nhỏ thì chân này được nối lên nguồn, nếu cần truy xuất ROM ngoài thì chân này được nối mass.
Định thì cho AT89C51
Tất cả các VĐK thuộc họ MCS-51 đều có mạch dao động bên trong chip, ta chỉ cần thêm thạch anh và các tụ bên ngoài 2 chân XTAL1 và XTAL2 để tạo ra nguồn xung nhịp cho MCU.
Hình 4: Mạch dao động cho Vi Xử Lí
Tổ chức bộ nhớ của AT89C51.
Bộ nhớ được cài đặt kiến trúc Harvard, có vùng nhớ riêng cho chương trình (code) và cho dữ liệu.
Hình 5: Cấu trúc bộ nhớ AT89C51
hình 6: cấu trúc RAM nội của AT89C51
Lưu ý : Bộ nhớ ROM chỉ có thể sử dụng một trong hai, tức là hoặc Internal hoặc External. Còn bộ nhớ RAM thì có thể sử dụng cùng lúc cả hai.
RAM
RAM trên chip gồm nhiều phần: Phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh ghi, và các thanh ghi chức năng đặc biệt. Phần chi tiết về RAM xin tham khảo thêm trong tài liệu Vi xử lý, ở đây ta chỉ xem xét một số thanh ghi chức năng đặc biệt (SFR).
PSW
CY
AC
F0
RS1
RS0
OV
P
TMOD
G1
C/1
M11
M01
G0
C/0
M10
M00
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
SCON
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
IE
EA
-
-
ES
ET1
EX1
ET0
EX0
Giới thiệu sơ lược: Timer/Counter, Interrupt, Serial Port.
Timer/Counter: Sử dụng thanh ghi TMOD và TCON để điều khiển. Có 3 chế độ hoạt động cho Timer (được chọn từ bit M1 và M0 của thanh ghi TMOD).
Chế độ 0
Chế độ 1
Chế độ 2
Chế độ 3
Interrupt: Đây là chức năng rất hay của 89C51. Khi có một tín hiệu từ một nguồn ngắt nào thì chương trình sẽ tạm ngưng lệnh hiện thời để chuyển sang chương trình phục vụ ngắt. Sau khi thực hiện xong, VXL tiếp tục thực hiện chương trình đang dở dang. Sử dụng thanh ghi IE để điều khiển việc ngắt. Ta có thể ngắt từ các nguồn ngắt khác nhau như: ngắt ngoài, ngắt Timer, ngắt bằng Port nối tiếp. Ngoài ra ta còn có thể xác định thứ tự ưu tiên ngắt thông qua thanh ghi IP.
IP
-
-
-
PS
PT1
PX1
PT0
PX0
Serial Port : Đây là cổng I/O nối tiếp hoạt động với nhiều chế độ khác nhau. Chức năng chính là chuyển đổi song song sang nối tiếp cho dữ liệu xuất ra, và chuyển từ nối tiếp sang song song cho dữ liệu nhập vào. Để nhận và phát ký tự, trên chip có một thanh ghi phục vụ là thanh ghi SBUF, và thanh ghi điều khiển việc truyền nhận là SCON. Cổng nối tiếp có thể hoạt động ở 4 chế độ :
Thanh ghi dịch 8 bit
UART 8 bit, tốc độ baud thay đổi được.
UART 9 bit, tốc độ baud cố định.
UART 9 bit , tốc độ baud thay đổi được.
Thanh ghi trong AT89C51
Bảng 2: Thanh ghi trong 8051
Tập lệnh AT89C51
Bảng 3: Các tập lệnh AT89C51
TẬP LỆNH CỦA 8051 CHIA THÀNH 5 NHÓM CHÍNH:
Các lệnh số học
Các lệnh logic
Các lệnh chuyển dữ liệu
Các lệnh x ử lý bit
Các lệnh rẽ nhánh
CHI TIẾT:
Các lệnh số học.
Gồm các lệnh Cộng (ADD), Trừ (SUBB), Nhân (MUL), Chia (DIV), tăng (INC) hoặc giảm (DEC) thanh ghi ACC, …
Bảng 4: Các lệnh số học
Các lệnh logic
Gồm các lệnh liên quan đến logic như AND (ANL), OR (OR), XOR (XRL) hai toán hạng với nhau. Ngoài ra nhóm lệnh này có thêm các lệnh Xóa (CLR), lấy bù bit (đảo bit) (CPL), quay trái (RL), quay phải (RR), …
Bảng 5: Các lệnh logic
Các lệnh chuyển dữ liệu.
Gồm các lệnh di chuyển nội dung toán hạng (MOV), hay di chuyển bộ nhớ dữ liệu (MOVX), các lệnh cất dữ liệu vào (PUSH) và lấy dữ liệu ra (POP) khỏi vùng STA.
Bảng 6: Các lệnh chuyển dữ liệu
Các lệnh xử lí bit
Gồm các lệnh xóa (CLR), set bit (SETB), lấy đảo bit (CPL), di chuyển bit (MOV), lệnh nhảy bit nếu bằng 1 (JB) hoặc bằng 0 (JNB), …
Bảng 7: Các lệnh xử lí bit
Các lệnh rẽ nhánh
Bao gồm các lệnh gọi chương trình con (ACALL, CALL, LCALL), quay về chương trình con (RET), quay về chương trình ngắt (RETI), các lệnh nhảy đến thực thi một chương trình (SJMP, LJMP, AJMP), lệnh so sánh nhảy (CJNE), giảm và nhảy nếu khác 0.
Bảng 8: Các lệnh rẽ nhánh
Giới thiệu về IC DS1307
TỔNG QUAN VỀ
IC
DS 1307
2.1 Giới thiệu chung DS 1307
IC thời gian thực là họ vi điều khiển của hãng DALASS. IC DS 1307 có một số đặc trưng cơ bản như sau:
DS 1307 là IC thời gian thực với nguồn cung cấp nhỏ dung để cập nhập thời gian và ngày tháng.
SRAM 56 bytes.
Địa chỉ và dữ liệu được truyền nối tiếp qua 2 đường bus 2 chiều.
DS 1307 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 cung cấp là 3V:
DS 1307 có 7 byte dữ liệu nằm từ địa chỉ 0x00 tới 0x06, 1 byte điều khiển, và 56 byte lưu trữ (dành cho người sử dụng).
Khi xử lí dữ liệu từ DS 1307, họ đã tự chuyển cho ta về dạng số BCD, ví dụ như ta đọc được dữ liệu từ 0x04 (tương ứng với DAY - ngày trong tháng ) và tại 0x05 (tháng) là 0x15 và 0x11.
Lưu ý đến vai trò của chân SQW/OUT. Đây là chân xung ra của DS 1307 có đến 4 chế độ 1Hz, 4.096HZ, 8.192Hz, 32.768Hz… các chế độ này đuợc quy định bởi các bít của thanh ghi Control Register ( địa chỉ 0x07 ).
Địa chỉ của DS1307 là 0xD0.
Cơ chế hoạt động: DS1307 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.2 Cơ chế hoạt động của DS1307.
Hình 6: Cơ chế hoạt động của DS1307
Vcc: nối với nguồn.X1, X2: nối với thạch anh 32,768 kHz.Vbat: đầu vào pin 3V.GND: đất.SDA: chuỗi data.SCL: dãy xung clock.SQW/OUT: xung vuông/đầu ra driver.
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 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.
Sơ đồ khối DS1307.
Hình 7: Sơ đồ khối DS1307
Mô tả hoạt động của các chân:
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 5V đượ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,5V đến 3V để đảm bảo cho sự hoạt động của thiết bị.
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.
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.
SQW/OUT(square wave/output driver)- khi được kích hoạt thì bit SQWE được thiết lập 1 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.
X1, X2: được nối với một thạch anh tần số 32,768kHz. Là một mạch tạo dao động ngoài, để hoạt động ổn định thì phải nối thêm 2 tụ 33pF.
Cũng có DS1307 với bộ tạo dao động trong tần số 32,768kHz, với cấu hình này thì chân X1 sẽ được nối vào tín hiệu dao động trong còn chân X2 thì để hở.
2.3 Sơ đồ địa chỉ RAM và RTC.
Hình 8: Địa chỉ RAM và RTC
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ú ý: enable dao động trong suốt quá trình cấu hình thiết lập (CH=0). Thanh ghi
Thời gian thực được mô tả như sau:
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 hay 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à PM. Ở chế độ 24h thì bit 5 là bit chỉ 20h ( từ 20h đến 23h).
Trong quá trình truy cập dữ liệu, khi chỉ thị START được thực thi thì dòng thời gian được truyền tới thanh ghi thứ 2, thông tin thời gian sẽ được đọc từ thanh ghi cấp này, trong khi đó đồng hồ vẫn chạy. 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 ( out put control ) : bit này điều khiển mức ra của chân SQW/OUT khi đầu ra xung vuông là disable. Nếu SQWE= 0 thì mức logic chân SQW/OUT sẽ là 1 nếu OUT=1 và OUT=0 nếu OUT=0.
SQWE : bit này được thiết lập 1 sẽ enable đầu ra của bộ tạo dao động. Tần số đầu ra sóng vuông phụ thuộc vào giá trị của RS1 và RS0.
Hình 9: Tần số sóng vuông ở chân SQWE
DS1307 hỗ trợ bus 2 dây 2 chiều và giao thức truyền dữ liệu. Thiết bị gửi dữ liệu lên bus được gọi là bộ phát và thiết bị nhận gọi là bộ thu. Thiết bị điều khiển quá trình này gọi là master. Thiết bị nhận sự điều khiển của master gọi là slave. Các bus nhận sự điều khiển của master, là thiết bị phát ra chuỗi xung clock (SCL), master sẽ điều khiển sự truy cập bus, tạo ra các chỉ thị START và STOP.
2.4 Sự truyền dẫn dữ liệu trên chuỗi 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 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.5 DS 1307 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.
Hình 10: Chế độ ghi dữ liệu lên DS1307
Hì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.
Hình 11: Chế độ đọc dữ liệu từ DS1307
Giới thiệu về LED 7 đoạn
TỔNG QUAN
VỀ
LED 7 ĐOẠN
3.1 Hình ảnh Led 7 đoạn.
Hình11: Các hình ảnh thực tế về Led 7 đoạn
Trong các thiết bị, để báo trạng thái hoạt động của thiết bị đó cho người sử dụng với thông số chỉ là các dãy số đơn thuần, thường người ta sử dụng "Led 7 đoạn". Led 7 đoạn được sử dụng khi các dãy số không đòi hỏi quá phức tạp, chỉ cần hiện thị số là đủ, chẳng hạn led 7 đoạn được dùng để hiển thị nhiệt độ phòng, trong các đồng hồ treo tường bằng điện tử, hiển thị số lượng sản phẩm được kiểm tra sau một công đoạn nào đó...
Led 7 đoạn có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo hình và có thêm. Một led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới, bên phải của led 7 đoạn. 8 led đơn trên led 7 đoạn có Anode (cực +) hoặc Cathode (cực -) được nối chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện. 8 cực còn lại trên mỗi led đơn được đưa thành 8 chân riêng, cũng được đưa ra ngoài để kết nối với mạch điện. Nếu led 7 đoạn có Anode (cực +) chung, đầu chung này được nối với +Vcc, các chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0. Nếu led 7 đoạn có Cathode (cực -) chung, đầu chung này được nối xuống Ground (hay Mass), các chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 1.
Vì led 7 đoạn chứa bên trong nó các led đơn, do đó khi kết nối cần đảm bảo dòng qua mỗi led đơn trong khoảng 10mA-20mA để bảo vệ led. Nếu kết nối với nguồn 5V có thể hạn dòng bằng điện trở 330Ω trước các chân nhận tín hiệu điều khiển.
3.2 Cấu trúc và bảng mã hiển thị dữ liệu trên Led 7 đoạn.
Hình 12: Hình dạng của Led 7 đoạn
Led anode chung :
Hình 12: Led anode chung
Đối với dạng Led anode chung, chân COM phải có mức logic 1 và muốn sáng Led thì tương ứng các chân a- f , dp phải ở mức 0.
Số
a
b
c
d
e
f
g
dp
Mã hex
0
1
2
3
4
5
6
7
8
9
Bảng : Bảng mã cho Led anode chung (a là MSB, dp là LSB)
Bảng 9: Bảng mã cho Led anode chung (a là LSB, dp là MSB)
Led cathode chung:
Hình 13: Led Cathode chung
Đối với dạng Led cathode chung , chân COM phải có mức logic 0 và muốn sáng Led thì tương ứng các chân a-f, dp phải ở mức logic 1.
Bảng 10: Bảng mã cho Led Cathode chung ( a là MSB, dp là LSB)
Bảng 11: Bảng mã cho Cathode chung ( a là LSB, dp là MSB)
Giới thiệu IC 74HC138.
GIỚI THIỆU
IC
74HC138
4.1 Sơ đồ chân của IC 74HC138:
Hình 14: Sơ đồ chân IC 74HC138
IC 74HC138 là bộ giả mã địa chỉ với 3 đầu vào (A0, A1, A2) và 8 đầu ra phủ định (Y0 đến Y7 ). Nó có 3 đầu vào cho phép: 2 đầu vào tích cực thấp (1E, 2E) và một đầu vào tích cực mức cao (E3). Tất cả các đầu ra của 74HC138 sẽ ở mức cao trừ khi E1 ở mức thấp và E3 ở mức cao. Khi các đầu vào 1E, 2E ở mức thấp và E3 ở mức cao thì đầu ra của 74HC138 sẽ được quyết định bởi đầu vào.
4.2 Chức năng của IC 74HC138.
Bảng 12: Bảng chức năng của IC 74HC138
H: mức cao – L: mức thấp – X : không làm việc
Các đặc điểm của IC74HC138.
+ Số drive đầu ra: 10 LSTTL Loads.
+ Các giao diện đầu ra tới CMOS, NMOS and TTL.
+ Dải điện áp hoạt động : 2.0V → 6.0 V.
+ Dòng điện vào thấp: 1.0 µA .
+ Khả năng loại trừ tạp âm cao trong CMOS Devices.
+ Phù hợp với những yêu cầu đã được định nghĩa bởi JEDEC theo chuẩn 7A.
+ Đặc trưng ESD : HBM >2000V- machine Model > 200V.
+ Độ phức tạp của chip: 100 FETs or 29 cổng tương đương.
+ Những thiết bị sự dụng miễn phí.
CHƯƠNG III : THIẾT KẾ VÀ THI CÔNG PHẦN CỨNG
THIẾT KẾ
VÀ
THI CÔNG MẠCH
SƠ ĐỒ NGUYÊN LÍ
SƠ ĐỒ
NGUYÊN LÍ
1.1 Sơ đồ mạch điều khiển.
Hình 15: Mạch điều khiển thiết kế trên Protues 7.6
1.2 Sơ đồ mạch hiển thị
Hình 16: Mạch hiển thị thiết kế trên Protues 7.6
1.3 Sơ đồ mạch nguồn
Hình 17: Sơ đồ mạch nguồn
1.4 Mạch mô phỏng trên phần mềm Protues.
Hình 18: Mạch mô phỏng trên Protues 7.6
1.5 Mạch in được thiết kế trên Or cad 9.2
Hình 19: Sơ đồ mạch in
CHƯƠNG IV : LẬP TRÌNH ĐIỀU KHIỂN
LẬP TRÌNH
ĐIỀU KHIỂN
1. Lưu đồ giải thuật
Lưu đồ giải thuật cho chương trình chính :
Hình 20: Lưu đồ giải thuật cho chương trình chính
Lưu đồ giải thuật quét nút nhấn.
Hình 21: Lưu đồ giải thuật quét nút nhấn
2. Code chương trình
Chương trình điều khiển
#include
#include
//==========================================
//Cac chan dieu khien
#define led_port P0
#define ic_counter P2
#define reg_sec 0x0
#define reg_min 0x1
#define reg_hour 0x2
#define reg_day 0x3
#define reg_date 0x4
#define reg_month 0x5
#define reg_year 0x6
sbit scl = P1^0;
sbit sda = P1^1;
sbit ic_time = P2^4;
sbit ic_date = P2^5;
sbit menu = P3^0;
sbit plus = P3^1;
sbit minus = P3^2;
sbit al_cancel = P3^3;
//==========================================
//Cac bien toan cuc dung trong chuong trinh
unsigned char led_code[13]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xfe,0x00};
unsigned char led_buffer[13];
unsigned char scan_led,counter,var_menu;
unsigned char sec,min,hour,day,date,month,year;
bit var_arlam;
//Quet led 7 doan dung timer 0
//Tan so quet khoang 25Hz moi led sang khoang 1000/(25*13)=3ms
void khoi_tao_timer0(void)
{
EA=0;//cam ngat toan cuc
TMOD=0x2;//timer0 che do 8 bit tu dong nap lai
TL0=0x6;//Gia tri bat dau dem = 6 (tre 250us)
TH0=0x6;//gia tri TH dc nap vao TL (che do 8 bit)
ET0=1;//cho phep ngat timer0
EA=1;//cho phep ngat toan cuc
TR0=1;//Bat dau chay timer0
}
//quet 13 LED Sau 12 lan Timer0 ngat thi thay doi cac led sang
void quet_led(void)interrupt 2 //dia chi vecto ngat timer0
{
counter++;
if(counter==12)//sau 12x250us=3ms thi thay doi hien thi led
{
if(scan_led0 khong co led nao duoc hien thi
{
ic_counter=scan_led;//hien thi cac led o hang 1 (gio, phut,giay,thu)
//chan enb cua IC_COUNTER =>0 khong co led nao duoc hien thi
ic_time=1;//hien thi gio phut giay
}else
{
ic_counter=scan_led-7;// hien thi led hang 2 (ngay thang nam)(tru di so led da hien thi o hang 1)
ic_date=1;//hien thi ngay thang nam
} // ic_counter=scan_led-0x7+0xf0 led thu 7 la led thu 0 cua hang 2
led_port=led_code[(led_buffer[scan_led])];
scan_led++;
if(scan_led>=13) //vuot qua 13 led thi tro ve ban dau
{
scan_led=0;
}
}
if(counter>=13)
{
counter=0;//dem lai tu dau
}
}
//-----------***************Chuyen doi tu DEC sang BCD************-----------------
unsigned char dec_2_bcd(unsigned char value1)//chuyen doi tu he decima sang BCD
{
return ((value1/10)*16+value1%10); //deo' hieu tai sao lai khac (value1/10)<<4+value1%10
}
//----------**************Chuyen doi tu BCD sang DEC**********---------------------
unsigned char bcd_2_dec(unsigned char value2)//chuyen doi tu he BCD sang DECIMA
{
return ((value2/16)*10+value2%16);
}
//--------***********tao thoi gian tre dung lenh _nop_();**********-------------
void delay(int time_delay)
{
unsigned int temp;
for(temp=0;temp<=time_delay;temp++)
{
_nop_();
}
}
void delay_2(int time_delay)
{
unsigned int temp,i;
for(i=0;i<time_delay;i++)
{
for(temp=0;temp<1000;temp++)
{
_nop_();
}
}
}
//------******Khoi dong I2C******---------
void i2c_start(void)
{
scl=1;
sda=1;
_nop_();
_nop_();
sda=0;
scl=0;
}
//-----******Ket thuc I2C*******---------
void i2c_stop(void)
{
sda=0;
scl=1;
_nop_();
_nop_();
sda=1;
scl=0;
}
//-------*******Gui du lieu len duong I2C******------
void write_i2c(unsigned char data_2_send)
{
unsigned char temp;
for(temp=0;temp<8;temp++)
{
sda=(data_2_send&0x80)? 1:0; //dua bit du lieu ra chan SDA
scl=1; //
_nop_();
_nop_(); //
scl=0;
data_2_send<<=1; //bit co trong so lon hon dc truyen truoc
}
scl=1; //nhan bit ACK tu SLAVER
_nop_();
_nop_();
scl=0;
}
//------------**********Doc di lieu tren duong I2C******---------
unsigned char read_i2c(void)
{
unsigned char temp,i;
for(i=0;i<8;i++) // nhan vao 8 bit
{
scl=1;
temp<<=1;
temp=temp|sda;
scl=0;
}
sda=1;//gui bit ACK
scl=1;//master nhan/gui bit du lieu(sda) khi scl o muc cao
_nop_();
_nop_();
scl=0;//du lieu(sda) thay doi khi scl muc thap*/
return temp;//tra gia tri cho ham
}
//------*****Ghi du lieu len RTC qua duong I2C*****----------
void write_rtc(char value,addr)
{
i2c_start();//start i2c
write_i2c(0xd0);//0xd0 la ID cua DS1307
write_i2c(addr);
write_i2c(value);
i2c_stop();
}
//---------********Doc du lieu tu RTC qua duong I2C*****--------
char read_rtc(char addr)
{
unsigned char temp;
i2c_start();
write_i2c(0xd0);//
write_i2c(addr); //bat dau doc du lieu tu thanh ghi co dia chi 0x0
i2c_start();
write_i2c(0xd1); //0xd0 + 0x01 la ID cua ds107 va che do doc du lieu
temp=read_i2c();//con tro dang tro toi dia chi 0x0 chua du lieu second
i2c_stop();//Stop I2C
return temp;
}
//-----------***********Lay du lieu thoi gian tu cac thanh ghi trong RTC*******---------
void get_time()
{
sec=read_rtc(reg_sec);
min=read_rtc(reg_min);
hour=read_rtc(reg_hour);
day=read_rtc(reg_day);
date=read_rtc(reg_date);
month=read_rtc(reg_month);
year=read_rtc(reg_year);
}
///////---------------***********Ghi du lieu va bo dem****-----------
void write_led_buffer(void)
{
unsigned char temp;
led_buffer[0]=(day&0x7);
//*******Hien thi gio*************
if((temp=(hour&0x30)>>4)==0)//khong hien thi so 0 o hang chuc
{
led_buffer[1]=0x0a;
}else
{
led_buffer[1]=temp;//Lay 2 bit cao
}
led_buffer[2]=(hour&0x0f); //Lay 4 bit thap
//*******Hien thi phut**********
led_buffer[3]=(min&0x70)>>4; //lay 3 bit cao
led_buffer[4]=min&0x0f; //Lay 4 bit thap
//*******Hien thi giay*********
led_buffer[5]=(sec&0x70)>>4;
led_buffer[6]=sec&0x0f;
//*******Hien thi ngay**********
if((temp=(date&0x70)>>4)==0)//khong hien thi so 0 o hang chuc
{
led_buffer[7]=0x0a;
}else
{
led_buffer[7]=temp;
}
led_buffer[8]=date&0x0f;
//*********Hien thi thang************
if(((month&0x30)>>4)==0)//khong hien thi so 0 o hang chuc
{
led_buffer[9]=0x0a;
}else
{
led_buffer[9]=(month&0x30)>>4;
}
led_buffer[10]=month&0x0f;
//******Hien thi nam***********
led_buffer[11]=(year&0x70)>>4;
led_buffer[12]=year&0x0f;}
//-----------------**********Cai dat che do cho RTC****------------------
void setup_rtc(void)
{
unsigned char temp;
/*i2c_start();
write_i2c(0xd0);//che do ghi du lieu vao RTC
write_i2c(0x08);//thanh ghi control
write_i2c(0x10);//xung ra 1Hz muc thap khi khong dc kich hoat
i2c_stop();*/
write_rtc(0x10,0x07);
temp=read_rtc(0x02);
write_rtc(0x02,temp&0x7f);
}
//-----------------**************Do phim**********----------------------
void do_phim(void)
{
if(menu==0)//phim menu duoc an
{
delay_2(50);
if(var_arlam==0)//Neu khong thuc hien chuc nang hen gio
{
if(var_menu<=7)
{
var_menu++; //thuc hien menu tiep
}else
{
var_menu=1;//quay tro ve menu dau tien
}
}else
{
var_arlam=0;//hen gio xong
}
delay_2(50);
}
if(al_cancel==0)
{
var_menu=0;
var_arlam=1;
delay(10000);
}
}
//-----------******Chinh Giay********---------
void menu1(void)
{
if((plus==0)||(minus==0))
{
write_rtc(0x0,reg_sec); //Reset GIAY
delay_2(50);
}
}
//----------*********Chinh PHUT*********------------
void menu2(void)
{
unsigned char temp;
temp=bcd_2_dec(min);
if(plus==0)
{
if(temp<59)
{
temp++;
}else
{
temp=0;
}
write_rtc(dec_2_bcd(temp),reg_min);
delay_2(50);
}
if(minus==0)
{
if(temp>0)
{
temp--;
}else
{
temp=59;
}
write_rtc(dec_2_bcd(temp),reg_min);
delay_2(50);
}
}
//----------*********Chinh gio***********------------
void menu3(void)
{
unsigned char temp;
temp=bcd_2_dec(hour);
if(plus==0)
{
if(temp>=23)
{
temp=0;
}else
{
temp++;
}
write_rtc(dec_2_bcd(temp),reg_hour);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
if(minus==0)
{
if(temp<=0)
{
temp=23;
}else
{
temp--;
}
write_rtc(dec_2_bcd(temp),reg_hour);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
}
//----------------********Chinh Ngay Trong Tuan*******----------------------
void menu4(void)
{
unsigned char temp;
temp=bcd_2_dec(day);
if(plus==0)
{
if(temp>=7)
{
temp=1;
}else
{
temp++;
}
write_rtc(dec_2_bcd(temp),reg_day);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
if(minus==0)
{
if(temp<=1)
{
temp=7;
}else
{
temp--;
}
write_rtc(dec_2_bcd(temp),reg_day);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
}
//-----------********Chinh Ngay********----------------
void menu5()
{
unsigned char temp,temp1,temp2;
temp=bcd_2_dec(date);
temp1=bcd_2_dec(month);
temp2=bcd_2_dec(year);
if(plus==0) //******An PLUS***----
{
if((temp1==4)||(temp1==6)||(temp1==9)||(temp1==11))//Cac thang co 30 ngay
{
if(temp>=30)
{
temp=1;
}
}else
{
if(temp1==2)//thang 2
{
if(temp2%4==0)//nam nhuan
{
if(temp>=29)
{
temp=1;
}else
{
temp++;
}
}else //nam thuong
{
if(temp>=28)
{
temp=1;
}else
{
temp++;
}
}
}else //cac thang co 31 ngay
{
if(temp>=31)
{
temp=1;
}else
{
temp++;
}
}
}
write_rtc(dec_2_bcd(temp),reg_date);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
if(minus==0) //-********AN MINUS****--------
{
if(temp>2)
{
temp--;
}else
{
if((temp1==4)||(temp1==6)||(temp1==9)||(temp1==11))//Cac thang co 30 ngay
{
temp=30;
}else
{
if(temp1==2)//thang 2
{
if(temp2%4==0)//nam nhuan
{
temp=29;
}else //nam thuong
{
temp=28;
}
}else //cac thang co 31 ngay
{
temp=31;
}
}
}
write_rtc(dec_2_bcd(temp),reg_date);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
}
void menu6(void)//-------*********Chinh Thang-*******---------
{
unsigned char temp;
temp=bcd_2_dec(month);
if(plus==0)
{
if(temp>=12)
{
temp=1;
}else
{
temp++;
}
write_rtc(dec_2_bcd(temp),reg_month);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
if(minus==0)
{
if(temp==0)
{
temp=12;
}else
{
temp--;
}
write_rtc(dec_2_bcd(temp),reg_month);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
}
//---------**********Chinh Nam**********--------------
void menu7(void)//-------*********Chinh Thang-*******---------
{ unsigned char temp;
temp=bcd_2_dec(year);
if(plus==0)
{
if(temp>=50)//Chinh thoi gian tu nam 2011 den Nam 2050
{
temp=11;
}else
{
temp++;
}
write_rtc(dec_2_bcd(temp),reg_year);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
if(minus==0)
{
if(temp<=11)
{
temp=50;
}else
{
temp--;
}
write_rtc(dec_2_bcd(temp),reg_year);//ghi du lieu BCD vao thanh ghi GiO cua RTC
delay_2(50);
}
}
//-----------***********Thuc Hien MENU*********---------------
void xu_ly_menu(void)
{
while(var_menu!=0)
{
get_time();
write_led_buffer();
switch(var_menu)
{
case 1:
menu1();
break;
case 2:
menu2();
break;
case 3:
menu3();
break;
case 4:
menu4();
break;
case 5:
menu5();
break;
case 6:
menu6();
break;
case 7:
menu7();
break;
}
do_phim();
}
}
//-------********Dua du lieu ra bo nho dem LED******---------
void led_check()
{
unsigned char run,i,temp;
temp=0xfe;
for(i=0;i<=12;i++)
{
led_buffer[i]=0x0b;
}
while(run<=50)
{
delay_2(10);
led_code[0x0b]<<=1;
led_code[0x0b]++;
if(led_code[0x0b]==0xff)
{
led_code[0x0b]=0xfe;
}
run++;
}
for(i=0;i<=12;i++)
{
led_buffer[i]=0x0a;
}
led_buffer[0]=0x0c;
delay_2(10);
for(i=1;i<=12;i++)
{
led_buffer[i-1]=0x0a;
led_buffer[i]=0x0c;
delay_2(10);
}
led_buffer[12]=0x0c;
delay_2(10);
for(i=12;i>0;i--) {
led_buffer[i-1]=0x0c;
led_buffer[i]=0x0a;
delay_2(10);
}
for(i=0;i<=12;i++)
{
led_buffer[i]=0x0c;
delay_2(10);
}
for(i=0;i<=10;i++)
{
delay_2(10);
}
}
void start_system()
{
var_menu=0;
var_arlam=0;
led_check();
}
//---------------**************Chuong trinh chinh**********----------------------
void main(void)
{
khoi_tao_timer0();
start_system();
setup_rtc();
while(1)
{
get_time();
write_led_buffer();
do_phim();
xu_ly_menu();
}
}
//-----------------**************Ket thuc chuong trinh********--------------------
CHƯƠNG V : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
KẾT LUẬN
VÀ
HƯỚNG PHÁT TRIỂN
Kết luận :
Phần cứng đã thiết kế hoàn chỉnh. Mạch hoạt động tốt cho thời gian chạy chính xác không có sai số. Tuy vậy mạch vẫn còn hạn chế về kích thước và hình thức, chương trình vẫn còn khá dài chưa được cụ thể.
Hướng phát triển:
Trong tương lai, em sẻ tìm hiểu kỉ hơn và mở rộng chuyên đề kết hợp với mạch “Đo Nhiệt Độ và Độ Ẩm“ để tạo ra mạch tương tự “Lịch Vạn Niên“đang bán trên thị trường. Đồng thời em sẽ nghiên cứu cho chương trình ngắn hơn để đạt được hiểu quả cao hơn, chính xác hơn tạo ra cảnh báo trong một khoảng thời gian khi đến thời gian đã hẹn hay cứ đúng mỗi giờ, nếu có thể thì giao tiếp với máy tính bằng VB.
Định hướng phát triển cho các phiên bản sau này.
- Kết hợp với cảm biến nhiệt độ để đo nhiệt độ ngoài trời
- Thay đổi phương pháp hiển thị sao cho đẹp và có thẩm mỹ hơn (sử dụng ma trận LED).
- Dựa vào ngày tháng năm dương lịch để tính toán ngày tháng năm âm lịch và hiển thị.
- Trang bị thêm chức năng hẹn giờ.
- Hạ giá thành sản phẩm (sử dụng vi điều khiển PIC rẻ hơn).
Tài liệu tham khảo
James W. Dally – William F. Riley – Kenneth G.McConnell ( 1984 ). Instrumentation for engineering measurements. John Wiley & Sons, Inc. 399 – 447.
Hướng dẫn thí nghiệm Vi Xử Lí ĐH Bách Khoa TP. Hồ Chí Minh.
Các luận văn khóa trước.
Một số tài liệu trên Internet:
Các file đính kèm theo tài liệu này:
- Thiết Kế và Thi Công đồng hồ số dùng At89C51 và DS 1307.doc