Đề tài Mạch đồng hồ hiển thị trên LCD

void kiemtra_rtc(void) { unsigned char temp; start_rtc(); gui_rtc(0xd0); gui_rtc(0x08); //doc du lieu tu vi tri ram dau tien start_rtc(); gui_rtc(0xd1); temp=nhan_rtc() ; //con tro dang tro toi dia chi 0x08 chua du lieu flag (co?`) xem da cai dat hay chua stop_rtc(); if(temp!='c') // neu gia tri thu 8 nhan duoc khac voi co 'c' cap nhat khi cai dat gio thi tuc la lan dau duoc khoi tao, ta se chon gia tri ghi vao ban dau theo y minh { giatrikhoitao_rtc[0]=0x50; giatrikhoitao_rtc[1]=0x59; giatrikhoitao_rtc[2]=0x09; giatrikhoitao_rtc[3]=0x04; giatrikhoitao_rtc[4]=0x04; giatrikhoitao_rtc[5]=0x05; giatrikhoitao_rtc[6]=0x11; giatrikhoitao_rtc[7]=0x00; giatrikhoitao_rtc[8]='c'; ghidulieu();} }

docx38 trang | Chia sẻ: lylyngoc | Lượt xem: 11407 | Lượt tải: 3download
Bạn đang xem trước 20 trang tài liệu Đề tài Mạch đồng hồ hiển thị trên LCD, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
MỤC LỤC DANH MỤC HÌNH ẢNH Hình 2.1. Sơ đồ chân 89c51 10 Hình 2.2. IC thời gian thực DS1307 14 Hình 2.3. LCD 16x2 16 Hình 2.3. Thạch anh 19 Hình 3.1. Sơ đồ nguyên lý 20 Hình 3.2.Mạch vẽ trên orcad 21 Hình 3.3. Mạch mô phỏng 35 Hình 3.4. Mạch thực tế 35 DANH MỤC BẢNG BIỂU Bảng 2.1. Chức năng port 3 11 Bảng 2.2. Chức năng các chân LCD 17 LỜI MỞ ĐẦU Ngày nay, các thiết bị điện tử trở nên phổ biến và đóng vai trò quan trọng trong đời sống con người. Ví dụ quanh ta có rất nhiều sản phẩm nhúng như lò vi sóng, nồi cơm điện, điều hòa, điện thoại di động, ô tô, máy bay, tàu thủy, các đầu đo, cơ cấu chấp hành thông minh, robot v.v... ta có thể thấy hiện nay thiết bị điện tử có mặt ở mọi lúc mọi nơi trong cuộc sống của chúng ta. Qua những môn học đã được học tai trường giúp em hiểu nhiều hơn về những thiết bị điện tử mà em đã được tiếp xúc nhưng không biết cấu tạo và làm gì để tạo ra chúng, nhưng thông qua việc bắt tay vào làm Đồ án chuyên ngành , tìm hiểu và thực hiện đề tài “Mạch đồng hồ hiển thị trên LCD”, đã giúp em hiểu kĩ hơn những gì mình đã được học và nâng cao hiểu biết của bản than. Do thời gian thực hiện và kiến thức còn hạn chế nên còn nhiều sai sót trong quá trình thực hiện đề tài, rất mong được sự bổ sung đóng góp của các thầy cô và các bạn. Em xin chân thành cảm ơn các thầy cô trong khoa Điện tử - Viễn thông ,cảm ơn thầy Dương Tấn Quốc đã tận tình hướng dẫn và giúp đỡ chúng em thực hoàn thành đề tài này. Trân trọng và chân thành cám ơn! Sinh viên thực hiện Nguyễn Văn Ngọ CHƯƠNG 1 . PHÂN TÍCH BÀI TOÁN 1.1.KHẢO SÁT VÀ PHÂN TÍCH BÀI TOÁN Đồng hồ là một công cụ để đo đạc những mốc thời gian nhỏ hơn một ngày; đối lập với lịch, là một công cụ để đo thời gian dài hơn một ngày. Những loại đồng hồ dùng trong kĩ thuật thường có độ chính xác rất cao và cấu tạo rất phức tạp. Trong khi đó, người ta có thể tạo ra những loại đồng hồ nhỏ để dễ dàng mang theo bên mình . Những loại đồng hồ hiện đại (từ thế kỉ 14 trở đi) thường thể hiện ba thông tin: giờ, phút, giây. 1.1.1.Cách hiển thị thời gian Đồng hồ cơ: Đồng hồ cơ thể hiện thời gian sử dụng các góc. Mặt đồng hồ có những con số từ 1 đến 12 và sử dụng kim để chỉ giờ và cả phút. Từ một số đến một con số kế cận là 5 phút (đối với kim phút), 1 giờ (đối với kim giờ) hay 5 giây (đối với kim giây). Đồng hồ điện tử: Đồng hồ điện tử sử dụng hệ thống số để thể hiện thời gian. Thông thường có 2 cách thể hiện: 24 giờ để đếm giờ từ 00-23 12 giờ với kí hiệu AM / PM (chủ yếu ở Mĩ) 1.1.2.Mục đích Đồng hồ treo tường được dùng trong nhà và văn phòng, đồng hồ đeo tay được mang trên tay, và những loại đồng hồ lớn được đặt ở những nơi công cộng (nhà thờ hay bến xe). Hầu hết những máy tính và điện thoại di động đều có góc dưới màn hình hiển thị giờ. 1.1.3.Các loại chip ứng dụng trong thiết kế thời gian thực Do yêu cầu về thời gian thực nên chúng ta sẽ không xét tới các mạch điện thiết kế đồng hồ sử dụng các mạch điện tương tự và các IC số thông thường, chúng ta sẽ xét tới việc sử dụng IC thời gian thực, vi điều khiển, cách thức hiển thị thời gian thực. IC thời gian thực: Hiện nay trên thị trường có 2 loại IC thời gian thực phồ biến là DS1307 và DS12887. Các IC này đều có chức năng chạy thời gian thực và lưu giờ khi mất điện, với DS1307 cần có thêm nguồn nuôi là một pin cmos 3V, với DS12887 có sẵn pin tích hợp ở bên trong. Thực hiện giao tiếp với vi điều khiển để hiện thị thời gian và cài đặt giờ… Trên cơ sở đó thì chúng ta có thể sử dụng cả 2 loại IC này, nhưng với nhóm em thì việc lựa chọn sẽ là DS1307 vì nó cũng thực hiện được yêu cầu mà giá thành thì rẻ hơn. Vi điều khiển: Có rất nhiều loại vi điều khiển khác nhau có thể sử dụng trong mạch đồng hồ này như vi điều khiển pic, avr, 8051… Các loại vi điều khiển pic hay avr có nhiều ưu điểm hơn so với 8051 như hỗ trợ kết nối ngoại vi tốt hơn, tốc độ xử lý nhanh hơn, lập trình đơn giản hơn. Nhưng giá thành thì lại cao hơn nhiều so với 8051 mà trong mạch này chúng em sử dụng AT89C51. Việc sử dụng quá tốn kém cho 1 mạch là không cần thiết trong khi đó một chip cũng có thể làm được điều này mà giá thành rẻ hơn thì đó là lựa chọn tối ưu hơn. Hiển thị: Chúng ta có 2 cách hiển thị đó là : sử dụng led 7 thanh và sử dụng lcd. Led 7 thanh : Ưu điểm: hiển thị rõ ràng và thu hút được sự chú ý vì có thể nhìn ở xa. Nhược điểm: mạch điện phức tạp cần thêm các IC chốt. LCD 16x2: Ưu điểm: hiển thị dễ dàng, có thể linh động hơn trong việc hiển thị thời gian,kết nối đơn giản mạch điện không phức tạp… Nhược điểm: không thu hút được sự chú ý bằng led 7 thanh,giá thành cao… 1.2. LỰA CHỌN GIẢI PHÁP 1.2.1.Giải pháp công nghệ Qua phân tích ở trên, nhóm chúng em đưa ra giải pháp xây dựng đồng hồ dựa trên IC thời gian thực. Đọc giờ từ IC thời gian thực, hiển thị thời gian liên tục và có thể cài đặt được giờ, lưu giờ khi mất điện và sai lệch thời gian là ít nhất (theo quảng cáo của nhà sản xuất : với một pin lithium 48mAh hoặc lớn hơn sẽ lưu giờ cho DS1307 khoảng hơn 10 năm khi không có nguồn điện cung cấp cho mạch ở điều kiện +25°C ). 1.2.2 .Giải pháp thiết kế Việc lựa chọn giải pháp thường được xem xét trên nhiều phương diện nhưng quan trọng là giải pháp có khả thi không? Có phù hợp với với thực tế và thỏa mãn yêu cầu về kinh tế? Đồng hồ thời gian thực với bộ não điều khiển là AT89C51 và các linh kiện khác: LCD hiển thị, IC ổn áp7805, IC thời gian thực DS1307. AT89C51 có các ưu điểm: tính năng và tốc độ đáp ứng được yêu cầu kĩ thuật trong ứng dụng không đòi hỏi cao;giá thành thấp hơn họ vi điều khiển khác; có hỗ trợ lập trình điều khiển bằng cả hợp ngữ và C... IC DS1307 là IC chuyên dụng, cho khả năng chính xác về thời gian. LCD hiển thị một cách rõ ràng, linh động. IC ổn áp 7805 được sử dụng rộng rãi trong các bộ nguồn. Vì vậy giải pháp thiết kế đồng hồ thời gian thực dùng các linh kiện trên có nhiều ưu thế hơn so với những giải pháp khác. Đồng thời đảm bảo được yêu cầu về kinh tế. 1.2.3.Các yêu cầu Với sản phẩm đồng hồ thời gian thực đòi hỏi các yêu cầu: Hiển thị đúng thời gian:ngày, tháng, năm, giờ, phút, giây. Điều chỉnh và thay đổi được thời gian. Đảm bảo đúng về thời gian sau khi mất điện. Khả năng thực thi:Thời gian đáp ứng, độ chính xác… Đảm bảo về kích thước và trọng lượng cho phép. Độ an toàn, khả năng chống lại sự phá hoại hay xâm nhập… 1.2.4.Giới hạn cho hệ thống Sử dụng nguồn điện 5V. Làm việc liên tục. Kích thước phù hợp với người sử dụng. Hệ thống nhỏ gọn. Hệ thống lưu được thời gian khi mất nguồn cấp (có nguồn dự trữ). Nguồn nuôi (pin CMOS) cho IC thời gian thực đảm bảo. Làm việc trong điều kiện môi trường bình thường. CHƯƠNG 2: THIẾT KẾ HỆ THỐNG 2.1. SƠ ĐỒ TỔNG QUÁT Khối Xử lý Khối giao tiếp phím bấm Khối hiển thị Khối thời gian thực Khối nguồn Khối Nguồn: cung cấp nguồn cho hệ thống. Khối Thời gian thực: lưu trữ thời gian thực, thời gian cài đặt. Khối Xử lý: Dùng vi điều khiển AT89C51 để lấy dữ liệu từ khối thời gian thực, lưu trữ và đưa ra khối hiển thị và nhận tín hiệu từ khối giao tiếp. Khối Hiển thị: lấy tín hiệu ra từ vi điều khiển, thực hiện giao tiếp với vi điều khiển để hiển thị giờ và ngày. Khối giao tiếp: là khối bàn phím, thực hiện cài đặt giờ để vi điều khiển lưu dữ liệu vào trong khối thời gian thực. 2.2. SƠ ĐỒ THUẬT TOÁN Bắt đầu Kiểm tra dữ liệu thời gian trong rtc Có Xử lý dữ liệu từ rtc Đặt thời gian mặc định S Đ Có ngắt ngoài 0 S Cài đặt + hiển thị thời gian cài đặt trên LCD Đ Cập nhật thời gian vào RTC Khởi tạo LCD (1) (2) Hiển thị giờ bình thường LCD 2.3.LỰA CHỌN LINH KIỆN 2.3.1.Vi điều khiển AT89C51 Đặc điểm và chức năng hoạt động của các IC họ MSC-51 hoàn toàn tương tự như nhau. Ở đây giới thiệu IC AT89C51 là một họ IC vi điều khiển do hãng Intel của Mỹ sản xuất. Chúng có các đặc điểm chung như sau: + 4K Bytes Flash rom. + 128 Bytes Ram. + 4 port 8 bit. + 2 bộ định thời 16 bit. + Có port nối tiếp. + Có thể mở rộng bộ nhớ chương trình ngoài 64 K Byte. + Bộ xử lý bit. 2.3.1.1. Mô tả các chân AT89C51 có tất cả 40 chân với các chức năng như sau: Hình 2.1. Sơ đồ chân 89c51 Vcc (40): Chân cung cấp điện (5V). GND (20): Chân nối đất (0V). Port 0 (32-39): Port 0 là port xuất nhập 8-bit hai chiều. Port 0 còn được cấu hình làm bus địa chỉ (byte thấp) và bus dữ liệu đa hợp trong khi truy xuất bộ nhớ dữ liệu ngoài và bộ nhớ chương trình ngoài. Port 1(1-8) : Port 1 là port xuất nhập 8-bit hai chiều. Port 1 cũng nhận byte địa chỉ thấp trong thời gian lập trình cho Flash. Port 2 (21-28): Port 2 là port xuất nhập 8-bit hai chiều. Port 2 tạo ra các byte cao của bus địa chỉ trong thời gian tìm nạp lệnh từ bộ nhớ chương trình ngoài và trong thời gian truy xuất bộ nhớ dữ liệu ngoài sử dụng các địa chỉ 16-bit. Port 3 (10-17) : Port 3 là Port xuất nhập 8-bit hai chiều. Port 3 cũng còn làm các chức năng khác của AT89C51. Các chức năng này được liệt kê như sau: Chân Tên Chức năng 3.0 RxD Ngõ vào Port nối tiếp 3.1 TxD Ngõ ra Port nối tiếp 3.2 Ngõ vào ngắt ngoài 0 3.3 Ngõ vào ngắt ngoài 1 3.4 T0 Ngõ vào bên ngoài của bộ định thời 1 3.5 T1 Ngõ vào bên ngoài của bộ định thời 0 3.6 Điều khiển ghi bộ nhớ dữ liệu ngoài 3.7 Điều khiển đọc bộ nhớ dữ liệu ngoài Bảng 2.1. Chức năng port 3 Port 3 cũng nhận một vài tín hiệu điều khiển cho việc lập trình Flash và kiểm tra chương trình. RST (9): Ngõ vào reset. Mức cao trên chân này trong 2 chu kỳ máy trong khi bộ dao động đang hoat động sẽ reset AT89C51. ALE/ (30): ALE là một xung ngõ ra để chốt byte thấp của địa chỉ trong khi truy xuất bộ nhớ ngoài. Chân này cũng làm ngõ vào xung lập trình () trong thời gian lập trình cho Flash. (29): (Program Store Enable) là xung điều khiển truy xuất bộ nhớ chương trình ngoài. Khi AT89C52 đang thực thi chương trình từ bộ nhớ chương trình ngoài, được kích hoạt hai lần mỗi chu kỳ máy, nhưng hai hoạt động sẽ bị bỏ qua mỗi khi truy cập bộ nhớ dữ liệu ngoài. /Vpp (31): (External Access Enable) là chân cho phép truy xuất bộ nhớ chương trình ngoài (bắt đầu từ địa chỉ từ 0000H đến FFFFH). = 0 cho phép truy xuất bộ nhớ chương trình ngoài, ngược lại =1 sẽ thực thi chương trình bên trong chip. Tuy nhiên, lưu ý rằng nếu bit khoá 1 (lock-bit 1) được lập trình, sẽ được chốt bên trong khi reset. XTAL1 và XTAL2: XTAL1 và XTAL2 là hai ngõ vào và ra của một bộ khuếch đại đảo của mạch dao động, được cấu hình để dùng như một bộ dao động trên chip. 2.3.1.2. Các chế độ đặc biệt 2.3.1.2.1.Chế độ nghỉ Trong chế độ nghỉ, CPU tự đi vào trạng thái ngủ trong khi tất cả các ngoại vi bên trong chip vẫn tích cực. Chế độ này được điều khiển bởi phần mềm. Nội dung của RAM trên chip và của tất cả các thanh ghi chức năng đặc biệt vẫn không đổi trong khi thời gian tồn tại chế độ này. Chế độ nghỉ có thể được kết thúc bởi một ngắt bất kỳ nào được phép hoặc bằng cách reset cứng. 2.3.1.2.2. Chế độ nguồn giảm Trong chế độ này, mạch dao động ngừng hoạt động và lệnh yêu cầu chế độ nguồn giảm là lệnh sau cùng được thực thi. RAM trên chip và các thanh ghi chức năng đặc biệt vẫn duy trì các giá trị của chúng cho đến khi chế độ nguồn giảm kết thúc. Chỉ có một cách ra khỏi chế độ nguồn giảm, đó là reset cứng. 2.3.1.3. Các bít khoá bộ nhớ chương trình Trên chip có ba bit khoá, các bít này có thể không cho phép lập trình hoặc cho phép lập trình, các bit này cho ta thêm một số đặc trưng nữa của AT89C51 như sau.Khi bit khoá 1 LB1 được lập trình, mức logic ở chân được lấy mẫu và được chốt trong khi reset. Các bit khóa chương trình Loại bảo vệ Chế độ LB1 LB2 LB3 1 U U U Không có đặc trưng khóa chương trình 2 P U U Các lệnh MOVC được thực thi từ bộ nhớ chương trình ngoài không được phép tìm nạp lệnh từ bộ nhớ nội, được lấy mẫu và được chốt khi reset, hơn nữa việc lập trình trên Flash bị cấm 3 P P U Như chế độ 2, cấm thêm việc kiểm tra chương trình 4 P P P Như chế độ 3, cấm thêm việc thực thi chương trình ngoài 2.3.2.IC thời gian thực DS1307 2.3.2.1.Giới thiệu chung về DS1307: IC thời gian thực là họ vi điều khiển của hãng dalat. DS1307 có một số đặc trưng cơ bản sau: DS1307 là 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 . - SRAM : 56 bytes. - Địa chỉ và dữ liệu được truyền nối tiếp qua 2 đường bus 2 chiều. - 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 3V: Hình 2.2. IC thời gian thực DS1307 2.3.2.2.Cơ chế hoạt động và chức năng của DS1307: Vcc: nối với nguồn , GND: đất X1,X2: nối với thạch anh 32,768 kHz Vbat: đầu vào pin 3V 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. 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. 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,5 đế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.3.LCD 16x2 Giống như led 7 thanh, LCD là một thiết bị ngoại vi dùng để giao tiếp với người dùng, so với led 7 thanh thì LCD có ưu điểm là hiển thị được tất cả các kí tự trong bảng mã ascci, trong khi đó led 7 thanh chỉ hiển thị được một số kí tự, nhưng LCD lại có nhược điểm là giá thành cao và khoảng cách nhìn gần. Hình 2.3. LCD 16x2 Chân Kí Hiệu Mức Logic I/O Chức Năng 1 Vss - - Nguồn (GND) 2 Vcc - - Nguồn (+5V) 3 Vee - - Chỉnh độ tương phản 4 RS 0/1 I 0=Nhập lệnh 1=Nhập dữ liệu 5 R/W 0/1 I 0=Ghi dữ liệu 1=Đọc dữ liệu 6 E 1,1 0 I Tín hiệu cho phép 7 DB0 0/1 I/O Bít dữ liệu 0 8 DB1 0/1 I/O Bít dữ liệu 1 9 DB2 0/1 I/O Bít dữ liệu 2 10 DB3 0/1 I/O Bít dữ liệu 3 11 DB4 0/1 I/O Bít dữ liệu 4 12 DB5 0/1 I/O Bít dữ liệu 5 13 DB6 0/1 I/O Bít dữ liệu 6 14 DB7 0/1 I/O Bít dữ liệu 7 15 Lamp- - - Đèn LCD 16 Lamp+ - - Đèn LCD Bảng 2.2. Chức năng các chân LCD Các chân Vcc, Vss và Vee: Chân Vcc cấp dương nguồn 5V, chân Vss nối đất, chân Vee được dùng để điều khiển độ tương phản của màn hình LCD. RS ( Register select): Khi ở mức thấp, chỉ thị được truyền đến LCD như xoá màn hình ,vị trí con trỏ ….Khi ở mức cao, kí tự được truyền đến LCD. R/W (Read/Write): Dùng để xác định hướng của dữ liệu được truyền giữa LCD và vi điều khiển. Khi nó ở mức thấp dữ liệu được ghi đến LCD và khi ở mức cao, dữ liệu được đọc từ LCD. Nếu chúng ta chỉ cần ghi dữ liệu lên LCD thì chúng ta có thể nối chân này xuống GND để tiết kiệm chân. E (Enable): Cho phép ta truy cập/xuất đến LCD thông qua chân RS và R/W. Khi chân E ở mức cao (1) LCD sẽ kiểm tra trạng thái của 2 chân RS và R/W và đáp ứng cho phù hợp. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liêu. Xung này phải rộng tối thiểu là 450ns. Còn khi chân E ở mức thấp (0), LCD sẽ bị vô hiệu hoá hoặc bỏ qua tín hiệu của 2 chân RS và R/W. Các chân D0 - D7: Đây là 8 chân dữ liệu 8 bít, được dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD. LCD có 2 chế độ giao tiếp: Chế độ 4 bit (chỉ dùng 4 chân D4 đến D7 để truyền dữ liệu) và chế độ 8 bit (dùng cả 8 chân dữ liệu từ D0 đến D7), ở chế độ 4 bit, khi truyền 1 byte, chúng ta sẽ truyền nửa cao của byte trước, sau đó mới truyền nửa thấp của byte. Trước khi truyền các kí tự ra màn hình LCD ta cần thiết lập cho LCD như chọn chế độ 4 bit hoặc 8 bit, 1 dòng hay 2 dòng ,bật/tắt con trỏ. 2.3.5. Tụ điện Tụ điện là linh kiện điện tử thụ động được sử dụng rất rộng rãi trong các mạch điện tử, chúng được sử dụng trong các mạch lọc nguồn, lọc nhiễu, mạch truyền tín hiệu xoay chiều, mạch tạo dao động. 2.3.6.Điện trở Trong thiết bị điện tử điện trở là một linh kiện quan trọng, chúng được làm từ hợp chất cacbon và kim loại tuỳ theo tỷ lệ pha trộn mà người ta tạo ra được các loại điện trở có trị số khác nhau. 2.3.7.Nút bấm button Trong mạch này ta sử dụng 3 nút bấm để điều khiển menu, tăng , giảm cho việc cài đặt giờ, ngày, tháng, năm. 2.3.8.Biến trở Trong mạch ta sẽ sử dụng một biến trở 10k để điểu chỉnh độ tương phản của LCD. 2.3.9.Thạch anh Trong mạch ta sẽ sử dụng hai thạch anh, một loại 12Mhz để tạo dao động cho AT89C51, một loại 32,768 Mhz để tạo dao động cho DS1307. Hình 2.3. Thạch anh 2.3.10.Pin CMOS 3V Ta sẽ sử dụng một đế và pin CMOS 3V để làm nguồn nuôi cho DS1307 để nó có thể lưu được giờ khi mất điện nguồn cung cấp cho mạch. CHƯƠNG 3. XÂY DỰNG HỆ THỐNG 3.1.THIẾT KẾ PHẦN CỨNG Hình 3.1. Sơ đồ nguyên lý Trên cơ sở sơ đồ nguyên lý, vẽ mạch in trên Orcad và có kết quả như sau: Hình 3.2.Mạch vẽ trên orcad 3.2.THIẾT KẾ PHẦN MỀM Chương trình #include #include // DINH NGHIA 1 SO CONG #define sda P1_1 #define scl P1_0 #define rs P3_7 #define rw P3_6 #define en P3_5 #define menu P3_2 #define tang P3_1 #define giam P3_0 #define congLCD P2 #define D7 P2_7 unsigned char *rtc[]={"0","1","2","3","4","5","6","7","8","9"} unsigned char *day[]={"CNhat","Thu 2","Thu 3","Thu 4","Thu 5","Thu 6","Thu7"}; unsigned char giatrikhoitao_rtc[8]; /******************************************************/ // CAC CHUONG TRINH CON GIAO TIEP VOI LCD // void busy() { D7=1; rs=0; rw=1; while(D7!=0) {en=0; en=1; } } void ghilenhLCD(unsigned char x) { busy(); congLCD=x; // gia tri x rs=0; // chon thanh ghi lenh rw=0; // ghi len lcd en=1; // cho phep muc cao en=0; //xung cao xuong thap } void khoitaoLCD(void) { ghilenhLCD(0X38); // hai dong va ma tran 5x7 ghilenhLCD(0X0C); //bat man hinh , bat con tro ghilenhLCD(0X01); //xoa man hinh ghilenhLCD(0X06);//dich hien thi sang phai(tang con tro sang phai) } void ghi_kytu(unsigned char value) { busy(); congLCD=value; rs=1; rw=0; en=1; en=0; } void ghi_chuoi(unsigned char *string) { unsigned char i; for(i=0;string[i]!='\0';i++) ghi_kytu(string[i]); } void ghiso(unsigned char a) { unsigned char i; i=a/10; ghi_chuoi(rtc[i]); i=a%10; ghi_chuoi(rtc[i]); } void hienthi_dulieu_rtc(unsigned char x) { unsigned char temp; temp = x/16; //chuyen luon so sang decima ghi_chuoi(rtc[temp]); temp = x%16; ghi_chuoi(rtc[temp]); } /*********************************************************** // CAC CHUONG TRINH CON GIAO TIEP VOI RTC // ca 2 dk start va stop dc tao ra boi thiet bi chu void start_rtc(void) //dk start: 1 su cdoi tthai tu cao xuong thap tren duong sda trong khi duong scl dang o muc cao {scl=1; sda=1; _nop_();_nop_(); sda=0; scl=0; } void stop_rtc(void) //dk stop: 1 su cdoi trang thai tu muc thap len cao tren duong sda trong khi duong slc dang o muc cao { sda=0; scl=1; _nop_();_nop_(); sda=1; } void gui_rtc(unsigned char x) { unsigned char i; for(i=0;i<8;i++){ sda=(x&0x80)? 1:0; //dua bit du lieu ra chan SDA scl=1; _nop_();_nop_(); scl=0; x<<=1; //bit co trong so lon hon dc truyen truoc } scl=1;//nhan bit ACK tu SLAVER _nop_();_nop_(); scl=0; } unsigned char nhan_rtc(void) { unsigned char Data,i; for(i=0;i<8;i++) // nhan vao 8 bit { scl=1; Data<<=1; Data=Data|sda; scl=0; } sda=1; scl=1; //master nhan/gui bit du lieu(sda) khi scl o muc cao _nop_(); scl=0; _nop_(); //du lieu(sda) thay doi khi scl muc thap return Data; //tra gia tri cho ham } unsigned char docdulieu(unsigned char diachi) { unsigned char Data; start_rtc(); gui_rtc(0xd0); gui_rtc(diachi); //bat dau doc du lieu tu thanh ghi co dia chi 0x00 start_rtc(); gui_rtc(0xd1); Data=nhan_rtc(); stop_rtc();//Stop I2C return Data; } void ghidulieu(void) { unsigned char t; for(t=0;t<9;t++){start_rtc(); gui_rtc(0xd0); gui_rtc(t); gui_rtc(giatrikhoitao_rtc[t]); stop_rtc();} } /***************************************************************/ // HIEN THI GIO , NGAY THANG TREN LCD // void hienthi_rtc(void) { ghilenhLCD(0xca); // ep con tro den vi tri thu 11 dong thu 2 hienthi_dulieu_rtc(docdulieu(0)); //hien thi giay ghilenhLCD(0xc7); // ep con tro den vi tri thu 8 dong thu 2 hienthi_dulieu_rtc(docdulieu(1)); // hien thi phut ghi_kytu(':'); ghilenhLCD(0xc4); // ep con tro den vi tri thu 5 dong thu 2 hienthi_dulieu_rtc(docdulieu(2)); //hien thi gio ghi_kytu(':'); ghilenhLCD(0x80); //ep con tro den dau dong thu 1 ghi_chuoi(day[docdulieu(3)-1]); ghi_kytu(','); //hien thi thu ghilenhLCD(0x86); //ep con tro den vi tri thu 7 dong thu 1 hienthi_dulieu_rtc(docdulieu(4));//hien thi ngay ghi_kytu('-'); hienthi_dulieu_rtc(docdulieu(5));//hien thi thang ghi_chuoi("-20"); hienthi_dulieu_rtc(docdulieu(6)); //nam } /**************************************************************/ // TAO THOI GIAN TRE DUNG TIMER 0 // void delay(long time)//tre time ms { while(time--){ TMOD=0x01;// che do 16 bit khong tu nap lai TH0=0xFC;TL0=0x67; //6*(65536- FC67+1)*(1/12000)=1000us =1ms TR0=1; while(TF0!=1){}; TF0=0; TR0=0;} } /***************************************************************/ // CHUONG TRINH CON THUC HIEN VIEC CAI DAT NGAY GIO, THANG NAM // unsigned char bcd_dec(unsigned char bcd) {return((bcd/16)*10+(bcd%16)); //vd bcd=66 -> dec =42} unsigned char dec_bcd(unsigned char dec) {return((dec/10)*16+(dec%10)); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// void caidat_rtc() { unsigned char giay,phut,gio,thu,ngay,thang,nam; giay = bcd_dec(docdulieu(0)&0x7f); // de bit 7 (bit clock halt) cua thanh ghi giay = 0 => ko bi treo) phut = bcd_dec(docdulieu(1)); gio = bcd_dec(docdulieu(2)& 0x3f); //che do 24 h thu = bcd_dec(docdulieu(3)); ngay = bcd_dec(docdulieu(4)); thang = bcd_dec(docdulieu(5)); nam = bcd_dec(docdulieu(6)); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// // CAI DAT GIO ghilenhLCD(1); ghi_chuoi("CHINH GIO:"); ghilenhLCD(0x0e); ghilenhLCD(0xc4); ghiso(gio); ghi_kytu(':');ghiso(phut);ghi_kytu(':'); ghiso(giay); ///////////////////////////////////////// ghilenhLCD(0xC5); while(menu==0); caidatgio:while(tang!=0 && giam!=0 && menu!=0); if(tang==0) {gio++; if(gio==24) gio=0; ghilenhLCD(0xC4); ghiso(gio); ghilenhLCD(0xC5); delay(300); goto caidatgio; } if(giam==0) {gio--; if(gio==0xff)gio=23; ghilenhLCD(0xC4); ghiso(gio); ghilenhLCD(0xC5); delay(300); goto caidatgio;} /////////////////////////////////////////////////// while(menu==0); ghilenhLCD(0xC8); caidatphut: while(tang!=0 && giam!=0 && menu!=0); if(tang==0) {phut++; if(phut==60) phut=0; ghilenhLCD(0xC7); ghiso(phut); ghilenhLCD(0x10); delay(300); goto caidatphut;} if(giam==0){phut--; if(phut==0xff)phut=59; ghilenhLCD(0xC7); ghiso(phut); ghilenhLCD(0x10); delay(300); goto caidatphut; } /////////////////////////////////////////////////// while(menu==0); ghilenhLCD(0xCB); caidatgiay: while(tang!=0 && giam!=0 && menu!=0); if(tang==0) {giay++; if(giay==60) giay=0; ghilenhLCD(0xCA); ghiso(giay); ghilenhLCD(0xCB); delay(100); goto caidatgiay; } if(giam==0) {giay--; if(giay==0xff) giay=59; ghilenhLCD(0xCA); ghiso(giay); ghilenhLCD(0xCB); delay(100); goto caidatgiay; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// // CAI DAT NGAY - THANG - NAM while(menu==0); ghilenhLCD(1); ghi_chuoi("CHINH NGAY :"); ghilenhLCD(0xc4); ghiso(ngay); ghi_kytu('-'); ghiso(thang); ghi_chuoi("-20"); ghiso(nam); /////////////////////////////////////////////////// ghilenhLCD(0xc5); caidatngay:while (tang!=0 && giam!=0 && menu!=0); if(tang==0){ ngay++; if(ngay==32) ngay=1; ghilenhLCD(0xC4); ghiso(ngay); ghilenhLCD(0x10); delay(300); goto caidatngay; } if(giam==0) {ngay--; if(ngay==0) ngay=31; ghilenhLCD(0xC4); ghiso(ngay); ghilenhLCD(0x10); delay(300); goto caidatngay; } //////////////////////////////////////////////////// while(menu==0); ghilenhLCD(0xC8); caidatthang:while(tang!=0 && giam!=0 && menu!=0); if(tang==0) { thang++; if(thang==13) thang=1; ghilenhLCD(0xC7); ghiso(thang); ghilenhLCD(0x10); delay(300); goto caidatthang; } if(giam==0){ thang--; if(thang==0) thang=12; ghilenhLCD(0xC7); ghiso(thang); ghilenhLCD(0x10); delay(300); goto caidatthang; } //////////////////////////////////////////////////////// while(menu==0); ghilenhLCD(0xCD); caidatnam:while(tang!=0 && giam!=0 && menu!=0); if(tang==0) { nam++; if(nam==100) nam=0; ghilenhLCD(0xCC); ghiso(nam); ghilenhLCD(0xCE); delay(300); goto caidatnam; } if(giam==0) { nam--; if(nam==0) nam=99; ghilenhLCD(0xCC); ghiso(nam); ghilenhLCD(0xCE); delay(300); goto caidatnam; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// // CAI DAT THU while(menu==0); ghilenhLCD(1); ghi_chuoi("CHINH THU :"); ghilenhLCD(0xc4); ghi_chuoi(day[thu-1]); caidatthu:while(tang!=0 && giam!=0 && menu!=0); if(tang==0) { thu++; if(thu==8) thu=1; ghilenhLCD(0xC4); ghi_chuoi(day[thu-1]); delay(300); goto caidatthu; } if(giam==0) { thu--; if(thu==0) thu=7; ghilenhLCD(0xC4); ghi_chuoi(day[thu-1]); delay(300); goto caidatthu; } while(menu==0); // ket thuc cai dat ghilenhLCD(1); //thi thuc hien xoa man hinh ghilenhLCD(0x0C); //bat hien thi tat con tro //CAP NHAT THOI GIAN VAO RTC giatrikhoitao_rtc[0] = dec_bcd(giay); giatrikhoitao_rtc[1] = dec_bcd(phut); giatrikhoitao_rtc[2] = dec_bcd(gio); giatrikhoitao_rtc[3] = dec_bcd(thu); giatrikhoitao_rtc[4] = dec_bcd(ngay); giatrikhoitao_rtc[5] = dec_bcd(thang); giatrikhoitao_rtc[6] = dec_bcd(nam); giatrikhoitao_rtc[7] = 0x00; giatrikhoitao_rtc[8] = 'c'; //ghi vao vi tri dau tien cua ram1 co flag ghidulieu(); ghilenhLCD(1); } /**********************************************************/ // CHUONG TRINH CON KIEM TRA DU LIEU TU DS1307 KHI KHOI DONG// void kiemtra_rtc(void) { unsigned char temp; start_rtc(); gui_rtc(0xd0); gui_rtc(0x08); //doc du lieu tu vi tri ram dau tien start_rtc(); gui_rtc(0xd1); temp=nhan_rtc() ; //con tro dang tro toi dia chi 0x08 chua du lieu flag (co?`) xem da cai dat hay chua stop_rtc(); if(temp!='c') // neu gia tri thu 8 nhan duoc khac voi co 'c' cap nhat khi cai dat gio thi tuc la lan dau duoc khoi tao, ta se chon gia tri ghi vao ban dau theo y minh { giatrikhoitao_rtc[0]=0x50; giatrikhoitao_rtc[1]=0x59; giatrikhoitao_rtc[2]=0x09; giatrikhoitao_rtc[3]=0x04; giatrikhoitao_rtc[4]=0x04; giatrikhoitao_rtc[5]=0x05; giatrikhoitao_rtc[6]=0x11; giatrikhoitao_rtc[7]=0x00; giatrikhoitao_rtc[8]='c'; ghidulieu();} } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// void doccacdulieu(void){ int i; for(i=0;i<=6;i++){docdulieu(i);} } // CHUONG TRINH CHINH // bit co=0; void caidatco() interrupt 0 //ngat ngoai 0 thi co =1 {co=1; } void main() { khoitaoLCD(); ghilenhLCD(1); ghilenhLCD(0x80); ghi_chuoi(" DACN"); ghilenhLCD(0xc0); ghi_chuoi(" KHOA DTVT"); delay(2000); ghilenhLCD(0x80); ghi_chuoi("GVHD:THAY QUOC"); ghilenhLCD(0xc0); ghi_chuoi("SV:NGUYEN NGO"); delay(2000); ghilenhLCD(1); kiemtra_rtc(); IE=0x81;// EA_ET2.ES.ET1.EX1.ET0.EX0 cho phep ngat ngoai 0 doccacdulieu(); while(1) { doccacdulieu(); hienthi_rtc(); if(co==1) //co =1 ngat 0 xay ra => cai dat gio { caidat_rtc(); co=0; }}} 3.3. KẾT QUẢ MÔ PHỎNG Hình 3.3. Mạch mô phỏng 3.4. MẠCH THỰC TẾ Hình 3.4. Mạch thực tế KẾT LUẬN Sau một thời gian tìm hiểu, dưới sự hướng dẫn nhiệt tình của thầy Dương Tấn Quốc, em đã hoàn thành đề tài “Thiết kế đồng hồ thời gian thực “ hiển thị trên LCD. Đồng hồ hiển thị được thứ, ngày, tháng, năm, giờ, phút, giây, có thể cài đặt được thời gian thông qua giao tiếp phím ấn. Qua đó giúp em được củng cố kiến thức đã học, kết hợp được với thực tiễn, phục vụ cho công việc tương lai rất nhiều. Trong thời gian thực hiện Đồ án em đã cố gắng hết sức để thực hiện đề tài một cách hoàn thiện và nhanh nhất có thể, nhưng do trình độ còn hạn chế nên còn nhiều thiếu sót, đề tài mới dừng lại ở việc làm một chiếc đồng hồ hiển thị thời gian đơn giản. Cũng với đề tài này, trong tương lai chúng em sẽ phát triển nó ở mức cao hơn, có thể kết hợp chúng với các thiết bị khác để sử dụng trong thực tiễn cuộc sống như đồng hồ kèm đo nhiệt độ, hẹn giờ, chuông báo, lịch làm việc cá nhân hay tập thể,… DANH MỤC TÀI LIỆU THAM KHẢO [1] Tống văn On .Giáo trình vi điều khiển họ 8051 [2] Trần tiến Phức – Đại học Nha Trang. Giáo trình kỹ thuật điện tử Các website tham khảo: [1] [2] [3] [4] NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN ......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................... Đà Nẵng ,ngày tháng năm 2013 Giảng viên hướng dẫn NHẬN XÉT CỦA GIẢNG VIÊN PHẢN BIỆN …………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………. Đà Nẵng ,ngày tháng năm 2013 Giảng viên phản biện

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

  • docxdonghothoigianthuc_89c51_ds1307_7524.docx