CƠ SỞ LÝ THUYẾT GIỚI THIỆU VI ĐIỀU KHIỂN ATMEGA16 GIỚI THIỆU MỘT SỐ LINH KIỆN LÀM MẠCH IN THIẾT KẾ, CHẾ TẠO MẠCH SƠ ĐỒ KHỐIVÀ SƠ ĐỒ NGUYÊN LÝ KHỐI VI ĐIỀU KHIỂN KHỐI CHẤP HÀNH KHỐI NGUỒN KHỐI NÚT BẤM KHỐI CẢM BIẾN LƯU ĐỒ THUẬT TOÁN CỦA CHƯƠNG TRÌNH CHÍNH
BỘ GIÁO DỤC VÀ ĐÀO TẠO *** ĐỒ ÁN VI ĐIỀU KHIỂN Đề tài : MẠCH ĐỒNG HỒ HIỂN THỊ THỜI GIAN THỰC CÓ HẸN GIỜ Giảng viên hướng dẫn: Sinh viên thực hiện: Hà Nội - 2021 MỤC LỤC MỤC LỤC DANH SÁCH HÌNH VẼ VÀ BẢNG BIỂU .3 TÀI LIỆU THAM KHẢO DANH SÁCH CÁC TỪ VIẾT TẮT LỜI MỞ ĐẦU CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1.1 GIỚI THIỆU VI ĐIỀU KHIỂN ATMEGA16 .9 1.1.1 Kiến trúc vi điều khiển 1.1.2 Mô tả chân .10 1.1.3 Ngắt vi điều khiển .11 1.1.4 Chức timer/couter .12 1.1.5.Các ghi timer/couter 12 1.1.6 Các chế độ timer/couter .13 1.2 GIỚI THIỆU MỘT SỐ LINH KIỆN 15 1.2.1 Transistor .15 1.2.2 Điện trở 18 1.2.3 Tụ điện 21 1.2.4 Diode 22 1.2.5 Led đơn 25 1.2.6 Led 26 1.3 LÀM MẠCH IN 34 1.3.1 Giới thiệu mạch in 34 1.3.2 Các bước thực làm mạch in 35 CHƯƠNG 2: THIẾT KẾ, CHẾ TẠO MẠCH 40 2.1 SƠ ĐỒ KHỐIVÀ SƠ ĐỒ NGUYÊN LÝ 40 2.1.1 Sơ đồ khối 40 2.1.2 Sơ đồ nguyên lý .41 2.1.3 Sơ đồ mạch in 41 2.2 KHỐI VI ĐIỀU KHIỂN 42 2.2.1.Sơ đồ nguyên lý khối vi điều khiển 42 2.2.2 Lập trình cổng vào/ra 43 2.3 KHỐI CHẤP HÀNH 44 2.4 KHỐI NGUỒN .45 2.5 KHỐI NÚT BẤM 46 2.6 KHỐI CẢM BIẾN .46 2.7 LƯU ĐỒ THUẬT TỐN CỦA CHƯƠNG TRÌNH CHÍNH 48 2.8 KẾT QUẢ 49 2.9 HƯỚNG PHÁT TRIỂN 49 KẾT LUẬN 50 PHỤ LỤC 51 DANH SÁCH HÌNH VẼ VÀ BẢNG BIỂU HÌNH 1.1: ATMEGA16 HÌNH 1.2: SƠ ĐỒ CHÂN CỦA ATMEGA16 10 HÌNH 1.3 HÌNH DẠNG CỦA TRANSISTOR 15 HÌNH 1.4: KÝ HIỆU CỦA TRANSISTOR TRONG MẠCH ĐIỆN 15 HÌNH 1.5 CẤU TẠO CỦA TRANSISTOR .16 HÌNH 1.6 HÌNH ẢNH LIÊN TƯỞNG CỦA TRANSISTOR .17 HÌNH 1.7: MẠCH ĐA HÀI 17 HÌNH 1.8: MẠCH LOA 18 HÌNH 1.9: KÍ HIỆU ĐIỆN TRỞ 18 HÌNH 1.10: VÍ DỤ ĐỌC GIÁ TRI ĐIỆN TRỞ 19 HÌNH 1.11: HÌNH DẠNG CỦA ĐIỆN TRỞ LOẠI THƯỜNG 20 HÌNH 1.12: TRỞ CÔNG SUẤT 20 HÌNH 1.13: KÍ HIỆU TỤ ĐIỆN TRONG MẠCH .21 HÌNH 1.14: HÌNH DẠNG TỤ ĐIỆN .21 HÌNH 1.15: PHÂN CỰC THUẬN VÀ PHÂN CỰC NGƯỢC CHO DIODE 22 HÌNH 1.16: KÍ HIỆU DIODE 22 HÌNH 1.17: MẠCH CHỈNH LƯU MỘT NỬA CHU KÌ 23 HÌNH 1.18: KÍ HIỆU DIODE ZENNER 23 HÌNH 1.19: MẠCH ỔN ÁP 23 HÌNH 1.20: KÍ HIỆU DIODE PHÁT QUANG 24 HÌNH 1.21: DIODE 1N4148 .24 HÌNH 1.22: KÍ HIỆU DIODE SCHOTTKY 24 HÌNH 1.23: LED ĐƠN .25 HÌNH 1.24: CẤU TẠO LED ĐƠN 25 HÌNH 1.25: HÌNH DẠNG THỰC TẾ CỦA LED ĐOẠN 27 HÌNH 1.26: CẤU TẠO LED ĐOẠN CATHODE ĐOẠNHUNG VÀ ANODE CHUNG 28 HÌNH 1.27: KẾT NỐI VI ĐIỀU KHIỂN 32 HÌNH 1.28: HIỂN THỊ SỐ LED THANH THỨ NHẤT .33 HÌNH 1.29: HIỂN THỊ SỐ LED THANH THỨ HAI 33 HÌNH 1.30: HIỂN THỊ SỐ 45 LÊN LED THANH 34 HÌNH 1.31: HÌNH VẼ CỦA MẠCH NGUYÊN LÝ CHUYỂN QUA PCB 35 HÌNH 1.32: ĐƯỜNG MẠCH IN LÊN GIẤY THỦ CƠNG 35 HÌNH 1.33: PHÍP ĐỒNG 36 HÌNH 1.34: CỐ ĐỊNH MẠCH IN LÊN PHÍP ĐỒNG .36 HÌNH 1.35: MẠCH SAU KHI BÓC GIẤY IN RA 37 HÌNH 1.36: ĂN MỊN PHÍP ĐỒNG 38 HÌNH 1.37: KHOAN TAY 39 HÌNH 2.1: SƠ ĐỒ KHỐI .40 HÌNH 2.2: SƠ ĐỒ NGUYÊN LÝ 41 HÌNH 2.3: SƠ ĐỒ MẠCH IN LỚP TOP .41 HÌNH 2.4: SƠ ĐỒ MẠCH IN LỚP BOTTOM 42 HÌNH 2.5: KHỐI VI ĐIỀU KHIỂN .42 HÌNH 2.6: KHỐI CHẤP HÀNH 44 HÌNH 2.7: RELAY 5V .44 HÌNH 2.8: KHỐI NGUỒN 45 HÌNH 2.9: LM7805 45 HÌNH 2.10: KHỐI NÚT BẤM .46 HÌNH 2.11: KHỐI CẢM BIẾN .46 HÌNH 2.12: LƯU ĐỒ THUẬT TỐN CHƯƠNG TRÌNH CHÍNH .48 HÌNH 2.13: SẢN PHẨM HOÀN THÀNH 49 Bảng 1.1: Bảng màu đọc giá trị điện trở BẢNG 2.1: BẢNG MÃ CHO LED ANODE CHUNG .29 BẢNG 2.2: BẢNG MÃ CHO LED CATHODE CHUNG 30 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Lâm Quang Chuyên, 2012, Giáo trình vi điều khiển, Trường Cao đẳng Cơng thương Tp HCM [2] Nguyễn Đình Phú, Nguyễn Trường Duy, 2013, Kỹ Thuật Số, Xuất Đại Học Quốc Gia, Tp.HCM Tiếng Anh [1] Brander, J., 1985a, Competition Management, Journal of International Economics, Số 18, trang 83-100 [2] Brander, J., 1985b, Benefits of Competition, Journal of International Economics, Số 18, trang 68-108 [3] Jaffe, J and Westerfield R., 1985, The impact of inflation, Journal of Finance, Số 40, trang 25-34 DANH SÁCH CÁC TỪ VIẾT TẮT - ANODE - dương nguồn - ALE address latch enable – cho phép chốt địa - ACC accumulator – xạc điện - CATHODE - âm nguồn - COMPARE MATCH – so sánh trận đấu - CPU central processing unit – xử lý trung tâm - C/T timer/couter – đếm định thời - EA external access – truy cập - EEPROM electrically erasable programmableread only memory–chip nhớ khơng xóa - GND ground – đất - IC Intergrated circuit – mạch tích hợp - I/O Port In/Out Port – cổng xuất nhập - LEDLight Emitting Diode – Diode phát quang - OSC oscillator – khối dao động - OCIE0Timer/Counter0 Output Compare Match Interrupt Enable – so sánh trận đấu ngắt kích hoạt - PSEN program store enable – cho phép lưu trữ chương trình - PC program computer – đếm chương trình - ROM read only memory – nhớ đọc - RAM random access memory – nhớ truy cập ngẫu nhiên - SRAM static random acess memory – nhớ truy xuất liệu ngẫu nhiên tĩnh - RET return – quay lại - VCC– dương nguồn - SFR special function register – ghi chức đặc biệt LỜI MỞ ĐẦU Đặt vấn đề Ngày việc ứng dụng vi điều khiển, vi xử lý ngày phát triển rộng rãi thâm nhập ngày nhiều vào lĩnh vực kỹ thuật đời sống xã hội Tuy nhiên ứng dụng cho hệ thống nhúng ngày không đơn giản dừng lại điều khiển đèn nhấp nháy, đếm số người vào/ra, hiển thị dịng thơng báo matrix led hay điều khiển ON-OFF động cơ… mà ngày trở nên phức tạp Và với xu hướng tất yếu với phát triển mạnh mẽ công nghệ chế tạo vi mạch, người ta tạo vi điều khiển có cấu trúc mạnh hơn, đáp ứng thời gian thực tốt hơn, chuẩn hóa so với vi điều khiển bit trước Ở Việt Nam, khơng nằm ngồi xu thời đại, nhà nghiên cứu, kỹ sư đặc biệt hệ trẻ, bạn sinh viên tích cực, say mê nghiên cứu khoa học để tìm kỹ thuật mới, trao đổi, học hỏi tiếp thu công nghệ giới để phục vụ cho cơng đại hóa- cơng nghiệp hóa đất nước Dẫu biết trình độ khoa học - kỹ thuật Việt Nam nhiều lĩnh vực có khoảng cách xa so với nước tiên tiến với lịng say mê tìm tịi, đức tính cần cù chịu khó thơng minh người Việt Nam, tin ngày không xa, bắt kịp hịa nhịp vào dịng chảy cơng nghệ giới Lý chọn đề tài - Đây vấn đề thực tế, ứng dụng ngày - Nhằm để củng cố kiến tức lập trình vi điều khiển vừa học rèn luyện khả học hỏi nên chúng em chọn đề tài Mục đích - Đồng hồ hiển thị phút giây, đo nhiệt độ - Đồng hồ có khả chỉnh lại cài đặt thêm h ẹn bật/tắt thiết bị Nhiệm vụ yêu cầu - Hệ thống làm việc ổn định - Có khả đưa mơ hình vào ứng dụng thực tế Ý nghĩa Hiện phát triển khơng ngừng mặt, điện tử, tự động hóa đóng vai trị với khơng nhỏ Điện tử góp phần vào q trình tự động hóa thứ giúp người đại hóa sống hệ thống tự động hóa điều khiển dần thay cho sức người cơng việc gia đình quan, trường học, xí nghiệp,… hệ thống tự động đơn giản hệ thống “Đồng Hồ Hiển Thị Thời Gian Thực” trường học, gia đình, xí nghiệp Vấn đề đồng hồ hiển thị thời gian thực vấn đề cần thiết trường học, gia đình, xí nghiệp nào, giúp người biết thời gian để xếp công việc Sau gần năm học tập nghiên cứu trường, chúng em làm quen với môn học chuyên ngành Chính để áp dụng lý thuyết với thực tế chúng em lựa chọn yêu cầu “Thiết kế đồng hồ thời gian thực hiển thị LED có hẹn giờ” Tuy nhiên kiến thức chun mơn cịn hạn chế, tài liệu tham khảo có giới hạn nên cịn xảy nhiều sai sót Chúng em r ất mong mong thầy bạn góp ý bổ sung để đồ án chúng em hoàn thiện giúp chúng em hiểu biết trình h ọc tập Nhóm chúng em xin chân thành cảm ơn! Nhóm - Đồ án Vi điều khiển- 69DCCN21 Hình 2.47: Khối nút bấm Khối có tác dụng đưa lệnh vào vi điều khiển, phục vụ cho mục đích cài đặt lại thời gian chạy sai, cài đặt thời gian hẹn mở thời gian tắt thiết bị Khối nút bấm bao gồm nút với chức sau: MODE1, MODE2, TĂNG GIỜ, GIẢM GIỜ, TĂNG PHÚT, GIẢM PHÚT, OK Các thông số cài đặt lưu vào nhớ EEPROM vi điều khiển 2.6 KHỐI CẢM BIẾN VC C U G N D VS+ VO U T AD C L M /T O Hình 2.48: Khối cảm biến Khối cảm biến sử dụng cảm biến nhiệt độ LM35 dùng để đo nhiệt độ mơi trường, sau hiển thị kết lên LED Cảm biến LM35 IC cảm biến nhiệt xác cao mà điện áp đầu tỷ lệ tuyến tính với nhiệt độ theo thang độ Celsius Chúng không yêu cầu cân chỉnh ngồi vốn chúng cân chỉnh Đặc điểm cảm biến LM35: + Điện áp đầu vào từ 4V đến 30V + Độ phân giải điện áp đầu 10mV/oC + Độ xác cao 25oC 0.5oC + Trở kháng đầu thấp: 0.1 cho 1mA tải Dải nhiệt độ đo LM35 từ -55oC đến -150oC với mức điện áp khác Xét số mức điện áp sau : - Nhiệt độ -55oC điện áp đầu -550mV - Nhiệt độ 25oC điện áp đầu 250mV - Nhiệt độ 150oC điện áp đầu 1500mV Nhóm - Đồ án Vi điều khiển- 69DCCN21 Tính tốn nhiệt độ đầu LM35: Việc đo nhiệt độ dụng LM35 thông thường sử dụng cách LM35 - > ADC - > Vi điều khiển Như ta có: U= t.k u điện áp đầu t nhiệt độ môi trường đo k hệ số theo nhiệt độ LM35 10mV/1 độ C Nhóm - Đồ án Vi điều khiển- 69DCCN21 2.7 LƯU ĐỒ THUẬT TỐN CỦA CHƯƠNG TRÌNH CHÍNH Start Đọc thời gian từ DS1307 Time Đóng Đ S Time S Hiển thị Mở Đ LED NÚT MODE? S MODE == 1? S MODE == 2? S MODE == 3? S END Relay Relay MODE+ Đ + Cài đặt thời gian Đ Cài đặt đồng hồ thời gian Đ bật Cài đặt Relay thời gian Đ tắt Relay Hình 2.49: Lưu đồ thuật tốn chương trình Nhóm - Đồ án Vi điều khiển- 69DCCN21 2.8 KẾT QUẢ Sau tuần tìm hiểu thiết kế với tên đề tài “Thiết kế đồng hồ thời gian thực hiển thị LED có hẹn giờ” nhóm em đạt kết mạch hoàn thành hoạt động đạt yêu cầu mong muốn Mạch nhỏ gọn, thẩm mỹ, hoạt động xác ổn định Hình 2.50: Sản phẩm hồn thành Trong trình tìm hiểu thiết kế giúp cho chúng em tích lũy thêm nhiều kiến thức từ vẽ mạch, thông tin linh kiện, đến thiết kế mạch, hồn thành mạch viết code chương trình cho mạch hoạt động Quá trình làm đồ án gặp nhiều khó khăn, vất vả chúng em cảm thấy hài lịng với đạt 2.9 HƯỚNG PHÁT TRIỂN Trong đề tài nhóm dừng lại mức độ hẹn bật tắt thiết bị lần ngày Hướng phát triển đề tài em thiết kế thêm nhiều thiết bị cài đặt bật, tắt thiết bị nhiều lần ngày Nhóm - Đồ án Vi điều khiển- 69DCCN21 KẾT LUẬN Sau thời gian tìm hiểu thiết kế với bảo giúp đỡ tận tình thầy giáo “HỒNG THẾ PHƯƠNG”, đến em hoàn thành đồ án thiết kế với yêu cầu “Thiết kế đồng hồ thời gian thực hiển thị LED có hẹn giờ” Kết thiết kế lắp ráp thành mạch điện kết hoạt động mạch đạt yêu cầu thiết kế Qua đề tài thiết kế giúp em áp dụng kiến thức học vào thực tế đồng thời nâng cao khả tự tìm hiểu thiết kế mạch điện tương tự Từ kiến thức thu trình thực đồ án giúp em có thêm kinh nghiệm để thiết kế mạch điện có độ phức tạp cao Với hạn chế mặt khách quan chủ quan số vấn đề khơng tìm hiểu quan tâm đầy đủ Vì thiếu sót đề tài khơng thể tránh q trình thực đề tài Em mong có đóng góp ý kiến thầy cô bạn để em hồn thiện Em xin chân thành cảm ơn ! Nhóm - Đồ án Vi điều khiển- 69DCCN21 PHỤ LỤC Code chương trình #include #include #include "include\ds1307.h" #define FIRST_ADC_INPUT #define LAST_ADC_INPUT #define ADC_VREF_TYPE 0x00 #define #define #define #define #define #define #define #define #define #define #define DK1 DK2 DK3 DK4 DK5 DK6 DK7 DK8 DK9 DK10 DKRELAY #define #define #define #define #define #define #define SW_OK SW_INC_1 SW_DEC_1 SW_INC_2 SW_DEC_2 SW_MODE1 SW_MODE2 PIND.0 PIND.3 PIND.4 PIND.2 PIND.1 PIND.6 PIND.5 #define #define #define #define #define #define #define #define #define #define #define #define #define LED7CODE_C LED7CODE_S LED7CODE_E LED7CODE_u LED7CODE_O LED7CODE_n LED7CODE_F LED7CODE_A LED7CODE_L LED7CODE_v LED7CODE_d LED7CODE LED7CODE_Do 0xC6 0x92 0x86 0xE3 0xC0 0xAB 0x8E 0x88 0xC7 0xE1 0xA1 0xBF 0x9C #define #define #define #define #define MODE_NORMAL MODE_SET_TIME MODE_SET_ON MODE_SET_OFF MODE_SAVED 99 #define MODE_MAX PORTC.1 PORTC.2 PORTC.3 PORTC.4 PORTA.3 PORTA.2 PORTA.6 PORTA.7 PORTC.7 PORTC.6 PORTC.0 #define TIME_ON #define TIME_OFF unsigned char number[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF}; unsigned char LED7x4Code[4] = {0xFF, 0xFF, 0xFF, 0xFF}; Nhóm - Đồ án Vi điều khiển- 69DCCN21 unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; unsigned int nhietdo = 29; unsigned char mode = 0; unsigned char GiohtCode[2], PhuthtCode[2], GiayhtCode[2]; unsigned char GioSet, PhutSet, ThuSet, NgaySet, ThangSet, NamSet; unsigned char GioSetON, PhutSetON, GioSetOFF,PhutSetOFF; unsigned char dem = 0, FirstTimeFlag = 0; extern RTCTYPE RTC; unsigned int time; eeprom unsigned char GioON = 1, PhutON = 0, GioOFF = 5,PhutOFF = 0; // ADC interrupt service routine // with auto input scanning interrupt [ADC_INT] void adc_isr(void) { static unsigned char input_index=0; // Read the AD conversion result adc_data[input_index]=ADCW; // Select next ADC input if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0; ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index; // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; } // Timer overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { /* f = 125000Hz -> t = 8(us) TCNT0: - 255, duoc 256 chu ky Ttran = 256 * = 2048(us) */ static unsigned char Index = 0; TCCR0 = 0x00; Index++; if(Index == 1) { DK10 = 1; DK1 = 0; PORTB = GiohtCode[0]; } else if(Index == 2) { DK1 = 1; DK2 = 0; PORTB = GiohtCode[1]; } else if(Index == 3) { DK2 = 1; DK3 = 0; PORTB = PhuthtCode[0]; } else if(Index == 4) { DK3 = 1; DK4 = 0; Nhóm - Đồ án Vi điều khiển- 69DCCN21 PORTB = PhuthtCode[1]; } else if(Index == 5) { DK4 = 1; DK5 = 0; PORTB = GiayhtCode[0]; } else if(Index == 6) { DK5 = 1; DK6 = 0; PORTB = GiayhtCode[1]; } else if(Index == 7) { DK6 = 1; DK7 = 0; PORTB = LED7x4Code[0]; } else if(Index == 8) { DK7 = 1; DK8 = 0; PORTB = LED7x4Code[1]; } else if(Index == 9) { DK8 = 1; DK9 = 0; PORTB = LED7x4Code[2]; } else if(Index == 10) { DK9 = 1; DK10 = 0; PORTB = LED7x4Code[3]; Index = 0; } time++; TCCR0 = 0x03; } void RUN_Normal() // MODE { static unsigned char dem = 0; static unsigned int nhietdotong = 0; DS1307_GetTime(); GiohtCode[0] = number[RTC.byHour / 10]; GiohtCode[1] = number[RTC.byHour % 10]; PhuthtCode[0] = number[RTC.byMinute / 10]; PhuthtCode[1] = number[RTC.byMinute % 10]; GiayhtCode[0] = number[RTC.bySecond / 10]; GiayhtCode[1] = number[RTC.bySecond % 10]; if(dem < 10) { nhietdotong += (495 * (unsigned long)adc_data[0]) / 1023; dem++; } else { Nhóm - Đồ án Vi điều khiển- 69DCCN21 nhietdo = nhietdotong / 10; dem = 0; nhietdotong = 0; } LED7x4Code[0] = number[nhietdo / 10]; LED7x4Code[1] = number[nhietdo % 10]; LED7x4Code[2] = LED7CODE_Do; LED7x4Code[3] = LED7CODE_C; if(!SW_OK) { DKRELAY = - DKRELAY; while(!SW_OK); } if((RTC.byHour == GioOFF) && (RTC.byMinute == PhutOFF)) { DKRELAY = 0; } else if((RTC.byHour == GioON) && (RTC.byMinute == PhutON)) { DKRELAY = 1; } } void SETUP_Time() // MODE { GiohtCode[0] = number[GioSet / 10]; GiohtCode[1] = number[GioSet % 10]; PhuthtCode[0] = number[PhutSet / 10]; PhuthtCode[1] = number[PhutSet % 10]; GiayhtCode[0] = 0xFF; // Off GiayhtCode[1] = 0xFF; if(dem < TIME_ON) { LED7x4Code[0] = LED7CODE_S; LED7x4Code[1] = LED7CODE_E; LED7x4Code[2] = LED7CODE ; LED7x4Code[3] = LED7CODE ; } else if(dem < TIME_OFF) { LED7x4Code[0] = number[10]; LED7x4Code[1] = number[10]; LED7x4Code[2] = number[10]; LED7x4Code[3] = number[10]; } else { dem = 0; } if(!SW_INC_1) { if(GioSet < 23) { GioSet++; } else { GioSet = 0; } time = 0; } Nhóm - Đồ án Vi điều khiển- 69DCCN21 if(!SW_DEC_1) { if(GioSet > 0) { GioSet ; } else { GioSet = 23; } time = 0; } if(!SW_INC_2) { if(PhutSet < 59) { PhutSet++; } else { PhutSet = 0; } time = 0; } if(!SW_DEC_2) { if(PhutSet > 0) { PhutSet ; } else { PhutSet = 59; } time = 0; } } void SETUP_TimeON() // Cai dat thoi gian bat relay { GiohtCode[0] = number[GioSetON / 10]; GiohtCode[1] = number[GioSetON % 10]; PhuthtCode[0] = number[PhutSetON / 10]; PhuthtCode[1] = number[PhutSetON % 10]; LED7x4Code[2] = number[10]; LED7x4Code[3] = number[10]; if(dem < TIME_ON) { LED7x4Code[0] = LED7CODE_O; LED7x4Code[1] = LED7CODE_n; } else if(dem < TIME_OFF) { LED7x4Code[0] = number[10]; LED7x4Code[1] = number[10]; } else { dem = 0; } if(!SW_INC_1) Nhóm - Đồ án Vi điều khiển- 69DCCN21 { if(GioSetON < 23) { GioSetON++; } else { GioSetON = 0; } time = 0; } if(!SW_DEC_1) { if(GioSetON > 0) { GioSetON ; } else { GioSetON = 23; } time = 0; } if(!SW_INC_2) { if(PhutSetON < 59) { PhutSetON++; } else { PhutSetON = 0; } time = 0; } if(!SW_DEC_2) { if(PhutSetON > 0) { PhutSetON ; } else { PhutSetON = 59; } time = 0; } if(!SW_OK) { GioON = GioSetON; PhutON = PhutSetON; mode = MODE_SAVED;; } } void SETUP_TimeOFF() // Cai dat thoi gian tat thiet bi { GiohtCode[0] = number[GioSetOFF / 10]; GiohtCode[1] = number[GioSetOFF % 10]; PhuthtCode[0] = number[PhutSetOFF / 10]; PhuthtCode[1] = number[PhutSetOFF % 10]; Nhóm - Đồ án Vi điều khiển- 69DCCN21 LED7x4Code[3] = number[10]; if(dem < TIME_ON) { LED7x4Code[0] = LED7CODE_O; LED7x4Code[1] = LED7CODE_F; LED7x4Code[2] = LED7CODE_F; } else if(dem < TIME_OFF) { LED7x4Code[0] = number[10]; LED7x4Code[1] = number[10]; LED7x4Code[2] = number[10]; } else { dem = 0; } if(!SW_INC_1) { if(GioSetOFF < 23) { GioSetOFF++; } else { GioSetOFF = 0; } time = 0; } if(!SW_DEC_1) { if(GioSetOFF > 0) { GioSetOFF ; } else { GioSetOFF = 23; } time = 0; } if(!SW_INC_2) { if(PhutSetOFF < 59) { PhutSetOFF++; } else { PhutSetOFF = 0; } time = 0; } if(!SW_DEC_2) { if(PhutSetOFF > 0) { PhutSetOFF ; } else { Nhóm - Đồ án Vi điều khiển- 69DCCN21 PhutSetOFF = 59; } time = 0; } } void SAVED() { GiohtCode[0] = LED7CODE_d; GiohtCode[1] = LED7CODE_A; PhuthtCode[0] = LED7CODE ; PhuthtCode[1] = LED7CODE_L; GiayhtCode[0] = LED7CODE_u; GiayhtCode[1] = LED7CODE_u; LED7x4Code[0] = LED7CODE_S; LED7x4Code[1] = LED7CODE_A; LED7x4Code[2] = LED7CODE_v; LED7x4Code[3] = LED7CODE_E; DS1307_SetTime(GioSet, PhutSet, 0); GioON = GioSetON; PhutON = PhutSetON; GioOFF = GioSetOFF; PhutOFF = PhutSetOFF; delay_ms(500); mode = MODE_NORMAL; } void chuyenMODE() { if(!SW_MODE1) { if(mode < MODE_MAX) { mode++; } else { mode = 1; } while(!SW_MODE1); time = 0; } else if(!SW_MODE2) { if(mode > 1) { mode ; } else { mode = MODE_MAX; } while(!SW_MODE2); time = 0; } if(FirstTimeFlag == 0) { time = 0; GioSet = RTC.byHour; PhutSet = RTC.byMinute; GioSetON = GioON; Nhóm - Đồ án Vi điều khiển- 69DCCN21 PhutSetON = PhutON; GioSetOFF = GioOFF; PhutSetOFF = PhutOFF; FirstTimeFlag = 1; } } void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=In // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=T State0=T PORTA=0x00; DDRA=0xFC; // Port B initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1 PORTB=0xFF; DDRB=0xFF; // Port C initialization // Func7=Out Func6=Out Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=1 State6=1 State5=P State4=1 State3=1 State2=1 State1=1 State0=0 PORTC=0xFE; DDRC=0xFF; // Port D initialization // Func7=Out Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=1 State6=P State5=P State4=P State3=P State2=P State1=P State0=P PORTD=0xFF; DDRD=0x80; // Timer/Counter initialization // Clock source: System Clock // Clock value: 125.000 kHz // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x03; TCNT0=0x00; OCR0=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x01; // ADC initialization // ADC Clock frequency: 1000.000 kHz // ADC Voltage Reference: AREF pin // ADC Auto Trigger Source: Free Running ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff); Nhóm - Đồ án Vi điều khiển- 69DCCN21 ADCSRA=0xEB; SFIOR&=0x1F; // Global enable interrupts #asm("sei") DS1307_Init(); mode = 0; while (1) { chuyenMODE(); if(mode == MODE_NORMAL) { RUN_Normal(); FirstTimeFlag = 0; } else { if(mode == MODE_SET_TIME) { SETUP_Time(); } else if(mode == MODE_SET_ON) { SETUP_TimeON(); } else if(mode == MODE_SET_OFF) { SETUP_TimeOFF(); } else if(mode == MODE_SAVED) { SAVED(); } if(!SW_OK) { mode = MODE_SAVED; } } if(time >= 5000) // 10(s) { mode = MODE_NORMAL; } dem++; delay_ms(40); } } ... dụng lý thuyết với thực tế chúng em lựa chọn yêu cầu “Thiết kế đồng hồ thời gian thực hiển thị LED có hẹn giờ? ?? Tuy nhiên kiến thức chun mơn cịn hạn chế, tài liệu tham khảo có giới hạn nên cịn... nhiệt độ phòng - Khối hiển thị bao gồm 10 LED thanh, có LED hiển thị thời gian giờ, phút, giây; LED hiển thị nhiệt độ - Khối chấp hành relay cho phép đóng ngắt thiết bị đến thời gian người dùng cài... liệu có dạng nhị phân sau: hgfedcba Nhóm - Đồ án Vi điều khiển- 69DCCN21 Bảng mã hiển thị led Bảng mã hiển thị led dành cho led có Anode chung (các led đơn sáng mức 0) Số hiển thị led mã hiển thị