Mục lục
MỞ ĐẦU 1
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 3
1.1.Cách tính thời gian theo lịch dương và lịch âm 3
1.1.1.Cách tính thời gian dương lịch 3
1.1.2.Cách tính thời gian âm lịch 4
1.1.3.Năm nhuận 4
1.1.4.Tháng nhuận 5
1.1.5.Cách tính âm lịch, dương lịch trong đồng hồ 5
1.2.IC cảm biến nhiệt độ DS18B20 6
1.3.IC thời gian DS1307 7
1.4.Vi điều khiển PIC 16F877A 8
1.4.1 PIC là gì? 8
1.4.2 Các dòng PIC và cách lựa chọn vi điều khiển PIC 8
1.4.3.Cấu trúc vi điều khiển PIC16F877A 9
1.4.4 Tổ chức bộ nhớ 14
1.5 LED 7 thanh 18
CHƯƠNG 2: THIẾT KẾ VÀ CHẾ TẠO MẠCH 21
2.1.Sơ đồ khối 21
2.1.1 Sơ đồ 21
2.1.2.Phân tích chức năng các khối 21
2.2 Sơ đồ toàn mạch 22
2.2 Sơ đồ chi tiết các khối 24
2.4.Lưu đồ thuật toán 28
2.5.Chương trình điều khiển 32
2.5.Mô hình sản phẩm 53
CHƯƠNG 3: KẾT LUẬN 54
PHỤ LỤC 55
Trang 2Danh mục hình vẽ
Hình 1.1: Hệ Mặt Trời 3
Hình 1.2 Cảm biến nhiệt độ DS18B20 6
Hình 1.3 Hai gói cấu tạo chip DS1307 7
Hình 1.3: Sơ đồ kết nối DS1307 bằng một mạch điện đơn giản 8
Hình 1.4: Sơ đồ khối bộ vi điều khiển PIC 16F877X 11
Hình 1.5: Hình ảnh thực tế và sơ đồ chân của PIC 16F877A 12
Hình 1.6: Bộ nhớ chương trình PIC 16F877A 15
Hình 1.7: Bộ nhớ dữ liệu của PIC 16
Hình 1.8: Sơ đồ kết nối led đôi 19
Hình 1.9: Led 7 thanh 20
Hình 2.1: Sơ đồ khối 21
Hình 2.2: Sơ đồ toàn mạch 23
Hình 2.3: Nguồn cung cấp cho mạch 24
Hình 2.4: Khối điều khiển và khối cài đặt 25
Hình 2.5: Khối thời gian thực 26
Hình 2.6: Khối cảm biến nhiệt độ 26
Hình 2.7: khối hiển thị 27
Hình 2.8: Mô hình sản phẩm 53
Trang 3MỞ ĐẦU
Lý do chọn đề tài
Ngày nay khoa học công nghệ hiện đại đã có những bước tiến nhanh và xa
đi theo nó là những thành tựu ứng dụng trong các lĩnh vực đời sống, công nghiệp
Kỹ thuật điều khiển trong tiến trình hoàn thiện lý thuyết cũng đã tạo cho mìnhnhiều phát triển có ý nghĩa Bây giờ khi nhắc tới điều khiển con người dường nhưhình dung tới độ chính xác, tốc độ xử lý và thuật toán thông minh đồng nghĩa làlượng chất xám cao hơn Hiện nay trên thị trường có rất nhiều loại vi điều khiểnnhư 8051, Motorola 68HC, AVR, ARM, Ngoài họ 8051 được hướng dẫn mộtcách căn bản ở môi trường đại học, chúng em đã chọn vi điều khiển PIC để mởrộng vốn kiến thức và phát triển các ứng dụng trên công cụ này vì các nguyên nhânsau:
Họ vi điều khiển này có thể tìm mua dễ dàng tại thị trường Việt Nam
Có đầy đủ tính năng của một vi điều khiển khi hoạt động độc lập
Là sự bổ sung rất tốt về kiến thức cũng như ứng dụng cho họ vi điều khiểnmang tính truyền thống: họ vi điều khiển 8051 Giá thành không đắt
Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình, nạpchương trình từ đơn giản tới phức tạp
Các tính năng đa dạng của vi điều khiển PIC và các tính năng này khôngngừng được phát triển
Số lượng người sử dụng họ vi điều khiển PIC trên thế giới cũng như ViệtNam khá nhiều.Đã tạo thuận lợi trong quá trình tìm hiểu và phát triển các ứng dụngnhư: số lượng tài liệu, số lượng các ứng dụng mở đã được phát triển, dễ dàng traođổi, học tập, dễ dàng tìm được hỗ trợ khi gặp khó khăn
Vì vậy, sau một thời gian học tập và tìm hiểu tài liệu với sự giảng dạy của các thầy
cô giáo Cùng với sự dẫn dắt nhiệt tình của giáo viên hướng dẫn thầy giáo Nguyễn Văn Vĩnh Chúng em đã chọn đề tài: “Thiết Kế Và Chế Tạo Lịch Vạn Niên” làm
đồ án của mình
Đối tượng nghiên cứu
Với đề tài này chúng em tập trung vào:
Tìm hiểu về vi điều khiển PIC 16F877A
Trang 4 Nghiên cứu IC thời gian thực DS1307
Nghiên cứu cảm biếm nhiệt độ DS18B20
Mục đích nghiên cứu
Khi nghiên cứu đồ án này chúng em đã:
Hiểu được cách thức và chế độ hoạt động của VĐK PIC 16F877A
Hiểu được cách thức hoạt động của DS1307
Thiết kế, chế tạo mạch hiển thị thứ ,ngày ,tháng , năm dùng PIC 16F877A
Phương pháp nghiên cứu
Do đây là một đồ án sản phẩm, nên chúng em đã áp dụng phương pháp nghiên cứu
lý thuyết, nghiên cứu thực nghiệm trực tiếp trên sản phẩm thật, chạy thử và hoànthiện chương trình
Ý nghĩa nghiên cứu
Như đã nói ở trên thì nếu thực hiện thành công đề tài này sẽ mang lại ý nghĩa về cảthực tiễn và lý luận
Ý nghĩa lý luận:
Toàn bộ chương trình và bản thuyết minh của đề tài sẽ trở thành tài liệu, tham khảonhanh, dễ hiểu, thiết thực cho các bạn sinh viên, những người thích tìm hiểu về đềtài này của chúng em
Ý nghĩa thực tiễn:
Với sự thành công của đề tài sẽ góp phần giúp cho các bạn sinh viên mới nói chung
và các bạn sinh viên khoa Điện Điện Tử nói riêng thấy rõ được ý nghĩa thực tế vàthêm yêu thích chuyên ngành mình đã chọn
Do kiến thức và trình độ năng lực hạn hẹp nên việc thực hiện đề tài này không thểtránh được thiếu sót, kính mong nhận được sự thông cảm và góp ý của thầy giáo,
cô giáo và các bạn để đồ án này hoàn chỉnh hơn
Chúng em xin trân thành cảm ơn!
Sinh viên thực hiện: Nguyễn Thị Thu Thảo.
Trang 5
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 Cách tính thời gian theo lịch dương và lịch âm.
Hình 1.1: Hệ Mặt Trời
1.1.1 Cách tính thời gian dương lịch.
Trái đất quay quanh Mặt trời là 365+ 1/4 ngày (hay 6 giờ) Nhưng theo quyước thì mỗi năm chỉ có 365 ngày, nên năm dương lịch sẽ lệch với thời gian thực là1/4 ngày Điều này cũng có nghĩa sau 4 năm thì dương lịch sẽ dư một ngày, do vậy,
cứ 4 năm sẽ có một năm 366 ngày, gọi là năm nhuận Năm nhuận này theo quy ướcrơi vào tháng hai (tức là tháng có 29 ngày) Độ dài trung bình của năm dương lịchhiện nay (còn gọi là Tân lịch hay lịch Gregorius) là 365.2425 chứ không phải365.25 (365 1/4), độ dài 365 1/4 là độ dài của Cựu lịch (lịch Julius), lịch này khôngcòn sử dụng trên thế giới từ năm 1582 khi Giáo hoàng Gregorius XIII ban hành sắclệch cải cách lịch Dương lịch của người La Mã cổ đại vì không biết là Trái Đất
Trang 6quay xung quanh Mặt trời và năm của họ chỉ có 304 ngày (được chia thành 10tháng chứ không phải 12 tháng).
1.1.2 Cách tính thời gian âm lịch.
Chu kỳ Mặt trăng quay quanh Trái đất 1 vòng hết 29,5 ngày Âm lịch là loạilịch dựa trên các chu kỳ của tuần trăng Loại lịch duy nhất trên thực tế chỉ thuầntúy sử dụng âm lịch là lịch Hồi Giáo, trong đó mỗi năm chỉ chứa đúng 12 thángMặt Trăng Đặc trưng của âm lịch thuần túy, như trong trường hợp của lịch HồiGiáo, là ở chỗ lịch này là sự chu kỳ trăng tròn và hoàn toàn không gắn liền với cácmùa Vì vậy năm âm lịch Hồi Giáo ngắn hơn mỗi năm dương lịch khoảng 11 hay
12 ngày, và chỉ trở lại vị trí ăn khớp với năm dương lịch sau mỗi 33 hoặc 34 nămHồi Giáo Do âm lịch thuần túy chỉ có 12 tháng âm lịch ( tháng giao hội ) trong mỗinăm, nên chu kỳ này (354 ngày) đôi khi cũng gọi là năm âm lịch
1.1.3 Năm nhuận.
Tính năm nhuận theo Dương lịch.
Muốn biết năm nào của Dương lịch là năm nhuận thì ta chỉ cần lấy số biểucủa năm đó đem chia cho 4 mà vừa đủ thì năm đó là năm Dương lịch có nhuậntháng 2 thêm 1 ngày thành 29 ngày Vì thông thường tháng 2 Dương lịch chỉ có 28ngày mà thôi Nhưng lưu ý rằng đối với những năm tròn Thế Kỷ ( tức số biểu củanăm đó có 2 con số không ở cuối thì ta phải lấy 2 con số đầu của số biểu để chiacho 4 Nếu chia vừa đủ thì năm đó là năm Nhuận
Tính năm nhuận theo Âm lịch.
Đối với năm Nhuận Âm lịch thì có một tháng nhuận Tháng âm lịch phải lấyngày Nhật Nguyệt hợp sóc làm đầu ( tức là ngày Mặt Trời, Mặt Trăng, Trái Đấtcùng trên một trục đường thẳng) Hai lần hợp sóc cách nhau 29,5 ngày Cho nêntháng Âm lịch đủ 30 ngày và tháng thiếu là 29 ngày Vì cách tính như vậy, nên Âmlich bắt đầu vào ngày “ sóc” kề với “ tiết” Lập xuân Sai số năm thực là 11 ngàytrong một năm Dồn 3 năm lại thì dôi ra 33 ngày Cho nên qua 3 năm phải nhuận 1tháng, rồi dồn 2 năm nữa thì được 25 ngày là gần được nhuận 1 tháng Tính bìnhquân trong 19 năm thì có 7 tháng nhuận Trong mỗi tháng bình thường có một ngày
Trang 7“tiết” và một ngày “khí” Số ngày tiết và ngày khí bình quân là 30,4 ngày Do đóngày của tháng Âm lịch có 29,5 ngày Cho nên sau 2,3 năm sẽ có một tháng chỉ cóngày tiết mà không có ngày khí thì dùng tháng đó làm tháng Nhuận Âm lịch Nóinhư vậy nhưng đi vào tính cụ thể tháng nào trong năm nhuận âm lịch là thángnhuận thì rất phức tạp mà ta phải hiểu lịch pháp mới tính được chứ không tính dễdàng như tháng nhuận của năm Dương lịch Nhưng tính năm âm lịch có nhuận thìcũng không khó Cụ thể tính như sau: Đếm số biểu của năm Dương lịch tương ứngvới năm âm lịch chia cho 19, nếu số dư là một trong các số : 0, 3, 6, 9 hoặc 11, 14,
17 thì năm âm lịch đó có tháng nhuận
1.1.4 Tháng nhuận.
Dương lịch cứ 4 năm thêm 1 ngày thứ 29 của tháng 2
Âm lịch cứ 3 năm thêm 1 tháng
1.1.5 Cách tính âm lịch, dương lịch trong đồng hồ.
Cách tính âm lịch theo phương pháp tra bảng:
Tính ngày âm lịch
Nếu ( ngày Dương lịch tương ứng với ngày đầu tháng Âm lịch) bằng ( ngày hiệntại) thì ngày Âm lịch bằng 1 hoặc ( ngày Dương lịch tương ứng với ngày đầu tháng
Âm lịch ) trừ ( ngày hiện tại )
Nếu không có nhớ thì ngày âm lịch bằng ngày Dương lịch hiện tại cộng ngày Âmlịch của đầu tháng Dương lịch rồi trừ 1
Nếu có nhớ ngày âm lich bằng ngày Dương lịch hiện tại trừ ngày Âm lịch của đầutháng Dương lịch rồi cộng1
Bằng cách lấy tháng Dương lịch trừ cho tháng Âm lịch
Nếu không có nhớ thì năm Âm lịch = năm Dương lịch
Trang 8Nếu có nhớ thì năm Âm lịch hiện tại = năm Dương lịch -1
1.2 IC cảm biến nhiệt độ DS18B20.
DS18B20 là linh kiện điện tử thuộc loại cảm biến nhiệt độ kỹ thuật số giaotiếp 1-Wire (1 dây duy nhất), bên trong IC được tích hợp sẵn cảm biến nhiệt và bộchuyển đổi, khối xử lý, giao tiếp 1 wire, bộ nhớ ROM, EEPROM, báo thức nhiệt độkhi đạt ngưỡng
IC cảm biến nhiệt độ, chỉ bao gồm 3 chân, đóng gói dạng TO-92 hay dạng SMD 8chân
Hình 1.2 Cảm biến nhiệt độ DS18B20
Đặc điểm nổi bật:
Thời gian chuyển đổi nhiệt độ tối đa là 750ms cho độ phân giải 12 bit
Lấy nhiệt độ theo giao thức 1 dây
Cung cấp nhiệt độ với độ phân giải config 9, 10, 11, 12 bit, tùy theo sử dụng.trong trường hợp không có config thì nó tự động ở chế độ 12 bit
khoảng nhiệt độ từ -100C đến +850C thì độ chính xác ±0.5°C
Điện áp sử dụng: 3- 5.5V
Trang 9Hình 1.3 Hai gói cấu tạo chip DS1307.
Các chân của DS1307 được cấu tạo như sau:
- X1 và X2: là 2 đầu kết nối với 1 thạch anh 32.768KHz làm nguồn tạo daođộng cho chip
- VBAT: cực dương của một nguồn pin 3V nuôi chip
- GND: chân mass chung cho cả pin 3V và Vcc
- Vcc: nguồn cho giao diện I2C, thường là 5V và dùng chung với vi điềukhiển
Chú ý là nếu Vcc không được cấp nguồn nhưng VBAT được cấp thì DS1307 vẫnđang hoạt động ( nhưng không ghi và đọc được)
- SQW/ OUT: một đầu tạo xung vuông ( Square Wave/ Output Driver), tần sốcủa xung được tạo có thể lập trình Như vậy chân này hầu như không liên quan đến
Trang 10chức năng của DS1307 là đồng hồ thời gian thực, chúng ta sẽ bỏ trống chân này khinối mạch.
- SCL và SDA là 2 đường giao xung nhịp và dữ liệu của giao diện I2C màchúng ta đã tìm hiểu trong bài TWI của AVR
Hình 1.3: Sơ đồ kết nối DS1307 bằng một mạch điện đơn giản
1.4 Vi điều khiển PIC 16F877A.
1.4.1 PIC là gì?
PIC là viết tắt của “Programable Intellingent Computer”, có thể tạm dịch là
“máy tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho vi điềukhiển đầu tiên của họ Hãng Micrchip tiếp tục phát triển sản phẩm này và cho đếnnay hãng đã tạo ra gần 100 loại sản phẩm khác nhau
1.4.2 Các dòng PIC và cách lựa chọn vi điều khiển PIC
Các kí hiệu của vi điều khiển PIC:
- PIC12xxxx: độ dài lệnh 12 bit
- PIC16xxxx: độ dài lệnh 14 bit
- PIC18xxxx: độ dài lệnh 16 bit
C: PIC có bộ nhớ EPROM (chỉ có 16C84 là EEPROM)
F: PIC có bộ nhớ flash
LF: PIC có bộ nhớ flash hoạt động ở điện áp thấp
LV: tương tự như LF, đây là kí hiệu cũ
Bên cạnh đó một số vi điệu khiển có kí hiệu xxFxxx là EEPROM, nếu có thêm chữ
A ở cuối là flash (ví dụ PIC16F877 là EEPROM, còn PIC16F877A là flash)
Trang 11Ngoài ra còn có thêm một dòng vi điều khiển PIC mới là dsPIC Ở Việt Nam phổbiến nhất là các họ vi điều khiển PIC do hãng Microchip sản xuất.
Cách lựa chọn một vi điều khiển PIC phù hợp:
- Trước hết cần chú ý đến số chân của vi điều khiển cần thiết cho ứng dụng
Có nhiềuvi điều khiển PIC với số lượng chân khác nhau, thậm chí có vi điều khiểnchỉ có 8 chân, ngoài ra còn có các vi điều khiển 28, 40, 44, … chân Cần chọn viđiều khiển PIC có bộ nhớ flash để có thể nạp xóa chương trình được nhiều lần hơn
- Tiếp theo cần chú ý đến các khối chức năng được tích hợp sẵn trong vi điềukhiển,các chuẩn giao tiếp bên trong Sau cùng cần chú ý đến bộ nhớ chương trình
mà vi điều khiển cho phép Ngoài ra mọi thông tin về cách lựa chọn vi điều khiểnPIC có thể được tìm thấy trong cuốn sách “Select PIC guide” do nhà sản xuấtMicrochip cung cấp
Do thời gian làm đồ án có hạn nên chúng em chỉ tập trung tìm hiểu các tính năngcủa PIC 16F877A có liên quan đến đề tài
1.4.3.Cấu trúc vi điều khiển PIC16F877A
PIC 16F877A là dòng PIC khá phổ biến, khá đầy đủ tính năng phục vụ cho hầuhết tất cả các ứng dụng thực tế Đây là dòng PIC khá dễ cho người mới làm quenvới PIC có thể học tập và tạo nền tảng về họ vi điều khiển PIC của mình
PIC 16F877A thuộc họ vi điều khiển 16Fxxx có các đặc tính ngoại vi sau:
- Ngôn ngữ lập trình đơn giản với 35 lệnh có độ dài 14 bit
- Tất cả các câu lệnh thực hiện trong một chu kì lệnh ngoại trừ một số câu lệnh rẽnhánh thực hiện trong hai chu kì lệnh Chu kì lệnh bằng 4 lần chu kì dao động củathạch anh
- Bộ nhớ chương trình Flash 8Kx14 words, với khả năng ghi xóa khoảng 100ngàn lần
- Bộ nhớ chương trình 8Kx14 bit, bộ nhớ dữ liệu 368x8byte RAM và bộ nhớ
dữ liệu EEPROM với dung lượng 256x8 byte Số PORT I/O là 5 với 33pin I/O
- Khả năng ngắt (lên tới 14 nguồn cả ngắt trong và ngắt ngoài)
- Ngăn nhớ Stack được chia làm 8 mức
- Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp
- Dải điện thế hoạt động rộng: 2.0V đến 5.5V
Trang 12- Nguồn sử dụng 25mA.
- Công suất tiêu thụ thấp:<0.6mA với 5V, 4MHz
20µA với nguồn 3V, 32 KHz
- Có 3 timer:
Timer 0: bộ đếm 8 bit với bộ chia tần số 8 bit
Timer 1: bộ đếm 16 bit với bộ chia tần số,có thể thực hiện chức năng đếm dựa vàoxung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep
Timer 2: bộ đếm 8 bit với bộ chia tần số, bộ postcaler
- Hai bộ Capture/so sánh/điều chế độ rông xung
- Các chuẩn giao tiếp nối tiếp SSP (Synchronous Serial Port), SPI và I2C
- Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ
- Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân điều khiển
RD, WR,CS ở bên ngoài
Các đặc tính Analog:
- 8 kênh chuyển đổi ADC 10 bit
- Hai bộ so sánh
Bên cạnh đó là một vài đặc tính khác của vi điều khiển như:
- Bộ nhớ flash với khả năng ghi xóa được 100.000 lần
- Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần
- Dữ liệu bộ nhớ EEPROM có thể lưu trữ trên 40 năm
- Khả năng tự nạp chương trình với sự điều khiển của phần mềm
- Nạp được chương trình ngay trên mạch điện ICSP (In Circuit SerialProgramming) thông qua 2 chân
- Watchdog Timer với bộ dao động trong
- Chức năng bảo mật mã chương trình
- Chế độ Sleep
- Có thể hoạt động với nhiều dạng Oscillator khác nhau
Trang 13Hình 1.4: Sơ đồ khối bộ vi điều khiển PIC 16F877X
Trang 14PIC 16F877A có tất cả 40 chân,được chia thành 5 PORT, 2 chân cấp nguồn, 2chân GND, 2 chân thạch anh và 1 chân dùng để RESET vi điều khiển.
Hình 1.5: Hình ảnh thực tế và sơ đồ chân của PIC 16F877A
5 port của PIC 16F877A bao gồm:
- : đầu vào reset tích cực ở mức thấp
- Vpp: đầu vào nhận điện áp lập trình khi lập trình cho PIC
+ Chân RA0/AN0(2), RA1/AN1(3), RA2/AN2(3): có 2 chức năng
Trang 15- RA 0,1,2: xuất/ nhập số.
- AN 0,1,2: đầu vào tương tự của kênh thứ 0,1,2
+ Chân RA2/AN2/VREF-/CVREF+(4): xuất nhập số/ đầu vào tương tự của kênhthứ 2/ đầu vào điện áp chuẩn thấp của bộ AD/ đầu vào điện áp chẩn cao của bộ AD.+ Chân RA3/AN3/VREF+(5): xuất nhập số/ đầu vào tương tự kênh 3/ đầu vào điện
áp chuẩn (cao) của bộ AD
+ Chân RA4/TOCK1/C1OUT(6): xuất nhập số/ đầu vào xung clock bên ngoài choTimer 0/ đầu ra bộ so sánh 1
+ Chân RA5/AN4/ / C2OUT(7): xuất nhập số/ đầu vào tương tự kênh 4/ đầu vàochọn lựa SPI phụ/ đầu ra bộ so sánh 2
+ Chân RB0/INT (33): xuất nhập số/ đầu vào tín hiệu ngắt ngoài
+ Chân RC6/TX/CK(25): xuất nhập số/ truyền bất đồng bộ USART/ xung đồng bộUSART
+ Chân RC7/RX/DT(26): xuất nhập số/ nhận bất đồng bộ USART
+ Chân RD0-7/PSP0-7(19-30): xuất nhập số/ dữ liệu port song song
Trang 16Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hóabởi bộ đếm chương trình
Trang 17Hình 1.6: Bộ nhớ chương trình PIC 16F877A
Bộ nhớ dữ liệu của PIC là bộ nhớ EFPROM được chia ra làm nhiều bank Đốivới PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank Mỗi bank có dung lượng
128 byte, bao gồm các thanh ghi có chức năng đặc biệt SFG (Special FuncitionRegister) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chungGPR(General Purpose Register) nằm ở vùng địa chỉ trong bank Các thanh ghi SFRthường xuyên được sử dụng sẽ được đặt ở tất cả các bank của bộ nhớ dữ liệu giúpthuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của chương trình Sơ đồ
cụ thể của bộ nhớ dữ liệu PIC 16F877A như sau:
Trang 18Hình 1.7: Bộ nhớ dữ liệu của PIC
Trang 19 Thanh ghi chức năng đặc biệt SFR
Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập vàđiều khiển các khối chức năng được tích hợp trong vi điều khiển Có thể phânthanh ghi SFR làm 2 loại: thanh ghi SFR liên quan đến chức năng bên trong(CPU)
và thanh ghi SFR dùng để thiết lập và điều khiển các khối bên ngoài(ví dụ ADC ).Phần này sẽ đề cập đến các thanh ghi liên quan đến các chức năng bên trong Cácthanh ghi dùng để thiết lập và điều khiển các khối chức năng sẽ được nhắc đến khi
về xung tácđộng, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh):thanh ghi cho phép đọc và ghi, chứacácbit điều khiển và các bit cờ hiệu khi timer0 bị tràn, ngắt ngoại vi RB0/INT vàngắt interrput-on-change tại các chân của PORTB
Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối chứcnăng ngoại vi
Thanh ghi PIR1 (0Ch) : chứa cờ ngắt của các khối chức năng ngoại vi, các ngắt
Trang 20nàyđược cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1.
Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức năngCCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM
Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các ngắtnày được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2
Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset của viđiều khiển
Thanh ghi mục đích chung GPR.
Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông quathanh ghi FSG(File Select Register) Đây là các thanh ghi dữ liệu thông thường,người sử dụng có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghinày để chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chươngtrình
1.5 LED 7 thanh.
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 7thanh" Led 7 thanh đượ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 thanh được dùng để hiển thị nhiệt độ phòng,
Trang 21trong các đồng hồ treo tường bằng điện tử, hiển thị số lượng sản phẩm được kiểmtra sau một công đoạn nào đó
Led 7 thanh 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ủaled 7 thanh 8 led đơn trên led 7 thanh có Anode(cực +) hoặc Cathode(cực -) đượcnố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 rangoài để kết nối với mạch điện
Led 7 thanh có 2 loại:
Anode (cực +) chung: đầu (+) chung này được nối với +Vcc, các chân còn lạidù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 đặtvào các chân này ở mức 0
Cathode (cực -) chung: đầu( -) chung được nối xuống Ground (hay Mass), cácchân còn lại dung để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sángkhi tín hiệu đặt vào các chân này ở mức 1
Hình 1.8: Sơ đồ kết nối led đôi
Hiển thị LED 7 thanh là phần tử hiển thị thông dụng, để hiển thị các phần tử
số từ 0 đến 9 trong một số hệ thập phân Nó gồm 7 thanh xếp thành hình số 8, mỗithanh là một diode ( LED ) phát quang hoặc hiển thị tinh thể lỏng Điode thườngđược cấu tạo từ các chất Ga, As, P …nó cũng có tính chất chỉnh lưu như diodethường Nhưng khi điện áp thuận đạt nên diode vượt quá mức ngưỡng Ung nào đó
Trang 22thì diode sáng Điện áp ngưỡng thay đổi từ 1,5 đến 5 v tuỳ theo từng loại có màusắc khác nhau.
LED màu đỏ có điện áp ngưỡng Ung = 1,6 đến 2V
LED màu cam có điện áp ngưỡng Ung = 2,2 đến 3V
LED màu xanh lá cây có điện áp ngưỡng Ung = 2,8 đến 3,2V
LED màu vàng có điện áp ngưỡng Ung = 2,4 đến 3, 2V
LED màu xanh ra trời có điện áp ngưỡng Ung = 3 đến 5V
Thiết kế bộ giải mã hiển thị cho LED 7 thanh với tín hiệu đầu vào là mã BCDDạng chỉ thị led 7 thanh :
Hình 1.9: Led 7 thanh
Vì led 7 thanh chứa bên trong nó các led đơn, do đó khi kết nối cần đảm bảo dòngqua mỗi led đơn trong khoảng 10mA-20mA để bảo vệ led Nếu kết nối với nguồn5V có thể hạn dòng bằng điện trở 220Ω trước các chân nhận tín hiệu điều hiển.Các điện trở 220Ω là các điện trở bên ngoài được kết nối để giới hạn dòng điện qualed nếu led 7 thanh được nối với nguồn 5V
Chân nhận tín hiệu a điều khiển led a sáng tắt, đầu vào b để điều khiển, tương tựvới các chân và các led còn lại
Trong mạch chúng em sử dụng Led7 thanh loại đôi Anode chung
Trang 23CHƯƠNG 2: THIẾT KẾ VÀ CHẾ TẠO MẠCH 2.1 Sơ đồ khối.
2.1.1 Sơ đồ.
Hình 2.1: Sơ đồ khối.
2.1.2.Phân tích chức năng các khối.
Khối thời gian thực: xác định thời gian thực (giờ, phút) để đưa vào khối điềukhiển
Khối cài đặt: sử dụng các nút nhấn có tác dụng hiệu chỉnh thời gian, ngày,tháng trong mạch
Khối điều khiển: lấy tín hiệu từ khối cài đặt, khối thời gian thực, khối cảmbiến nhiệt độ xử lý rồi đưa ra khối hiển thị
Khối cảm biến:
Khối cảm biến có chức năng đo nhiệt độ của môi trường và đưa tín hiệu thuđược đến khối vi xử lí qua chân 15 của vi điều khiển PIC16F877A
Khối hiển thịKhối điều khiển
Khối thời gian thực
Khối cài đặt
Khối nguồn
Khối cảm biến
nhiệt độ
Trang 24 Khối hiển thị:
- Nhận tín hiệu từ vi điều khiển PIC16F877A
- Có chức năng hiển thị giờ-phút-giây và ngày-tháng-năm và nhiệt độ lên LED 7thanh
Khối nguồn:
- Có chức năng cung cấp nguồn cho toàn mạch điện
2.2 Sơ đồ toàn mạch.
2.2.1 Sơ đồ
Trang 25Hình 2.2: Sơ đồ toàn mạch
Trang 262.2.2 Phân tích nguyên lý hoạt động của toàn mạch.
Khối nguồn 5VDC cung cấp điện cho toàn mạch
IC DS1307 thời gian thực (được nuôi bằng pin 3v khi không có điện cungcấp) và được đưa tín hiệu đến khối điều khiển PIC16F877A nhận tín hiệu, xử lý vàđưa tới khối hiển thị Tại khối hiển thị thời gian hiện tại giờ- phút và ngày- tháng-năm dương lịch và âm lịch Có thể điều chỉnh các giá trị trên thông qua khối càiđặt
DS18B20 cảm biến nhiệt độ dữ liệu chân 2- DQ đưa vào chân RC0 củaPIC16F877A nhận tín hiệu đưa tới khối hiển thị để hiển thị nhiệt độ
Tạo dao động : gồm thạch anh 20MHz và 2 tụ đất 33pF
Khối hiển thị gồm các led 7 thanh, hàng thứ nhất hiển thị giờ- phút, hàng thứ
2 ngày- tháng- năm dương lịch, hàng thứ 3 hiển thị ngày- tháng âm lịch và thứ,hàng cuối cùng hiển thị nhiệt độ
2.2 Sơ đồ chi tiết các khối.
2.3.1 Khối nguồn.
Hình 2.3: Nguồn cung cấp cho mạch
Dùng nguồn adapter
Dải điện áp vào: AC 100-240V 50- 60Hz
Điện áp ra max: 5VDC- 1000mA
Made in China
Trang 272.3.2 Khối điều khiển và khối cài đặt
Hình 2.4: Khối điều khiển và khối cài đặt.
- PIC16F877A xử lý tín hiệu nhận được và truyền đến khối hiển thị Khi hệthống được cấp nguồn PIC16F877A bắt đầu đọc thời gian thực RTC Khi thời gian
đã được đọc , vi điều khiển tiến hành thời gian xử lý thời gian vừa đọc và xuất dữliệu ra các cổng, dữ liệu từ PORT B được nối với đầu vào của IC 74HC595N cóchức năng giải mã Một số đầu ra của IC giải mã trước khi kết nối với led 7 thanhđược xuất qua IC đệm UNL2003A Nếu không trùng với thời gian thực thì ta tiếnhành chỉnh cho đúng với thời gian thực Khi thực hiện xong quá trình xử lý kết quả,
vi điều khiển xuất dữ liệu ra led 7 thanh
Sau đó vi điều khiển quay về thực hiện quá trình như ban đầu Trong trườnghợp vi điều khiển nhận được tín hiệu từ nút bấm, vi điều khiển tạm dừng hoạt độngtất cả các chương trình phục vụ chương trình ngắt để hiệu chỉnh thời gian Đồngthời ghi vào DS1307 và khi hết quá trình hiệu chỉnh thì vi ddieuf khiển hoạt độngbình thường
- Gồm 3 phím nhấn có tác dụng hiệu chỉnh thời gian ngày, tháng , năm Khiđược tác động thì điện áp +5V từ nguồn được nối vào chân của vi điều khiển chạy
Trang 28thẳng xuống GND Lúc này điện áp từ chân vi điều khiển thay đổi đột ngột về 0, viđiều khiển nhận biết được sự thay đổi này và thực hiện chức năng điều chỉnh.
2.3.4 Khối thời gian thực DS1307.
Hình 2.5: Khối thời gian thực
IC DS1307 đếm thời gian, có 1 pin cấp nguồn khi mất điện để có thể đưa đượctín hiệu đến khối điều khiển
2.3.5 Khối cảm biến nhiệt độ DS18B20.
Hình 2.6: Khối cảm biến nhiệt độ
Trang 29Khi có nguồn IC cảm biến DS18B20 cảm nhận nhiệt độ môi trường đưa tới
vi điều khiển vi điều khiển thực hiện chương trình, xuất dữ liệu ra PORT B và hiểnthi trên led 7 thanh
2.3.6 Khối hiển thị
Hình 2.7: khối hiển thị
Ở chế độ hiển thị giờ, phút, giây: 2 led hiển thị giờ, 2 led hiển thị phút, 2 led đơnnhấp nháy thể hiện giây
Trang 30Ở chế độ hiển thị ngày, tháng, năm (dương lịch), thứ trong tuần: 2 led hiển thịngày, 2 led hiển thị tháng, 2 led hiển thị 2 số cuối hiển thị năm, 1 led hiển thị htuwstrong tuần ( từ thứ 2 đến thứ 7 hiển thị giá trị từ 2 đến 7, chủ nhật led hiển thị giá trị8).
Ở chế độ ngày tháng âm lịch: 2 led hiển thị ngày âm, 2 led hiển thị tháng âm
Vi điều khiển làm nhiệm vụ điều khiển cho từng led sáng trong khoảng thời giannhất định Tại mỗi thời điểm chỉ có 1 led sáng và các chân dữ liệu tích cực ở mứcthấp
2.4 Lưu đồ thuật toán.
2.4.1 Thuật toán chương trình chính
Trang 312.4.2 Sơ đồ thuật toán cho chương trình thời gian.
Trang 322.4.3 Lưu đồ thuật toán cho chương trình nhiệt độ.
Nhiệt độ
Khởi tạo giá trị ban
đầu
Truy cập vào ICDS18B20
Hiển thị ra led 7thanh
Ret
Trang 332.4.3 Lưu đồ thuật toán cho chương trình bàn phím.
Đ S
Chỉnh phút
Chỉnh ngày
Chỉnh năm
Hiển thị giờ
Hiển thị năm Hiển thị tháng
Hiển thị phút
Chỉnh thứ Hiển thị thứ
Trang 342.5.Chương trình điều khiển.
{ 8,10, 9,11,11,12,13,14,16,16,18,18},//2012 {20,21,20,21,22,23,24,25,26,27,28,29},//2013
Trang 36{31,31,31,29,29,27,27,25,24,24,22,22},//2014 {20,19,20,19,18,16,16,14,13,13,12,11},//2015 {10, 8, 9, 7, 7, 5, 4, 3, 1,31,29,29},//2016
{28,26,28,26,26,24,23,22,20,20,18,18},//2017 {17,16,17,16,15,14,13,11,10, 9, 7, 7},//2018 { 6, 5, 6, 5, 5, 3, 3,30,29,28,26,26},//2019
{25,23,24,23,23,21,21,19,17,17,15,14},//2020
{13,12,13,12,12,10,10, 8, 7, 6, 5, 4},//2021
{ 3,29, 3,31,30,29,29,27,26,25,24,23},//2022 {22,20,22,20,19,18,18,16,15,15,13,13},//2023 {11,10,10, 9, 8, 6, 6, 4, 3, 3,31,31},//2024
Trang 38unsigned char
RTCLunarRTC_Mday,RTCLunarRTC_Mon,RTCLunarRTC_Year;void lunar_calculate(unsigned char x,unsigned char k,unsigned char t){
char luu,tam_1;
unsigned char da,db,day_1,mon_1,year_1;
unsigned char lmon;
if(luu>31){RTCLunarRTC_Mday = (day_1-db+1);
RTCLunarRTC_Mon =thangALdauthangDL[year_1-10][mon_1];// }
else{
RTCLunarRTC_Mday = (day_1+da-1);
RTCLunarRTC_Mon = thangALdauthangDL[year_1-10][mon_1-1]; }}
lmon = RTCLunarRTC_Mon;