Đồ án Đồng hồ thời gian thực

110 753 17
Đồ án Đồng hồ thời gian thực

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC CHƯƠNG DẪN NHẬP .6 1.1 ĐẶT VẤN ĐỀ .7 1.2 GIỚI HẠN ĐỀ TÀI 1.3 MỤC ĐÍCH NGHIÊN CỨU CHƯƠNG : GIỚI THIỆU LINH KIỆN TRONG ĐỀ TÀI 2.1 GIỚI THIỆU VỀ VI ĐIỀU KHIỂN PIC16F877A .10 2.1.1 Tổng quan họ vi điều khiển PIC 10 2.1.2 Những đặc tính ngoại vi 11 2.1.3 Đặc điểm tương tự .12 2.1.4 Các đặc điểm đặc biệt 12 2.1.5 Công nghệ CMOS 13 2.1.6 Sơ đồ chân vi điều khiển PIC 16F877A 14 2.2 MỘT VÀI THÔNG SỐ VỀ VI ĐIỀU KHIỂN PIC16F877 15 2.2.1 Sơ đồ khối vi điều khiển PIC16F877A 16 2.2.2 Tổ chức nhớ 17 2.2.3 Bộ nhớ chương trình 17 2.2.4 Bộ nhớ liệu 18 2.2.5 Thanh ghi chức đặc biệt SFR 20 2.2.6 Thanh ghi mục đích chung GPR 21 2.2.7 Stack 21 2.3 CÁC CỔNG XUẤT NHẬP CỦA PIC16F877A 22 2.3.1 PortA 22 2.3.2 PortB 23 2.3.3 PortC 23 2.3.4 PortD 23 2.3.5 PortE 24 2.3.6 Timer_0 24 2.3.7 Timer_1 27 2.3.8 Timer_2 28 2.3.9 ADC .29 2.3.10 COMPARATOR 32 2.3.11 CCP 34 2.4 GIAO TIẾP NỐI TIẾP 39 2.4.1 USART 40 2.4.2 I2C 40 2.4.3 I2C SLAVE MODE 42 2.4.4 I2C MASTER MODE 49 2.4.5 Một số đặc tính CPU .54 2.4.6 Một số đặc tính OSCILLATOR 56 2.4.7 Các chế độ RESET 56 2.4.8 Ngắt (INTERRUPT) .59 2.4.9 Ngắt INT .61 2.4.10 Ngắt thay đổi trạng thái pin PORTB 61 2.4.11 Watchdog Timer (WDT) 61 2.4.12 Chế độ SLEEP .62 2.5 GIỚI THIỆU VỀ LED ĐOẠN VÀ GIAO TIẾP VỚI LED ĐOẠN 62 2.5.1 Tổng quan LED đoạn .62 2.5.2 Xây dựng module hiển thị led đoạn .64 2.6 GIỚI THIỆU VỀ IC THỜI GIAN THỰC DS1307 67 2.6.1 Cơ chế hoạt động chức DS1307 2.6.2 Sơ đồ địa RAM RTC 69 2.6.3 Hoạt động DS1307 72 2.7 GIỚI THIỆU VỀ CON CẢM BIẾN NHIỆT ĐỘ LM35 75 2.7.1 Một số tính chất LM35 76 2.7.2 Sơ Đồ Nguyên Lý 77 2.8 GIỚI THIỆU VỀ TỤ ĐIỆN 78 2.8.1 Tụ hóa 78 2.8.2 Tụ không phân cực 79 2.8.3 Tụ có dùng mã ( hay gọi tụ giấy ) 79 2.9 IC 555 80 2.9.1 Sơ đồ chân 80 2.9.2 Sơ đồ khối IC 555 80 2.9.3 Chức chân IC 555 .81 2.10 TRANSISTOR 82 CHƯƠNG : THIẾT KẾ PHẦN CỨNG 84 3.1 SƠ ĐỒ KHỐI .85 3.2 TÍNH TOÁN VÀ XÂY DỰNG CÁC KHỐI .86 3.2.1 Khối nguồn 86 3.2.2 Khối vi điều khiển trung tâm 88 3.2.3 Khối tạo xung 89 3.2.4 Khối hiển thị 91 3.2.5 Khối thời gian thực 92 3.2.6 Cập nhật nhiệt độ 93 CHƯƠNG : LƯU ĐỒ GIẢI THUẬT VÀ CODE CỦA CHƯƠNG TRÌNH 94 4.1 LƯU ĐỒ GIẢI THUẬT .95 4.2 CODE CHÍNH CỦA CHƯƠNG TRÌNH .99 CHƯƠNG : KẾT LUẬN CHƯƠNG DẪN NHẬP 1.1 ĐẶT VẤN ĐỀ Ngày với tiến nghành khoa học, ngành CÔNG NGHÊ KỸ THUẬT ĐIỆN TỬ đã, phát triển rộng rãi Cùng với phát triển kinh tế khoa học kỹ thuật đường công nghiệp hóa, đại hóa đất nước Ngành điện tử nói chung có bước tiến vượt bậc mang lại thành đáng kể Là sinh viên nghành chúng em biết mạch điện tử ứng dụng nhiều đời sống xã hội Các ứng dụng mạch điện tử có mặt khắp nơi ứng dụng nhiều như: mạch đồng hồ, mạch báo cháy, mạch đo nhiệt độ, mạch cảm biến… Từ trường học, công sở, quan xí nghiệp đến nơi công cộng có ứng dụng mạch điện tử Chính ứng dụng quan trọng nên chúng em định chọn đề tài MẠCH HIỆN THỊ THỜI GIAN, NHIỆT ĐỘ, BÁO CHUÔNG để làm đề tài ĐỒ ÁN TỐT NGHIỆP 1.2 GIỚI HẠN ĐỀ TÀI Với thời gian thực đề tài trình độ chuyên môn có hạn,chúng em cố gắng hoàn thành đồ án giải vấn đề sau: • Đo nhiệt độ hiển thị nhiệt độ phòng • Hiện thị thời gian ( sử dụng IC DS1307 hiển thị giờ, phút, giây) • Báo chuông làm việc công xưởng, trường học • Lập trình cho PIC 16F877A để điều khiển hệ thống • Thời gian thực từ ngày: 28/6/2010 • Thời gian nộp đề tài ngày: 26/7/2010 1.3 MỤC ĐÍCH NGHIÊN CỨU Mục đích trước hết chúng em thực đề tài hoàn tất ĐỒ ÁN TỐT NGHIỆP để tốt nghiệp trường Ngoài chúng em thực nghiên cứu đề tài muốn tìm hiểu phát huy thành ứng dụng ĐIỆN TỬ vào đời sống thực tế để giúp ích cho đất nước để trang bị cho chúng em thêm kiếm thức trước trường Quá trình thực đề tài hội để chúng em tự kiểm tra lại kiến thức học trường Đồng thời hội cho chúng em phát huy tính sáng tạo,khả giải vấn đề theo nhu cầu đặt Và dịp cho chúng em tích lũy kinh nghiệm để sau bước chân đời không bỡ ngỡ quen dần lĩnh vực ĐIỆN TỬ CHƯƠNG : GIỚI THIỆU LINH KIỆN TRONG ĐỀ TÀI 2.1 GIỚI THIỆU VỀ VI ĐIỀU KHIỂN PIC 16F877A 2.1.1 Tổng quan họ vi điều khiển PIC PIC họ vi điều khiển RISC sản xuất công ty Microchip Technology Dòng PIC PIC1650 phát triển Microelectronics Division thuộc General_Instrument PIC bắt nguồn từ chữ viết tắt “Programmable Intelligent Computer” (Máy tính khả trình thông minh) sản phẩm hãng General Instruments đặt cho dòng sản phẩm họ PIC1650 Lúc này, PIC 1650 dùng để giao tiếp với thiết bị ngoại vi cho máy chủ 16 bit CP1600, vậy, người ta gọi PIC với tên “Peripheral Interface Controller” (Bộ điều khiển giao tiếp ngoại vi) CP1600 CPU tốt, lại hoạt động xuất nhập, PIC 8-bit phát triển vào khoảng năm 1975 để hỗ trợ hoạt động xuất nhập cho CP1600 PIC sử dụng microcode đơn giản đặt ROM, mặc dù, cụm từ RISC chưa sử dụng thời giờ, PIC thực vi điều khiển với kiến trúc RISC, chạy lệnh chu kỳ máy (4 chu kỳ dao động) Năm 1985 General Instruments bán phận vi điện tử họ, chủ sở hữu hủy bỏ hầu hết dự án – lúc lỗi thời Tuy nhiên, PIC bổ sung EPROM để tạo thành điều khiển vào khả trình Ngày nhiều dòng PIC xuất xưởng với hàng loạt module ngoại vi tích hợp sẵn (như USART, PWM, ADC…), với nhớ chương trình từ 512 Word đến 32K Word Hiện có nhiều dòng PIC có nhiều khác biệt phần cứng, điểm qua vài nét sau : • 8/16 bit CPU, xây dựng theo kiến truc Harvard có sửa đổi 10 • Flash ROM tuỳ chọn từ 256 byte đến 256 Kbyte • Các cổng Xuất/ Nhập (I/ O ports) (mức logic thường từ 0V đến 5.5V, ứng với logic logic 1) • 8/16 bit Timer • Các chuẩn giao tiếp nối tiếp đồng bộ/ khung đồng USART • Bộ chuyển đổi ADC Analog-to-digital converters, 10/12 bit • Bộ so sánh điện áp (Voltage Comparator) • Các module Capture/ Compare/ PWM • LCD • MSSP Peripheral dựng cho giao tiếp I2 C, SPI, I2 S • Bộ nhớ nội EPROM – ghi/ xoá lớn tới triệu lần • Module Điều khiển động cơ, đọc encoder • Hỗ trợ giao tiếp USB • Hỗ trợ giao tiếp CAN • Hỗ trợ giao tiếp LIN • Hỗ trợ giao tiếp IrDA • Một số dòng có tích hợp RF (PIC16f639, rfPIC) • KEELOQ mờ hoá giải mờ • DSP tính xử lý tín hiệu số (dsPIC) Đặc điểm thực thi tốc độ cao RISC CPU họ vi diều khiển PIC16F87XA : • Chỉ gồm 35 lệnh đơn • Tất lệnh 1chu kỳ ngoại trừ chương trình chu kỳ • Tốc độ hoạt động : *DC- 20MHz ngõ vào xung clock 11 *DC- 200ns chu kỳ lệnh • Độ rộng nhớ chương trình Flash 8K x 14word, nhớ liệu (RAM) 368 x 8bytes, nhớ liệu EPROM (RAM) 256 x 8bytes 2.1.2 Những đặc tính ngoại vi - Timer0 : 8- bit định thời/ đếm với 8- bit prescaler - Timer1 : 16- bit định thời/ đếm với prescaler, tăng lên suốt chế độ Sleep qua thạch anh/ xung clock bên - Timer2 : 8- bit định thời/đếm với 8- bit, prescaler postscaler - Hai module Capture, Compare, PWM * Capture có độ rộng 16 bit, độ phân giải 12.5ns * Compare có độ rộng 16 bit, độ phân giải 200ns * Độ phân giải lớn PWM 10bit - Có 13 ngõ I/O điều khiển trực tiếp - Dòng vào dòng lớn : * 25mA dòng vào cho chân * 20mA dòng cho chân 2.1.3 Đặc điểm tương tự - 10 bit, với kênh chuyển đổi tương tự sang số (A/D) - Brown – out Reset (BOR) - Module so sánh tương tự * Hai so sánh tương tự * Module điện áp chuẩn VREF lập trình PIC - Có thể lập trình ngõ vào đến từ ngõ vào PIC điện áp bên - Những ngõ so sánh sử dụng cho bên 12 Cập nhật giá trị DS1307 Chương trình Chính Kiểm tra giá trị hẹn Báo chuông Đọc ADC Tách LED Hiển Thị Mode = ? Mode = ? Mode = ? Hiển Thị Phút, T° Hiển Thị Giờ, T° Hiển Thị Giờ,Phút,Giây, T° END 98 4.2 CODE CHÍNH CỦA CHƯƠNG TRÌNH #include #include #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #device *=16 adc=10 #use delay(clock=4000000) #use fast_io(a) #use fast_io(b) #use fast_io(c) #use fast_io(d) #use fast_io(e) #use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3) int8 GIO,PHUT,GIAY,NHIETDO,thu,day,date,month,year; int8 LED1,LED2,LED3,LED4,LED5,LED6,LED7,LED8; int8 LED9,LED10,LED11,LED12,LED13,LED14; int8 led_code[10] = {0x82,0xe7,0x91,0xc1,0xE4,0xc8,0x88,0xE3,0x80,0xc0}; int8 adc; int8 key,mode; int1 blink,blink_sec,blink_min,blink_hour,ntn; int8 giohen,giohen1,giohen2,giohen3,giohen4,giohen5,giohen6,giohen7,giohen8,giohen9,gi ohena,giohenb,giohenc; int8 giohend,giohene,giohenf,giohen10,giohen11,giohen12,giohen13,giohen14,giohen15,gi ohen16,giohen17,giohen18,giohen19; int8 giohen1a,giohen1b,giohen1c,giohen1d,giohen1e,giohen1f,giohen20,giohen21,giohen2 2,giohen23,giohen24,giohen25,giohen26; int8 giohen27,giohen28,giohen29,giohen2a,giohen2b,giohen2c,giohen2d,giohen2e,giohen2 f,giohen30,giohen31,giohen3a,giohen3b,giohen3c; int8 giohen32,giohen33,giohen34,giohen35,giohen36,giohen37,giohen38,giohen39; #bit key1=0x7.0 #bit key2=0x7.1 #bit key3=0x7.2 void init_time(); VOID CLOCK(); void hienthi(); 99 VOID TACH_LED(); void doc_adc(); void hen_gio(); void keyscan(); void change_time(); void setmin(); void sethour(); void set_blink(); void change1_time(); void decmin(); void dechour(); void UPDATE_DS1307(); void main() {porta=0;portb=0;portc=0;portd=0; trisa=0b000001;trisb=0;trisc=0xff;trisd=0;trise=0; gio=0x06;phut=0x59;mode=0;key=5;blink=0;blink_sec=0;blink_min=0;blink_hour=0; a3=0; hen_gio(); giohen=read_eeprom(0x00); giohen1=read_eeprom(0x01); giohen2=read_eeprom(0x02); giohen3=read_eeprom(0x03); giohen4=read_eeprom(0x04); giohen5=read_eeprom(0x05); giohen6=read_eeprom(0x06); giohen7=read_eeprom(0x07); giohen8=read_eeprom(0x08); giohen9=read_eeprom(0x09); giohena=read_eeprom(0x0a); giohenb=read_eeprom(0x0b); giohenc=read_eeprom(0x0c); giohend=read_eeprom(0x0d); giohene=read_eeprom(0x0e); giohenf=read_eeprom(0x0f); giohen10=read_eeprom(0x10); giohen11=read_eeprom(0x11); giohen12=read_eeprom(0x12); giohen13=read_eeprom(0x13); 100 giohen14=read_eeprom(0x14); giohen15=read_eeprom(0x15); giohen16=read_eeprom(0x16); giohen17=read_eeprom(0x17); giohen18=read_eeprom(0x18); giohen19=read_eeprom(0x19); giohen1a=read_eeprom(0x01a); giohen1b=read_eeprom(0x01b); giohen1c=read_eeprom(0x01c); giohen1d=read_eeprom(0x01d); giohen1e=read_eeprom(0x01e); giohen1f=read_eeprom(0x01f); giohen20=read_eeprom(0x20); giohen21=read_eeprom(0x21); giohen22=read_eeprom(0x22); giohen23=read_eeprom(0x23); giohen24=read_eeprom(0x24); giohen25=read_eeprom(0x25); giohen26=read_eeprom(0x26); giohen27=read_eeprom(0x27); giohen28=read_eeprom(0x28); giohen29=read_eeprom(0x29); giohen2a=read_eeprom(0x2a); giohen2b=read_eeprom(0x2b); giohen2c=read_eeprom(0x2c); giohen2d=read_eeprom(0x2d); giohen2e=read_eeprom(0x2e); giohen2f=read_eeprom(0x2f); giohen30=read_eeprom(0x30); giohen31=read_eeprom(0x31); giohen32=read_eeprom(0x32); giohen33=read_eeprom(0x33); giohen34=read_eeprom(0x34); giohen35=read_eeprom(0x35); giohen36=read_eeprom(0x36); giohen37=read_eeprom(0x37); giohen38=read_eeprom(0x38); giohen39=read_eeprom(0x39); giohen3a=read_eeprom(0x3a); giohen3b=read_eeprom(0x3b); giohen3c=read_eeprom(0x3c); 101 init_time(); while(1){keyscan();CLOCK();doc_adc();TACH_LED();hienthi();}} VOID CLOCK() { i2c_start(); i2c_write(0xD0); //Gui dia chi cua slave i2c_write(0x00); //thiet lap lai tro - set register pointer I2C_start(); I2C_write(0xD1); /* gui lenh doc du lieu */ GIAY = i2c_read(1); /* starts w/last address stored in register pointer */ PHUT = i2c_read(1); GIO = i2c_read(1); //che gio la 12h Loai bo bit5 va bit6 dung lenh AND day = I2C_read(1u); date = I2C_read(1u); month = I2C_read(1u); year = I2C_read(1u); // tiep 0x06 i2c_stop(); //=====================kiem tra gio hen if(day!=1) { if((giay==giohen)&(phut==giohen1)&(gio==giohen2)) a2=1; if( (giay==giohen)&(phut==giohen4)&(gio==giohen5)) a2=1; if((giay==giohen)&(phut==giohen7)&(gio==giohen8)) a2=1; if(((giay==giohen)&phut==giohena)&(gio==giohenb)) a2=1; if((giay==giohen)&(phut==giohend)&(gio==giohene)) a2=1; if((giay==giohen)&(phut==giohen10)&(gio==giohen11)) a2=1; if((giay==giohen)&(phut==giohen13)&(gio==giohen14)) a2=1; if((giay==giohen)&(phut==giohen16)&(gio==giohen17)) a2=1; if((giay==giohen)&(phut==giohen19)&(gio==giohen1a)) a2=1; if((giay==giohen)&(phut==giohen1c)&(gio==giohen1d)) a2=1; if((giay==giohen)&(phut==giohen1f)&(gio==giohen20)) a2=1; if((giay==giohen)&(phut==giohen22)&(gio==giohen23)) a2=1; 102 if((giay==giohen)&(phut==giohen25)&(gio==giohen26)) a2=1; if((giay==giohen)&(phut==giohen28)&(gio==giohen29)) a2=1; if((giay==giohen)&(phut==giohen2b)&(gio==giohen2c)) a2=1; if((giay==giohen)&(phut==giohen2e)&(gio==giohen2f)) a2=1; if((giay==giohen)&(phut==giohen31)&(gio==giohen32)) a2=1; if((giay==giohen)&(phut==giohen34)&(gio==giohen35)) a2=1; if((giay==giohen)&(phut==giohen37)&(gio==giohen38)) a2=1; if((giay==giohen)&(phut==giohen3a)&(gio==giohen3b)) a2=1; if(giay==5)a2=0; } } VOID TACH_LED() { LED1=NHIETDO/10; LED2=NHIETDO%10; LED3=GIAY&0X0F; LED4=(GIAY&0XF0)>>4; LED5=PHUT&0X0F; LED6=(PHUT&0XF0)>>4; LED7=GIO&0X0F; LED8=(GIO&0XF0)>>4; LED9=date&0X0F; LED10=(date&0XF0)>>4; LED11=month&0X0F; LED12=(month&0XF0)>>4; LED13=year&0X0F; LED14=(year&0XF0)>>4; } void hienthi() { if(mode==0) { PORTD=led_code[LED1];b0=0; DELAY_MS(1);b0=1; PORTD=led_code[LED2];b1=0; 103 DELAY_MS(1);b1=1; PORTD=led_code[LED3];b7=0; DELAY_MS(1);b7=1; PORTD=led_code[LED4];b6=0; DELAY_MS(1);b6=1; PORTD=led_code[LED5];b5=0; DELAY_MS(1);b5=1; PORTD=led_code[LED6];b4=0; DELAY_MS(1);b4=1; PORTD=led_code[LED7];b3=0; DELAY_MS(1);b3=1; PORTD=led_code[LED8];b2=0; DELAY_MS(1);b2=1; } if(mode==1) { PORTD=led_code[LED1];b0=0; DELAY_MS(1);b0=1; PORTD=led_code[LED2];b1=0; DELAY_MS(1);b1=1; PORTD=led_code[LED5];b5=0; DELAY_MS(1);b5=1; PORTD=led_code[LED6];b4=0; DELAY_MS(1);b4=1; } if(mode==2) { PORTD=led_code[LED1];b0=0; DELAY_MS(1);b0=1; PORTD=led_code[LED2];b1=0; DELAY_MS(1);b1=1; PORTD=led_code[LED7];b3=0; DELAY_MS(1);b3=1; PORTD=led_code[LED8];b2=0; DELAY_MS(1);b2=1; } if(mode==3) { PORTD=led_code[LED1];b0=0; DELAY_MS(1);b0=1; PORTD=led_code[LED2];b1=0; DELAY_MS(1);b1=1; 104 PORTD=led_code[LED14];b6=0; DELAY_MS(1);b6=1; PORTD=led_code[LED13];b7=0; DELAY_MS(1);b7=1; PORTD=led_code[LED12];b4=0; DELAY_MS(1);b4=1; PORTD=led_code[LED11];b5=0; DELAY_MS(1);b5=1; PORTD=led_code[LED10];b2=0; DELAY_MS(1);b2=1; PORTD=led_code[LED9];b3=0; DELAY_MS(1);b3=1; } } void doc_adc() { setup_adc(adc_clock_internal); setup_adc_ports(an0); set_adc_channel(0); delay_us(10); adc=read_adc(); nhietdo=adc/2.046; } void hen_gio() { write_eeprom(0x00,0x00); write_eeprom(0x01,0x00); write_eeprom(0x02,0x07); write_eeprom(0x03,0x00); write_eeprom(0x04,0x45); write_eeprom(0x05,0x07); write_eeprom(0x06,0x00); write_eeprom(0x07,0x50); write_eeprom(0x08,0x07); write_eeprom(0x09,0x00); write_eeprom(0x0a,0x35); write_eeprom(0x0b,0x08); 105 write_eeprom(0x0c,0x00); write_eeprom(0x0d,0x40); write_eeprom(0x0e,0x08); write_eeprom(0x0f,0x00); write_eeprom(0x10,0x25); write_eeprom(0x11,0x09); write_eeprom(0x12,0x00); write_eeprom(0x13,0x55); write_eeprom(0x14,0x09); write_eeprom(0x15,0x00); write_eeprom(0x16,0x40); write_eeprom(0x17,0x10); write_eeprom(0x18,0x00); write_eeprom(0x19,0x45); write_eeprom(0x1a,0x10); write_eeprom(0x1b,0x00); write_eeprom(0x1c,0x30); write_eeprom(0x1d,0x11); write_eeprom(0x1e,0x00); write_eeprom(0x1f,0x00); write_eeprom(0x20,0x13); write_eeprom(0x21,0x00); write_eeprom(0x22,0x45); write_eeprom(0x23,0x13); write_eeprom(0x24,0x00); write_eeprom(0x25,0x50); write_eeprom(0x26,0x13); write_eeprom(0x27,0x00); write_eeprom(0x28,0x35); write_eeprom(0x29,0x14); write_eeprom(0x2a,0x00); write_eeprom(0x2b,0x40); write_eeprom(0x2c,0x14); 106 write_eeprom(0x2d,0x00); write_eeprom(0x2e,0x25); write_eeprom(0x2f,0x15); write_eeprom(0x30,0x00); write_eeprom(0x31,0x55); write_eeprom(0x32,0x15); write_eeprom(0x33,0x00); write_eeprom(0x34,0x40); write_eeprom(0x35,0x16); write_eeprom(0x36,0x00); write_eeprom(0x37,0x45); write_eeprom(0x38,0x16); write_eeprom(0x39,0x00); write_eeprom(0x3a,0x30); write_eeprom(0x3b,0x17); write_eeprom(0x3c,0x05); } void init_time() { I2C_start(); I2C_write(0xD0); I2C_write(0x00); I2C_write(0); I2C_write(0x59); I2C_write(0x06); I2C_write(0x07); I2C_write(0x30); I2C_write(0x07); I2C_write(0x10); I2C_write(0x90); xung 1Hz cua ds1307 I2C_Stop(); // Ghi Thu // Ghi Ngay // Ghi Thang // Ghi Nam tai 0x06 // Ghi cau hinh cho ghi dieu khien (tai 0x07) su dung } void keyscan() 107 { c0=1;c1=1;c2=1; if(key1!=1) {key=0;key1=1;delay_ms(150);} if(key2!=1) {key=1;key2=1;delay_ms(150);} if(key3!=1) {key=2;key3=1;delay_ms(150);} if(key!=5) { switch(key) { case 0:{mode++;key=5;blink=1;set_blink();} break; case 1:{change_time();key=5;UPDATE_DS1307();} break; case 2:{change1_time();key=5;UPDATE_DS1307();} break; } } } void set_blink() { switch(mode) { case 1:blink_min=1;break; case 2:{blink_hour=1;blink_min=0;}break; case 3:{blink_hour=0;ntn=1;}break; case 4: { blink=0;mode=0;blink_sec=0;blink_min=0;blink_hour=0;ntn=0; } break; } } void change_time() { if(mode==1){blink_min=1;setmin();} if(mode==2){blink_hour=1;sethour();} if(mode==3){ntn=1;} if(mode==4) { 108 blink=0;mode=0;blink_sec=0;blink_min=0;blink_hour=0;ntn=0; } } void setmin() { LED5++; if(LED6==5&LED5==10){LED6=0;LED5=0;} if(LED5==10){LED6++;LED5=0;} } void sethour() {LED7++; if(LED8==2&LED7==4){LED8=0;LED7=0;} if(LED7==10){LED8++;LED7=0;} } void change1_time() { if(mode==1){blink_min=1;decmin();} if(mode==2){blink_hour=1;dechour();} if(mode==3) { blink=0;mode=0;blink_sec=0;blink_min=0;blink_hour=0; } } void decmin() { LED5 ; if(LED6==0&LED5==255){LED6=5;LED5=9;} if(LED5==255){LED6 ;LED5=9;} } void dechour() { LED7 ; if(LED8==0&LED7==255){LED8=2;LED7=3;} if(LED7==255){LED8 ;LED7=9;} } 109 void UPDATE_DS1307() { i2c_start(); i2c_write(0xd0); i2c_write(0x00); i2c_write(giay); phut=LED5+(LED6

Ngày đăng: 07/09/2017, 11:05

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan