PIC16F628 PIC CƠ BẢN VỚI MẠCH ĐỒNG HỒ

7 TIMES và THERMOMETER CIRCUIT VỚI PIC-16F628
Bạn bè, tôi giải thích các mạch đồng hồ và nhiệt kế khác nhau mà tôi đã thực hiện với PIC16F628 bên dưới. Cảm biến nhiệt độ DS18B20 được sử dụng cho tất cả các dự án .
Mạch-1: Trong mạch này tôi tạo ra tín hiệu đồng hồ bằng cách cắt. Tôi đã sử dụng màn hình LCD làm chỉ báo . Tôi đã sử dụng cảm biến DS18B20 làm cảm biến nhiệt độ .
'********************************* '* Tên: KESMETMR0.BAS '* Tác giả: [Erol Tahir Erdal] '* Thông báo: Bản quyền (c) 2005 [ETE] '*: Tất cả các quyền '* Ngày: 23.04.2005 '* Phiên bản: 1.0 '* Ghi chú: '*: (1) LCD '********************************* PORT = 0: PORTB = 0 TRISB =% 11110000 'Toàn bộ mục nhập vào PortB. TRISA =% 00000111 'Tất cả cổng A đã được xuất. '------------------------------------------------- --------------- Bộ xử lý @ DEVICE pic16F628 '16F628 @ DEVICE pic16F628, bộ đếm thời gian Watch Dog của WDT_ON 'trên @ DEVICE pic16F628, PWRT_ON 'Bật hẹn giờ trên @ DEVICE pic16F628, PROTECT_OFF 'Mã Protek bị tắt @ DEVICE pic16F628, MCLR pin 'MCLR đang được sử dụng. @ DEVICE pic16F628, XT_OSC '@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT' Bộ dao động nội bộ được sử dụng '------------------------------------------------- ---------------- DEFINE LCD_DREG PORTB Cổng nào là chân dữ liệu LCD được kết nối? DEFINE LCD_DBIT 4 'Bit nào bắt đầu từ chân dữ liệu LCD? DEFINE LCD_EREG PORTB 'LCD Bật Nightfall Cổng nào được kết nối? DEFINE LCD_EBIT 3 'LCD Kích hoạt cơ sở Những vết cắn nào được kết nối? xác định cổng USB R / W LCD RWREG PORTB Cổng nào được kết nối? xác định LCD_RWBIT 2 'LCD R / W cơ sở Mà cắn được kết nối? DEFINE LCD_RSREG PORTB 'LCD RS Nightfall Cổng nào được kết nối? DEFINE LCD_RSBIT 1 'LCD RS bottom Bite nào được kết nối? DEFINE LCD_BITS 4 'LCD được kết nối với 4 bit hoặc 8 bit? DEFINE LCD_LINES 2 'LCD Có thể viết bao nhiêu dòng 'DEFINE OSC 4 '------------------------------------------------- ---------------- TIẾP TỤC TIẾP TỤC TRÊN TIẾP TỤC Đến Cắt được gọi là Cắt nếu Cắt. OPTION_REG =% 10000101 'Điện trở kéo lên HỦY - Tỷ lệ chia 1/64. INTCON =% 10100000 'Ngắt hoạt động ngắt TMR0 và hoạt động TMR0 = 0 CMCON = 7 'hủy chốt so sánh tại 16F628 tất cả đầu vào / đầu ra '------------------------------------------------- ---------------- Comm_Pin VAR Portb.0 'Dữ liệu một dây "DQ" PortB.0 da Busy YES BIT 'Trạng thái bận rộn-bit Giá trị đọc RARE của bộ cảm biến HAM VAR WORD ' ISI VAR WORD 'Giá trị ISI được tính Float VAR WORD 'Giữ phần còn lại cho màn hình + nhiệt độ C X VAR WORD SIGN_BITI YES HAM.Bit11 '+/- Nhiệt độ bit dấu, 1 = nhiệt độ âm NEGAT_ISI CON 1 'Negative_Cold = 1 Dấu & quot; ĐĂNG KÝ CÓ BYTE '+/- ký cho giá trị nhiệt độ TEMP VAR BYTE 'Biến tạm thời cho máy tính Div 32 bit COUNT BY BYTE SN VAR BYTE DAK BYTE HOUR BYTE GUN VAR BYTE ký hiệu SEC = PORTA.0 SYMBOL UP = PORTA.2 SYMBOL ASAGI = PORTA.1 '------------------------------------------ CLEAR 'tất cả các biến được đặt lại PAUSE 200 LCDOUT $ FE, 1 '----------------------------------------- BASLER để: GOSUB SCREEN TRÊN MÀN HÌNH GIỜ nếu SEC = 0 THÌ SETTING 'ĐI ĐỂ THIẾT LẬP NẾU PHƯƠNG THỨC ĐƯỢC CHẤP NHẬN gosub SENSOROKU 'ĐỌC BÀI HÁT VÀ VIẾT TRÊN MÀN HÌNH NHIỆT ĐỘ GOTO BREAK EKRAN0: LCDOUT $ FE, $ 84, DEC2 HOUR, ":", DEC2 DAK: RETURN Setting: KHI SEC = 0 xoay về GIỜ: GOSUB SCREEN LCDOUT $ FE, $ 84 lcdout $ FE, $ 0E 'LINE DRIVER ON NẾU SEC = 0 THÌ MINBIR IF UP = 0 THEN THỜI GIAN = THỜI GIAN + 1 NẾU THỜI GIAN = 24 THỜI GIAN = 0 ENDIF NẾU ASAGI = 0 THÌ THỜI GIAN = THỜI GIAN-1 NẾU THỜI GIAN = 255 THỜI GIAN THỜI GIAN = 23 ENDIF GOSUB DELAY GOTO HOUR MINBIR: KHI SEC = 0 xoay về MINUTE: GOSUB SCREEN LCDOUT $ FE, $ 87 NẾU SEC = 0 THÌ BÂY GIỜ IF UP = 0 THEN DAK = DAK + 1 NẾU DAK = 60 THEN DAK = 0 ENDIF NẾU ASAGI = 0 THÌ DAK = DAK-1 NẾU DAK = 255 THEN DAK = 59 ENDIF GOSUB DELAY GOTO MINUTE SECBIR: WHILE SEC = 0 xoay về THỨ HAI: GOSUB SCREEN0 LCDOUT $ FE, $ 8A NẾU SEC = 0 THÌ TÌM KIẾM IF UP = 0 THEN SN = SN + 1 NẾU SN = 60 THÌ SN = 0 ENDIF NẾU ASAGI = 0 THÌ SN = SN-1 NẾU SN = 255 THÌ SN = 0 ENDIF GOSUB DELAY GOTO SECOND DELAY: CHO X = 0 TO 1800 PAUSEUS 100 TIẾP THEO RETURN ARA: LCDOUT $ FE, $ 0C KHI SEC = 0 xoay về 'gosub GECIKME GOTO UP '------- ĐỌC SENSOR ĐỌC PHẦN ---------- SENSOROK của: 'ham = $ FE6F: Tính Gosub: RETURN dòng này sẽ bị xóa bình thường OW_T COMM_PIN, 1, [$ CC, $ 44] 'Đọc giá trị ISI chờ đợi: OW_P COMMIN, 4, [Bận] 'Đọc giá trị bận IF Busy = 0 THEN Wait 'vẫn đang bận? , vâng, nếu goto Chờ ..! OWOUT Comm_Pin, 1, [$ CC, $ BE] 'đọc bộ nhớ đệm OWIN COMM_PIN, 2, [HAM.Lowbyte, HAM.Highbyte] 'Hai byte đọc và đọc xong. Tính toán GOSUB RETURN Tính toán: 'Giá trị độ tín dụng từ giá trị thô Ký = "+" NẾU SIGN_BITI = NEGAT_ISI THEN Dấu = "-" temp = ($ FFFF-ham + 1) * 625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM + 1) ISI = DIV32 10 'Chúng tôi đang phân chia 32 bit cho tài khoản cấp độ chính xác của Div32. GEC: FLOAT = (ISI // 1000) / 100 ISI = ISI / 1000 LCDOUT $ FE, $ C4, Ký hiệu, DEC ISI, ".", DEC1 (Float), "", Deg, "C" nhiệt trên đường dây RETURN DISABLE CẮT: SAYAC = SAYAC + 1 'bộ đếm ngắt 1 giây = 61 (bộ đếm) x 256 (Tmr0) x 64 (phân chia) NẾU SAYAC = 61 thì 1 khi có 61 vết cắt. hết thời gian (999424 chúng tôi) Bộ đếm SAYAC = 0 'được đặt lại SN = SN + 1 chuyển đổi portb.0 'được tăng thêm một giây Nếu IF SN = 60 THEN đã 60, 1 phút đã trôi qua Đặt lại SN = 0 'giây DAK = DAK + 1 'được tăng thêm một phút NẾU DAK = 60 thì 1 phút trôi qua nếu là 60 phút DAK = 0 'phút được đặt lại Đã tăng TIME = HOUR + 1 giờ 1 giờ nếu NẾU THỜI GIAN = 24 THÌ 'là 24 giờ Thời gian = 0 'thời gian được đặt lại 'GUN = GUN + 1' được tăng thêm một ngày NẾU GUN = 365 THEN GUN = 0 'ngày 365 endif 'ngày được đặt lại 1 năm ENDIF ENDIF lcdout $ fe, $ 89, ":", DEC2 SN ENDIF CIK: INTCON.2 = 0 'Cờ ngắt TMR0 được đặt lại RESUME ENABLE END
Circuit-2: Trong mạch này tôi sử dụng 7 phân đoạn hiển thị như chỉ số giờ và phút . Tôi đã tạo tín hiệu đồng hồ lần nữa bằng phương pháp ngắt.
'***************************** '* Tên: KESMETMR0.BAS '* Tác giả: [Erol Tahir Erdal] '* Thông báo: Bản quyền (c) 2005 [ETE] '*: Tất cả các quyền '* Ngày: 23.04.2005 '* Phiên bản: 1.0 '* Ghi chú: '*: LED (2) '***************************** PORT = 0: PORTB = 0 TRISB = 0 'PortB được ghi lại hoàn toàn. TRISA =% 00000111 'Tất cả cổng A đã được xuất. '------------------------------------------------- ---------------- Bộ xử lý @ DEVICE pic16F628 '16F628 @ DEVICE pic16F628, bộ đếm thời gian Watch Dog của WDT_ON 'trên @ DEVICE pic16F628, PWRT_ON 'Bật hẹn giờ trên @ DEVICE pic16F628, PROTECT_OFF 'Mã Protek bị tắt @ DEVICE pic16F628, MCLR pin 'MCLR đang được sử dụng. '@ DEVICE pic16F628, XT_OSC @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Bộ dao động nội bộ được sử dụng '------------------------------------------------- -------------- 'DEFINE OSC 4 '------------------------------------------------- --------------- TIẾP TỤC TIẾP TỤC TRÊN TIẾP TỤC Đến Cắt được gọi là Cắt nếu Cắt. OPTION_REG =% 00000101 'Điện trở kéo lên CANCEL - Tỷ lệ phân chia 1/64. INTCON =% 10100000 'Ngắt hoạt động ngắt TMR0 và hoạt động TMR0 = 0 CMCON = 7 'hủy chốt so sánh tại 16F628 tất cả đầu vào / đầu ra '------------------------------------------------- --------------- Comm_Pin VAR PortA.4 'Dữ liệu một dây "DQ" PortB.0 da Busy YES BIT 'Trạng thái bận rộn-bit Giá trị đọc RARE của bộ cảm biến HAM VAR WORD ' ISI VAR WORD 'Giá trị ISI được tính Float VAR WORD 'Giữ phần còn lại cho màn hình + nhiệt độ C X VAR WORD Y YES BYTE NUMBER BYTE SIGN_BITI YES HAM.Bit11 '+/- Nhiệt độ bit dấu, 1 = nhiệt độ âm NEGAT_ISI CON 1 'Negative_Cold = 1 Dấu & quot; ĐĂNG KÝ CÓ BYTE '+/- ký cho giá trị nhiệt độ TEMP VAR BYTE 'Biến tạm thời cho máy tính Div 32 bit COUNT BY BYTE SN VAR BYTE DAK BYTE HOUR BYTE GUN VAR BYTE ký hiệu SEC = PORTA.0 SYMBOL UP = PORTA.2 SYMBOL ASAGI = PORTA.1 '------------------------------ CLEAR 'tất cả các biến được đặt lại PAUSE 200 HOUR = 13: DAK = 24: PORTB = 255 '------------------------------ CAO PORTA.3 BASLER để: NẾU Y> 6 THÌ NẾU Y & gt; = 11 THÌ Y = 1 GOSUB SCREEN1 GOTO SKIP ENDIF GOSUB SCREEN0 SKIP: nếu SEC = 0 THÌ SETTING 'ĐI ĐỂ THIẾT LẬP NẾU PHƯƠNG THỨC ĐƯỢC CHẤP NHẬN gosub SENSOROKU 'ĐỌC BÀI HÁT VÀ VIẾT TRÊN MÀN HÌNH NHIỆT ĐỘ GOTO BREAK EKRAN0: nếu sayac = 30 thì porta thấp X = HOUR DIG 1: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 X = HOUR DIG 0: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 X = SN DIG 1: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 X = SN DIG 0: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 'X = sn DIG 1: GOSUB AL 'SHIFTOUT PORTB.0, PORTB.1,1, [PHÁT HÀNH] 'HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 'X = SN DIG 0: GOSUB AL 'SHIFTOUT PORTB.0, PORTB.1,1, [PHÁT HÀNH] 'HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN AL: LOOKUP X, [63,6,91,79,102,109,125,7,127,111,99,57], NUMBER: RETURN Input1: LOW PORTA.3: NUMBER = 0 SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 NẾU SIGN_BITI = NEGAT_ISI THÌ NUMBER = 64 SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 x = (ISI DIG 1): GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 x = (ISI DIG 0): GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = 10: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = 11: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN Setting: KHI SEC = 0 xoay về GIỜ: GOSUB SCREEN LOW PORTA.3 NẾU SEC = 0 THÌ MINBIR IF UP = 0 THEN THỜI GIAN = THỜI GIAN + 1 NẾU THỜI GIAN = 24 THỜI GIAN = 0 ENDIF NẾU ASAGI = 0 THÌ THỜI GIAN = THỜI GIAN-1 NẾU THỜI GIAN = 255 THỜI GIAN THỜI GIAN = 23 ENDIF GOSUB DELAY GOTO HOUR MINBIR: KHI SEC = 0 xoay về MINUTE: GOSUB eKRAN0 LOW PORTA.3 NẾU SEC = 0 THÌ tìm kiếm IF UP = 0 THEN DAK = DAK + 1 NẾU DAK = 60 THEN DAK = 0 ENDIF NẾU ASAGI = 0 THÌ DAK = DAK-1 NẾU DAK = 255 THEN DAK = 59 ENDIF GOSUB DELAY GOTO MINUTE SECBIR: WHILE SEC = 0 xoay về DELAY: CHO X = 0 TO 1800 PAUSEUS 100 TIẾP THEO RETURN ARA: HIGH PORTA.3 KHI SEC = 0 xoay về GOTO UP '------- ĐỌC SENSOR ĐỌC PHẦN ---------- SENSOROK của: ham = $ ff5e: Tính toán Gosub: return 'NORMAL WORKING NÀY DÒNG S DEL ĐƯỢC XÓA OW_T COMM_PIN, 1, [$ CC, $ 44] 'Đọc giá trị ISI chờ đợi: OW_P COMMIN, 4, [Bận] 'Đọc giá trị bận IF Busy = 0 THEN Wait 'vẫn đang bận? , vâng, nếu goto Chờ ..! OWOUT Comm_Pin, 1, [$ CC, $ BE] 'đọc bộ nhớ đệm OWIN COMM_PIN, 2, [HAM.Lowbyte, HAM.Highbyte] 'Hai byte đọc và đọc xong. Tính toán GOSUB RETURN Tính toán: 'Giá trị độ tín dụng từ giá trị thô Ký = "+" NẾU SIGN_BITI = NEGAT_ISI THEN Dấu = "-" temp = ($ FFFF-ham + 1) * 625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM + 1) ISI = DIV32 10 'Chúng tôi đang phân chia 32 bit cho tài khoản cấp độ chính xác của Div32. 'ISI = (HAM & $ 0FF0) >> 4' mặt nạ 8 bit ở giữa và dịch 4 chữ số sang phải. GEC: FLOAT = (ISI // 1000) / 100 ISI = ISI / 1000 'Float = ((HAM.Lowbyte & $ 0F) * 625)' Tài khoản tùy ý DEC1 (Nổi), & quot; & quot;, Độ, & quot; C & quot; nhiệt trên đường dây RETURN DISABLE CẮT: SAYAC = SAYAC + 1 'bộ đếm ngắt 1 giây = 61 (bộ đếm) x 256 (Tmr0) x 64 (phân chia) NẾU SAYAC = 58 thì 1 khi có 61 vết cắt. hết thời gian (999424 chúng tôi) Bộ đếm SAYAC = 0 'được đặt lại SN = SN + 1 Y = Y + 1 'được tăng thêm một giây nếu y <7 cao="" font="" porta.3="" th=""> Nếu IF SN = 60 THEN đã 60, 1 phút đã trôi qua Đặt lại SN = 0 'giây DAK = DAK + 1 'được tăng thêm một phút NẾU DAK = 60 thì 1 phút trôi qua nếu là 60 phút DAK = 0 'phút được đặt lại Đã tăng TIME = HOUR + 1 giờ 1 giờ nếu NẾU THỜI GIAN = 24 THÌ 'là 24 giờ Thời gian = 0 'thời gian được đặt lại 'GUN = GUN + 1' được tăng thêm một ngày NẾU GUN = 365 THEN GUN = 0 'ngày 365 endif 'ngày được đặt lại 1 năm ENDIF ENDIF 'lcdout $ fe, $ 89, ":", DEC2 SN ENDIF CIK: INTCON.2 = 0 'Cờ ngắt TMR0 được đặt lại RESUME ENABLE END 7>
PIC16F628 PIC CƠ BẢN VỚI MẠCH ĐỒNG HỒ NHIỆT KẾ


Mạch-3: Mạch này có màn hình hiển thị giờ phút và màn hình 7 phân đoạn. Tín hiệu thời gian thu được bằng phương pháp cắt.
'************************************** '* Tên: KESMETMR0.BAS '* Tác giả: [Erol Tahir Erdal] '* Thông báo: Bản quyền (c) 2005 [ETE] '*: Tất cả các quyền '* Ngày: 23.04.2005 '* Phiên bản: 1.0 LED (3) * Ghi chú: KHÔNG NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ '*: CHÍNH PHỦ '*************************************** PORTA = 255: PORTB = 0 TRISB = 0 'PortB được ghi lại hoàn toàn. TRISA =% 00011111 'Tất cả cổng A đã được xuất. '------------------------------------------------- ---------------- Bộ xử lý @ DEVICE pic16F628 '16F628 @ DEVICE pic16F628, bộ đếm thời gian Watch Dog của WDT_ON 'trên @ DEVICE pic16F628, PWRT_ON 'Bật hẹn giờ trên @ DEVICE pic16F628, PROTECT_OFF 'Mã Protek bị tắt @ DEVICE pic16F628, pin MCLR MCLR_off 'không được sử dụng. @ DEVICE pic16F628, XT_OSC '@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT' Bộ dao động nội bộ được sử dụng '------------------------------------------------- ---------------- 'DEFINE OSC 4 '------------------------------------------------- --------------- TIẾP TỤC TIẾP TỤC TRÊN TIẾP TỤC Đến Cắt được gọi là Cắt nếu Cắt. OPTION_REG =% 10000101 'Điện trở kéo lên HỦY - Tỷ lệ chia 1/64. INTCON =% 10100000 'Ngắt hoạt động ngắt TMR0 và hoạt động TMR0 = 0 CMCON = 7 'hủy chốt so sánh tại 16F628 tất cả đầu vào / đầu ra '------------------------------------------------- --------------- Comm_Pin VAR PortA.4 'Dữ liệu một dây "DQ" PortB.0 da Busy YES BIT 'Trạng thái bận rộn-bit POS có BIT Giá trị đọc RARE của bộ cảm biến HAM VAR WORD ' ISI VAR WORD 'Giá trị ISI được tính Float VAR WORD 'Giữ phần còn lại cho màn hình + nhiệt độ C X VAR WORD Y YES BYTE NUMBER BYTE SIGN_BITI YES HAM.Bit11 '+/- Nhiệt độ bit dấu, 1 = nhiệt độ âm NEGAT_ISI CON 1 'Negative_Cold = 1 Dấu & quot; ĐĂNG KÝ CÓ BYTE '+/- ký cho giá trị nhiệt độ TEMP VAR BYTE 'Biến tạm thời cho máy tính Div 32 bit COUNT BY BYTE SN VAR BYTE DAK BYTE HOUR BYTE GUN VAR BYTE ký hiệu SEC = PORTA.0 SYMBOL ASAGI = PORTA.1 SYMBOL UP = PORTA.2 '------------------------------------ CLEAR 'tất cả các biến được đặt lại PAUSE 200 Y = 1: POZ = 0 '------------------------------------ PORTB = 0 BASLER để: NẾU Y> 6 THÌ NẾU Y & gt; = 11 THÌ Y = 1 GOSUB SCREEN1 GOTO SKIP ENDIF GOSUB SCREEN0 SKIP: nếu SEC = 0 THÌ SETTING 'ĐI ĐỂ THIẾT LẬP NẾU PHƯƠNG THỨC ĐƯỢC CHẤP NHẬN gosub SENSOROKU 'ĐỌC BÀI HÁT VÀ VIẾT TRÊN MÀN HÌNH NHIỆT ĐỘ GOTO BREAK EKRAN0: nếu sayac = 30 thì porta thấp X = HOUR DIG 1: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 X = HOUR DIG 0: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 X = DAK DIG 1: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 X = DAK DIG 0: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = sn DIG 1: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = SN DIG 0: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN AL: LOOKUP X, [63,6,91,79,102,109,125,7,127,111,99,57], NUMBER: RETURN Input1: LOW PORTA.3: NUMBER = 0 SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 NẾU SIGN_BITI = NEGAT_ISI THÌ NUMBER = 64 SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 x = (ISI DIG 1): GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 x = (ISI DIG 0): GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = 10: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = 11: GOSUB AL SHIFTOUT PORTB.0, PORTB.1.1, [PHÁT HÀNH] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN SETUP: POS = 1: GoSub FLASH KHI SEC = 0 xoay về GIỜ: GOSUB SCREEN LOW PORTA.3 NẾU SEC = 0 THÌ MINBIR IF UP = 0 THEN THỜI GIAN = THỜI GIAN + 1 NẾU THỜI GIAN = 24 THỜI GIAN = 0 ENDIF NẾU ASAGI = 0 THÌ THỜI GIAN = THỜI GIAN-1 NẾU THỜI GIAN = 255 THỜI GIAN THỜI GIAN = 23 ENDIF GOSUB DELAY GOTO HOUR Các minbar: GOSUB FLASH KHI SEC = 0 xoay về MINUTE: GOSUB eKRAN0 LOW PORTA.3 NẾU SEC = 0 THÌ tìm kiếm IF UP = 0 THEN DAK = DAK + 1 NẾU DAK = 60 THEN DAK = 0 ENDIF NẾU ASAGI = 0 THÌ DAK = DAK-1 NẾU DAK = 255 THEN DAK = 59 ENDIF GOSUB DELAY GOTO MINUTE SECBIR: WHILE SEC = 0 xoay về DELAY: CHO X = 0 TO 3500 PAUSEUS 10 TIẾP THEO RETURN TÌM KIẾM: GOSUB FLASH CAO PORTA.3 KHI SEC = 0 xoay về POS = 0: SNR = 0 GOTO UP FLASH: TOGGLE PORTA.3: PAUSE 150: TOGGLE PORTA.3: PAUSE 150 TOGGLE PORTA.3: PAUSE 150: TOGGLE PORTA.3: PAUSE 150 trả lại '------------- ĐỌC SENSOR ĐỌC PHẦN ------------------- SENSOROK của: ham = $ ff5e: Tính toán Gosub: return 'NORMAL WORKING NÀY DÒNG S DEL ĐƯỢC XÓA OW_T COMM_PIN, 1, [$ CC, $ 44] 'Đọc giá trị ISI chờ đợi: OW_P COMMIN, 4, [Bận] 'Đọc giá trị bận IF Busy = 0 THEN Wait 'vẫn đang bận? , vâng, nếu goto Chờ ..! OWOUT Comm_Pin, 1, [$ CC, $ BE] 'đọc bộ nhớ đệm OWIN COMM_PIN, 2, [HAM.Lowbyte, HAM.Highbyte] 'Hai byte đọc và đọc xong. Tính toán GOSUB RETURN Tính toán: 'Giá trị độ tín dụng từ giá trị thô Ký = "+" NẾU SIGN_BITI = NEGAT_ISI THEN Dấu = "-" temp = ($ FFFF-ham + 1) * 625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM + 1) ISI = DIV32 10 'Chúng tôi đang phân chia 32 bit cho tài khoản cấp độ chính xác của Div32. 'ISI = (HAM & $ 0FF0) >> 4' mặt nạ 8 bit ở giữa và dịch 4 chữ số sang phải. GEC: FLOAT = (ISI // 1000) / 100 ISI = ISI / 1000 'Float = ((HAM.Lowbyte & $ 0F) * 625)' Tài khoản tùy ý DEC1 (Nổi), & quot; & quot;, Độ, & quot; C & quot; nhiệt trên đường dây RETURN DISABLE CẮT: NẾU POZ = 1 THEN CIK SAYAC = SAYAC + 1 'bộ đếm ngắt 1 giây = 61 (bộ đếm) x 256 (Tmr0) x 64 (phân chia) NẾU SAYAC = 58 thì 1 khi có 61 vết cắt. hết thời gian (999424 chúng tôi) Bộ đếm SAYAC = 0 'được đặt lại SN = SN + 1 Y = Y + 1 'được tăng thêm một giây nếu y <7 cao="" font="" porta.3="" th=""> Nếu IF SN = 60 THEN đã 60, 1 phút đã trôi qua Đặt lại SN = 0 'giây DAK = DAK + 1 'được tăng thêm một phút NẾU DAK = 60 thì 1 phút trôi qua nếu là 60 phút DAK = 0 'phút được đặt lại Đã tăng TIME = HOUR + 1 giờ 1 giờ nếu NẾU THỜI GIAN = 24 THÌ 'là 24 giờ Thời gian = 0 'thời gian được đặt lại 'GUN = GUN + 1' được tăng thêm một ngày NẾU GUN = 365 THEN GUN = 0 'ngày 365 endif 'ngày được đặt lại 1 năm ENDIF ENDIF 'lcdout $ fe, $ 89, ":", DEC2 SN ENDIF CIK: INTCON.2 = 0 'Cờ ngắt TMR0 được đặt lại RESUME ENABLE END 7>
Mạch-4: Mạch này có màn hình hiển thị giờ phút và màn hình 7 phân đoạn . Tín hiệu đồng hồ có nguồn gốc từ xung đồng hồ của một bức tường bên ngoài hoặc đồng hồ bảng. Đó là một giờ rất chính xác.
'**************************************** '* Tên: SAAT-TERMO.BAS '* Tác giả: [Erol Tahir Erdal] '* Thông báo: Bản quyền (c) 2005 [ETE] '*: Tất cả các quyền '* Ngày: 23.06.2005 '* Phiên bản: 1.0 LED (4) * Ghi chú: KHÔNG NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ '*: CHÍNH PHỦ '**************************************** PORTA = 255: PORTB = 0 TRISB = 1 A =% Tris 00011111 '------------------------------------------------- ---------------- Bộ xử lý @ DEVICE pic16F628 '16F628 @ DEVICE pic16F628, bộ đếm thời gian Watch Dog của WDT_ON 'trên @ DEVICE pic16F628, PWRT_ON 'Bật hẹn giờ trên @ DEVICE pic16F628, PROTECT_OFF 'Mã Protek bị tắt @ DEVICE pic16F628, pin MCLR MCLR_off 'không được sử dụng. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Bộ dao động nội bộ được sử dụng '------------------------------------------------- ---------------- 'DEFINE OSC 4 '------------------------------------------------- ------------------------ TIẾP TỤC TIẾP TỤC TRÊN TIẾP TỤC Đến Cắt được gọi là Cắt nếu Cắt. OPTION_REG =% 0100000 'điện trở kéo lên bên trong được kích hoạt và điện trở kéo là không cần thiết. INTCON =% 10010000 'Ngắt hoạt động và RB0 / INT ngắt hoạt động CMCON = 7 'hủy chốt so sánh tại 16F628 tất cả đầu vào / đầu ra '------------------------------------------------- --------------------------- Comm_Pin VAR PortA.4 'Dữ liệu một dây "DQ" PortB.0 da Busy YES BIT 'Trạng thái bận rộn-bit BIT TÍCH CỰC Giá trị đọc RARE của bộ cảm biến HAM VAR WORD ' ISI VAR WORD 'Giá trị ISI được tính Float VAR WORD 'Giữ phần còn lại cho màn hình + nhiệt độ C X VAR WORD Y YES BYTE NUMBER BYTE SIGN_BITI YES HAM.Bit11 '+/- Nhiệt độ bit dấu, 1 = nhiệt độ âm NEGAT_ISI CON 1 'Negative_Cold = 1 Dấu & quot; ĐĂNG KÝ CÓ BYTE '+/- ký cho giá trị nhiệt độ TEMP VAR BYTE 'Biến tạm thời cho máy tính Div 32 bit COUNT BY BYTE SN VAR BYTE DAK BYTE HOUR BYTE GUN VAR BYTE ký hiệu SEC = PORTA.0 SYMBOL ASAGI = PORTA.1 SYMBOL UP = PORTA.2 SYMBOL DTA = PORTA.6 SYMBOL CLK = PORTB.1 '--------------------------------- CLEAR 'tất cả các biến được đặt lại PAUSE 200 Y = 1: POZ = 0 '--------------------------------- PORTB = 0 BASLER để: NẾU Y> 6 THÌ NẾU Y & gt; = 11 THÌ Y = 1 GOSUB SCREEN1 GOTO SKIP ENDIF GOSUB SCREEN0 SKIP: nếu SEC = 0 THÌ SETTING 'ĐI ĐỂ THIẾT LẬP NẾU PHƯƠNG THỨC ĐƯỢC CHẤP NHẬN gosub SENSOROKU 'ĐỌC BÀI HÁT VÀ VIẾT TRÊN MÀN HÌNH NHIỆT ĐỘ GOTO BREAK EKRAN0: nếu PORTB.0 = 1 thì porta.3 thấp X = HOUR DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 X = HOUR DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 X = DAK DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 X = DAK DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = sn DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = SN DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN AL: LOOKUP X, [63,6,91,79,102,109,125,7,127,111,99,57], NUMBER: RETURN Màn hình 1: LOW PORTA.3 COUNT = 0 SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 NẾU SIGN_BITI = NEGAT_ISI THÌ NUMBER = 64 SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 x = (ISI DIG 1): GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 x = (ISI DIG 0): GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = 10: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = 11: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN SETUP: POS = 1: SN = 0 gosub FLASH KHI SEC = 0 xoay về GIỜ: GOSUB SCREEN LOW PORTA.3 NẾU SEC = 0 THÌ MINBIR IF UP = 0 THEN THỜI GIAN = THỜI GIAN + 1 NẾU THỜI GIAN = 24 THỜI GIAN = 0 ENDIF NẾU ASAGI = 0 THÌ THỜI GIAN = THỜI GIAN-1 NẾU THỜI GIAN = 255 THỜI GIAN THỜI GIAN = 23 ENDIF GOSUB DELAY GOTO HOUR Các minbar: GOSUB FLASH KHI SEC = 0 xoay về MINUTE: GOSUB eKRAN0 LOW PORTA.3 NẾU SEC = 0 THÌ tìm kiếm IF UP = 0 THEN DAK = DAK + 1 NẾU DAK = 60 THEN DAK = 0 ENDIF NẾU ASAGI = 0 THÌ DAK = DAK-1 NẾU DAK = 255 THEN DAK = 59 ENDIF GOSUB DELAY GOTO MINUTE SECBIR: WHILE SEC = 0 xoay về DELAY: CHO X = 0 TO 1800 PAUSEUS 100 TIẾP THEO RETURN TÌM KIẾM: GOSUB FLASH CAO PORTA.3 KHI SEC = 0 xoay về POS = 0 GOTO UP FLASH: TOGGLE PORTA.3: PAUSE 150: TOGGLE PORTA.3: PAUSE 150 TOGGLE PORTA.3: PAUSE 150: TOGGLE PORTA.3: PAUSE 150 trả lại '-------------- SỨC MẠNH SENSOR SENSOR READING DEPARTMENT ---------------- SENSOROK của: ham = $ ff5e: Tính toán Gosub: return 'NORMAL WORKING NÀY DÒNG S DEL ĐƯỢC XÓA OW_T COMM_PIN, 1, [$ CC, $ 44] 'Đọc giá trị ISI chờ đợi: OW_P COMMIN, 4, [Bận] 'Đọc giá trị bận IF Busy = 0 THEN Wait 'vẫn đang bận? , vâng, nếu goto Chờ ..! OWOUT Comm_Pin, 1, [$ CC, $ BE] 'đọc bộ nhớ đệm OWIN COMM_PIN, 2, [HAM.Lowbyte, HAM.Highbyte] 'Hai byte đọc và đọc xong. Tính toán GOSUB RETURN Tính toán: 'Giá trị độ tín dụng từ giá trị thô Ký = "+" NẾU SIGN_BITI = NEGAT_ISI THEN Dấu = "-" temp = ($ FFFF-ham + 1) * 625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM + 1) ISI = DIV32 10 'Chúng tôi đang phân chia 32 bit cho tài khoản cấp độ chính xác của Div32. GEC: FLOAT = (ISI // 1000) / 100 ISI = ISI / 1000 RETURN DISABLE CẮT: NẾU POZ = 1 thì CIK SN = SN + 1 Y = Y + 1 'được tăng thêm một giây nếu y <7 cao="" font="" porta.3="" th=""> Nếu IF SN = 60 THEN đã 60, 1 phút đã trôi qua Đặt lại SN = 0 'giây DAK = DAK + 1 'được tăng thêm một phút NẾU DAK = 60 thì 1 phút trôi qua nếu là 60 phút DAK = 0 'phút được đặt lại Đã tăng TIME = HOUR + 1 giờ 1 giờ nếu NẾU THỜI GIAN = 24 THÌ 'là 24 giờ Thời gian = 0 'thời gian được đặt lại ENDIF ENDIF ENDIF CIK: INTCON.1 = 0 'Cờ ngắt TMR0 được đặt lại RESUME ENABLE END 7>
Circuit-5: Chương trình này hoạt động với màn hình LED 7 đoạn. Thông tin đồng hồ (RTC) được gọi là DS1302 . Nó hiển thị trong vài giây. Nhiệt độ nhỏ.
'*************************************** '* Tên: SAAT-TERMO.BAS '* Tác giả: [Erol Tahir Erdal] '* Thông báo: Bản quyền (c) 2005 [ETE] '*: Tất cả các quyền '* Ngày: 23.06.2005 '* Phiên bản: 1.0 LED (5) * Ghi chú: KHÔNG NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ '*: THỜI GIAN CHÍNH PHỦ RTC hoạt động với DS1302 '**************************************** PORT = 0: PORTB = 0 TRISB = 0 A =% Tris 11100000 '------------------------------------------------- ---------------- Bộ xử lý @ DEVICE pic16F628 '16F628 @ DEVICE pic16F628, bộ đếm thời gian Watch Dog của WDT_ON 'trên @ DEVICE pic16F628, PWRT_ON 'Bật hẹn giờ trên @ DEVICE pic16F628, PROTECT_OFF 'Mã Protek bị tắt @ DEVICE pic16F628, pin MCLR MCLR_off 'không được sử dụng. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Bộ dao động nội bộ được sử dụng '------------------------------------------------- ---------------- 'DEFINE OSC 4 '------------------------------------------------- ------------------------ OPTION_REG.7 = 0 'Điện trở kéo lên bên trong được kích hoạt và điện trở kéo là không cần thiết. CMCON = 7 'hủy chốt so sánh tại 16F628 tất cả đầu vào / đầu ra '------------------------------------------------- --------------------------- Comm_Pin VAR PortA.4 'Dữ liệu một dây "DQ" PortB.0 da Busy YES BIT 'Trạng thái bận rộn-bit GOR VÀ BIT Giá trị đọc RARE của bộ cảm biến HAM VAR WORD ' ISI VAR WORD 'Giá trị ISI được tính Float VAR WORD 'Giữ phần còn lại cho màn hình + nhiệt độ C X VAR WORD Y YES BYTE NUMBER BYTE SIGN_BITI YES HAM.Bit11 '+/- Nhiệt độ bit dấu, 1 = nhiệt độ âm NEGAT_ISI CON 1 'Negative_Cold = 1 Dấu & quot; ĐĂNG KÝ CÓ BYTE '+/- ký cho giá trị nhiệt độ TEMP VAR BYTE 'Biến tạm thời cho máy tính Div 32 bit COUNT BY BYTE SN VAR BYTE DAK BYTE HOUR BYTE GUN VAR BYTE MONTH BYTE NĂM BYTE MEM var byte 'Người giữ dữ liệu tạm thời OUTBYTE var byte 'byte thứ hai để ds1302 REG_ADR var byte 'byte đầu tiên đến DS1302 THEY LÀ BYTE BYTE BYTE ESN YES BYTE '--------------------------------------------- SYMBOL DTA = PortB.0 SYMBOL CLK = PORTB.1 SYMBOL RTC_DTA = PORTA.0 SYMBOL RTC_CLK = PORTA.1 SYMBOL RTC_RST = PORTA.2 ký hiệu SEC = PORTA.5 SYMBOL ASAGI = PORTA.6 SYMBOL UP = PORTA.7 '--------------------------------------------- CLEAR 'tất cả các biến được đặt lại RTC_RST thấp RTC_CLK thấp PAUSE 200 Esna = 0 G = 0 '--------------------------------------------- PORTB = 0 gosub TIME_COPY: esn = SN BASLER để: GOSUB ZAMAN_OKU NẾU ESN <> SN THEN y = SN / 5: NẾU GOR = 0 THÌ TOGGLE porta.3 NẾU (Y * 5) = SN THÌ GOR = 1-GOR ENDIF NẾU GOR = 1 THÌ GOSUB SCREEN1 GOTO SKIP ENDIF GOSUB SCREEN0 SKIP: nếu SEC = 0 THÌ SETTING 'ĐI ĐỂ THIẾT LẬP NẾU PHƯƠNG THỨC ĐƯỢC CHẤP NHẬN gosub SENSOROKU 'ĐỌC BÀI HÁT VÀ VIẾT TRÊN MÀN HÌNH NHIỆT ĐỘ ESN SNR = GOTO BREAK SCREEN0: 'porta cao.3 X = HOUR DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 X = HOUR DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 X = DAK DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 X = DAK DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = sn DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = SN DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN AL: LOOKUP X, [63,6,91,79,102,109,125,7,127,111,99,57], NUMBER: RETURN Màn hình 1: LOW PORTA.3 COUNT = 0 SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 NẾU SIGN_BITI = NEGAT_ISI THÌ NUMBER = 64 SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 x = (ISI DIG 1): GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 x = (ISI DIG 0): GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = 10: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = 11: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN SETUP: GOSUB FLASH SN = 0 KHI SEC = 0 xoay về GIỜ: GOSUB SCREEN LOW PORTA.3 NẾU SEC = 0 THÌ MINBIR IF UP = 0 THEN THỜI GIAN = THỜI GIAN + 1 NẾU THỜI GIAN = 24 THỜI GIAN = 0 ENDIF NẾU ASAGI = 0 THÌ THỜI GIAN = THỜI GIAN-1 NẾU THỜI GIAN = 255 THỜI GIAN THỜI GIAN = 23 ENDIF GOSUB DELAY GOTO HOUR Các minbar: GOSUB FLASH KHI SEC = 0 xoay về MINUTE: GOSUB SCREEN LOW PORTA.3 NẾU SEC = 0 THÌ tìm kiếm IF UP = 0 THEN DAK = DAK + 1 NẾU DAK = 60 THEN DAK = 0 ENDIF NẾU ASAGI = 0 THÌ DAK = DAK-1 NẾU DAK = 255 THEN DAK = 59 ENDIF GOSUB DELAY GOTO MINUTE SECBIR: WHILE SEC = 0 xoay về DELAY: CHO X = 0 TO 1800 PAUSEUS 100 TIẾP THEO RETURN TÌM KIẾM: GOSUB FLASH CAO PORTA.3 KHI SEC = 0 xoay về MEM = SN: GOSUB TERSCEVIR: SN = NUMBER MEM = DAK: GOSUB TERSCEVIR: DAK = NUMBER MEM = HOURS: GOSUB TERSCEVIR: HOURS = NUMBER MEM = GUN: GOSUB TERSCEVIR: GUN = NUMBER MEM = THÁNG: GOSUB TERSCEVIR: MONTH = NUMBER MEM = YEAR: GOSUB TERSCEVIR: YEAR = NUMBER GOSUB TIME_YAZ GOTO UP FLASH: TOGGLE PORTA.3: PAUSE 150: TOGGLE PORTA.3: PAUSE 150 TOGGLE PORTA.3: PAUSE 150: TOGGLE PORTA.3: PAUSE 150 trả lại '---------------- SENSOR SENSOR ĐỌC PHẦN ----------------------- SENSOROK của: '----------------- THẬN TRỌNG S ACT ĐƯỢC THỰC HIỆN TRONG NÀY LÀ ---------------------- ham = $ ff5e: Tính toán Gosub: return 'NORMAL WORKING NÀY DÒNG S DEL ĐƯỢC XÓA '------------------------------------------------- ----------------------------- OW_T COMM_PIN, 1, [$ CC, $ 44] 'Đọc giá trị ISI chờ đợi: OW_P COMMIN, 4, [Bận] 'Đọc giá trị bận IF Busy = 0 THEN Wait 'vẫn đang bận? , vâng, nếu goto Chờ ..! OWOUT Comm_Pin, 1, [$ CC, $ BE] 'đọc bộ nhớ đệm OWIN COMM_PIN, 2, [HAM.Lowbyte, HAM.Highbyte] 'Hai byte đọc và đọc xong. Tính toán GOSUB RETURN Tính toán: 'Giá trị độ tín dụng từ giá trị thô Ký = "+" NẾU SIGN_BITI = NEGAT_ISI THEN Dấu = "-" temp = ($ FFFF-ham + 1) * 625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM + 1) ISI = DIV32 10 'Chúng tôi đang phân chia 32 bit cho tài khoản cấp độ chính xác của Div32. GEC: FLOAT = (ISI // 1000) / 100 ISI = ISI / 1000 RETURN ZAMAN_OK của: sayac = 1-sayac: 'nếu sayac = 1 thì thấp porta.3 RTC_RST cao chuyển đổi RTC_DTA, RTC_CLK, 0, [$ BF] SHIFTA RTC_DT cho bạn, RTC_CLK 1, [SN, MIN, TIME, D AY, MEM, NĂM, MEM] ĐỌC MEM = SN: GOSUB CEVIR: SN = NUMBER MEM = DAK: GOSUB CEVIR: DAK = NUMBER MEM = GIỜ: GOSUB CEVIR: HOURS = NUMBER RTC_RST thấp: PAUSE 100 trả lại ZAMAN_YAZ: RTC_RST cao SHIFTOUT RTC_DTA, RTC_CLK, 0, PREPARE ĐỂ VIẾT [$ 8E, 0] ' RTC_RST thấp: PAUSE 1 RTC_RST cao RTC_DT để SHIFTOUT, RTC_CLK, 0, [$ B, SNA, MIN, TIME, D AY, 0, NĂM, 0] MÙA HÈ RTC_RST thấp PAUSE 10 trả lại Đội hình thi đấu: ONLAR = MEM &% 01110000 HỌ HỌ >> = 4 BIRLER = MEM &% 00001111 COUNT = 10 + B họ * là RETURN Là Ruffnut: ONLAR = MEM DIG 1 HỌ HỌ << = 4 BIRLER = MEM DIG 0 Họ đếm = A + B là RETURN END
PIC16F628 PIC CƠ BẢN VỚI MẠCH ĐỒNG HỒ NHIỆT KẾ


Circuit-6: Chương trình này hoạt động với màn hình LED 7 đoạn. Thông tin đồng hồ được gọi là DS1302 . Nó hiển thị trong vài giây. Nhiệt độ nhỏ. Đèn Led trung bình Nhấp nháy bằng phương pháp cắt.
'******************************************* '* Tên: SAAT-TERMO.BAS '* Tác giả: [Erol Tahir Erdal] '* Thông báo: Bản quyền (c) 2005 [ETE] '*: Tất cả các quyền '* Ngày: 23.06.2005 '* Phiên bản: 1.0 LED (6) * Ghi chú: KHÔNG NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ '*: THỜI GIAN CHÍNH PHỦ RTC hoạt động với DS1302 '******************************************* PORT = 0: PORTB = 0 TRISB = 0 A =% Tris 11100000 '------------------------------------------------- ---------------- Bộ xử lý @ DEVICE pic16F628 '16F628 @ DEVICE pic16F628, bộ đếm thời gian Watch Dog của WDT_ON 'trên @ DEVICE pic16F628, PWRT_ON 'Bật hẹn giờ trên @ DEVICE pic16F628, PROTECT_OFF 'Mã Protek bị tắt @ DEVICE pic16F628, pin MCLR MCLR_off 'không được sử dụng. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Bộ dao động nội bộ được sử dụng '------------------------------------------------- ---------------- 'DEFINE OSC 4 '------------------------------------------------- -------------------- TIẾP TỤC TIẾP TỤC TRÊN TIẾP TỤC Đến Cắt được gọi là Cắt nếu Cắt. OPTION_REG =% 10000101 'Điện trở kéo lên HỦY - Tỷ lệ chia 1/64. INTCON =% 10100000 'Ngắt hoạt động ngắt TMR0 và hoạt động TMR0 = 0 = CMCO của 7 '------------------------------------------------- -------------------- Comm_Pin VAR PortA.4 'Dữ liệu một dây "DQ" PortB.0 da Busy YES BIT 'Trạng thái bận rộn-bit có tiếp xúc với BIT GOR VAR BYTE Giá trị đọc RARE của bộ cảm biến HAM VAR WORD ' ISI VAR WORD 'Giá trị ISI được tính Float VAR WORD 'Giữ phần còn lại cho màn hình + nhiệt độ C X VAR WORD Y YES BYTE NUMBER BYTE SIGN_BITI YES HAM.Bit11 '+/- Nhiệt độ bit dấu, 1 = nhiệt độ âm NEGAT_ISI CON 1 'Negative_Cold = 1 Dấu & quot; ĐĂNG KÝ CÓ BYTE '+/- ký cho giá trị nhiệt độ TEMP VAR BYTE 'Biến tạm thời cho máy tính Div 32 bit COUNT BY BYTE SN VAR BYTE DAK BYTE HOUR BYTE GUN VAR BYTE MONTH BYTE NĂM BYTE MEM var byte 'Người giữ dữ liệu tạm thời 'TARIH var byte' byte thứ hai để ds1302 THEY LÀ BYTE BYTE BYTE ESN YES BYTE '--------------------------------------------- SYMBOL DTA = PortB.0 SYMBOL CLK = PORTB.1 SYMBOL RTC_DTA = PORTA.0 SYMBOL RTC_CLK = PORTA.1 SYMBOL RTC_RST = PORTA.2 ký hiệu SEC = PORTA.5 SYMBOL ASAGI = PORTA.6 SYMBOL UP = PORTA.7 '--------------------------------------------- CLEAR 'tất cả các biến được đặt lại RTC_RST thấp RTC_CLK thấp PAUSE 200 Esna = 0 G = 0: POS = 0 '--------------------------------------------- PORTB = 0 gosub TIME_COPY: esn = SN BASLER để: NẾU Y = 11 THÌ Y = 0 NẾU Y> MÀN HÌNH GOSUB 5 THÌ NẾU Y <6 font="" gosub="" screen="" then=""> SKIP: nếu SEC = 0 THÌ SETTING 'ĐI ĐỂ THIẾT LẬP NẾU PHƯƠNG THỨC ĐƯỢC CHẤP NHẬN gosub SENSOROKU 'ĐỌC BÀI HÁT VÀ VIẾT TRÊN MÀN HÌNH NHIỆT ĐỘ GOTO BREAK EKRAN0: nếu sayac = 30 thì LOW porta.3 X = HOUR DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 X = HOUR DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 X = DAK DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 X = DAK DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = sn DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = SN DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN AL: LOOKUP X, [63,6,91,79,102,109,125,7,127,111,99,57], NUMBER: RETURN Màn hình 1: LOW PORTA.3 COUNT = 0 SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 NẾU SIGN_BITI = NEGAT_ISI THÌ NUMBER = 64 SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 x = (ISI DIG 1): GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 x = (ISI DIG 0): GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = 10: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = 11: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN SCREEN2: HIGH porta.3 X = GUN DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 X = GUN DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 X = AY DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 X = AY DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = YEAR DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = YEAR DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN SETUP: POS = 1: GoSub FLASH KHI SEC = 0 xoay về GIỜ: GOSUB SCREEN LOW PORTA.3 NẾU SEC = 0 THÌ MINBIR IF UP = 0 THEN THỜI GIAN = THỜI GIAN + 1 NẾU THỜI GIAN = 24 THỜI GIAN = 0 ENDIF NẾU ASAGI = 0 THÌ THỜI GIAN = THỜI GIAN-1 NẾU THỜI GIAN = 255 THỜI GIAN THỜI GIAN = 23 ENDIF GOSUB DELAY GOTO HOUR Các minbar: GOSUB FLASH KHI SEC = 0 xoay về MINUTE: GOSUB SCREEN LOW PORTA.3 NẾU SEC = 0 THÌ tìm kiếm IF UP = 0 THEN DAK = DAK + 1 NẾU DAK = 60 THEN DAK = 0 ENDIF NẾU ASAGI = 0 THÌ DAK = DAK-1 NẾU DAK = 255 THEN DAK = 59 ENDIF GOSUB DELAY GOTO MINUTE SECBIR: WHILE SEC = 0 xoay về DELAY: CHO X = 0 TO 1800 PAUSEUS 100 TIẾP THEO RETURN TÌM KIẾM: GOSUB FLASH CAO PORTA.3 KHI SEC = 0 xoay về MEM = SN: GOSUB TERSCEVIR: SN = NUMBER MEM = DAK: GOSUB TERSCEVIR: DAK = NUMBER MEM = HOURS: GOSUB TERSCEVIR: HOURS = NUMBER MEM = GUN: GOSUB TERSCEVIR: GUN = NUMBER MEM = THÁNG: GOSUB TERSCEVIR: MONTH = NUMBER MEM = YEAR: GOSUB TERSCEVIR: YEAR = NUMBER GOSUB TIME_YAZ POS = 0 GOTO UP FLASH: TOGGLE PORTA.3: PAUSE 150: TOGGLE PORTA.3: PAUSE 150 TOGGLE PORTA.3: PAUSE 150: TOGGLE PORTA.3: PAUSE 150 trả lại '---------------- SENSOR SENSOR ĐỌC PHẦN ----------------------------- --- SENSOROK của: '----------------- THẬN TRỌNG S ACT ĐƯỢC THỰC HIỆN TRONG NÀY LÀ ---------------------- ham = $ ff5e: Tính toán Gosub: return 'NORMAL WORKING NÀY DÒNG S DEL ĐƯỢC XÓA '------------------------------------------------- ----------------------------- OW_T COMM_PIN, 1, [$ CC, $ 44] 'Đọc giá trị ISI chờ đợi: OW_P COMMIN, 4, [Bận] 'Đọc giá trị bận IF Busy = 0 THEN Wait 'vẫn đang bận? , vâng, nếu goto Chờ ..! OWOUT Comm_Pin, 1, [$ CC, $ BE] 'đọc bộ nhớ đệm OWIN COMM_PIN, 2, [HAM.Lowbyte, HAM.Highbyte] 'Hai byte đọc và đọc xong. Tính toán GOSUB RETURN Tính toán: 'Giá trị độ tín dụng từ giá trị thô Ký = "+" NẾU SIGN_BITI = NEGAT_ISI THEN Dấu = "-" temp = ($ FFFF-ham + 1) * 625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM + 1) ISI = DIV32 10 'Chúng tôi đang phân chia 32 bit cho tài khoản cấp độ chính xác của Div32. GEC: FLOAT = (ISI // 1000) / 100 ISI = ISI / 1000 RETURN ZAMAN_OK của: 'sayac = 1-sayac:' nếu sayac = 1 thì thấp porta.3 RTC_RST cao chuyển đổi RTC_DTA, RTC_CLK, 0, [$ BF] SHIFTA RTC_DT cho bạn, RTC_CLK 1, [SN, MIN, TIME, D AY, MEM, NĂM, MEM] ĐỌC MEM = SN: GOSUB CEVIR: SN = NUMBER MEM = DAK: GOSUB CEVIR: DAK = NUMBER MEM = GIỜ: GOSUB CEVIR: HOURS = NUMBER MEM = GUN: GOSUB END: GUN = NUMBER MEM = THÁNG: GOSUB CEVIR: MONTH = NUMBER MEM = NĂM: GOSUB CEVIR: YEAR = NUMBER RTC_RST thấp ': PAUSE trả lại ZAMAN_YAZ: RTC_RST cao SHIFTOUT RTC_DTA, RTC_CLK, 0, PREPARE ĐỂ VIẾT [$ 8E, 0] ' RTC_RST thấp: PAUSE 1 RTC_RST cao RTC_DT để SHIFTOUT, RTC_CLK, 0, [$ B, SNA, MIN, TIME, D AY, 0, NĂM, 0] MÙA HÈ RTC_RST thấp PAUSE 10 trả lại Đội hình thi đấu: ONLAR = MEM &% 01110000 HỌ HỌ >> = 4 BIRLER = MEM &% 00001111 COUNT = 10 + B họ * là RETURN Là Ruffnut: ONLAR = MEM DIG 1 HỌ HỌ << = 4 BIRLER = MEM DIG 0 Họ đếm = A + B là RETURN DISABLE CẮT: NẾU POZ = 1 thì CIK SAYAC = SAYAC + 1 'bộ đếm ngắt 1 giây = 61 (bộ đếm) x 256 (Tmr0) x 64 (phân chia) NẾU SAYAC = 61 thì 1 khi có 61 vết cắt. hết thời gian (999424 chúng tôi) Bộ đếm SAYAC = 0 'được đặt lại Y = Y + 1 GOSUB ZAMAN_OKU nếu Y <5 font="" high="" porta.3="" th=""> ENDIF CIK: INTCON.2 = 0 'Cờ ngắt TMR0 được đặt lại RESUME ENABLE END 5>6>
Circuit-7: Chương trình này hoạt động với màn hình LED 7 đoạn. Thông tin đồng hồ được gọi là DS1302. Nó hiển thị trong vài giây. Nhiệt độ nhỏ. Đèn Led trung bình Nhấp nháy bằng phương pháp cắt. HIỂN THỊ NGÀY.
Dễ dàng Gelsin,
ETE
ETE
'****************************************** '* Tên: SAAT-TERMO.BAS '* Tác giả: [Erol Tahir Erdal] '* Thông báo: Bản quyền (c) 2005 [ETE] '*: Tất cả các quyền '* Ngày: 23.06.2005 '* Phiên bản: 1.0 LED (7) * Ghi chú: KHÔNG NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ NHIỆT ĐỘ '*: THỜI GIAN CHÍNH PHỦ RTC hoạt động với DS1302 '******************************************** PORT = 0: PORTB = 0 TRISB = 0 A =% Tris 11100000 '------------------------------------------------- ---------------- Bộ xử lý @ DEVICE pic16F628 '16F628 @ DEVICE pic16F628, bộ đếm thời gian Watch Dog của WDT_ON 'trên @ DEVICE pic16F628, PWRT_ON 'Bật hẹn giờ trên @ DEVICE pic16F628, PROTECT_OFF 'Mã Protek bị tắt @ DEVICE pic16F628, pin MCLR MCLR_off 'không được sử dụng. @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Bộ dao động nội bộ được sử dụng '------------------------------------------------- ---------------- 'DEFINE OSC 4 '------------------------------------------------- ------------------------ TIẾP TỤC TIẾP TỤC TRÊN TIẾP TỤC Đến Cắt được gọi là Cắt nếu Cắt. OPTION_REG =% 10000101 'Điện trở kéo lên HỦY - Tỷ lệ chia 1/64. INTCON =% 10100000 'Ngắt hoạt động ngắt TMR0 và hoạt động TMR0 = 0 = CMCO của 7 '------------------------------------------------- --------------------------- Comm_Pin VAR PortA.4 'Dữ liệu một dây "DQ" PortB.0 da Busy YES BIT 'Trạng thái bận rộn-bit BIT TÍCH CỰC GOR VAR BYTE Giá trị đọc RARE của bộ cảm biến HAM VAR WORD ' ISI VAR WORD 'Giá trị ISI được tính Float VAR WORD 'Giữ phần còn lại cho màn hình + nhiệt độ C X VAR WORD Y YES BYTE NUMBER BYTE SIGN_BITI YES HAM.Bit11 '+/- Nhiệt độ bit dấu, 1 = nhiệt độ âm NEGAT_ISI CON 1 'Negative_Cold = 1 Dấu & quot; ĐĂNG KÝ CÓ BYTE '+/- ký cho giá trị nhiệt độ TEMP VAR BYTE 'Biến tạm thời cho máy tính Div 32 bit COUNT BY BYTE SN VAR BYTE DAK BYTE HOUR BYTE GUN VAR BYTE MONTH BYTE NĂM BYTE MEM var byte 'Người giữ dữ liệu tạm thời 'TARIH var byte' byte thứ hai để ds1302 THEY LÀ BYTE BYTE BYTE ESN YES BYTE '--------------------------------------------- SYMBOL DTA = PortB.0 SYMBOL CLK = PORTB.1 SYMBOL RTC_DTA = PORTA.0 SYMBOL RTC_CLK = PORTA.1 SYMBOL RTC_RST = PORTA.2 ký hiệu SEC = PORTA.5 SYMBOL ASAGI = PORTA.6 SYMBOL UP = PORTA.7 '-------------------------------------- CLEAR 'tất cả các biến được đặt lại RTC_RST thấp RTC_CLK thấp GOSUB DELAY '-------------------------------------- CAO PORTA.3 gosub TIME_COPY: esn = SN BASLER để: NẾU Y = 15 THÌ Y = 0 NẾU Y> 5 VÀ Y <11 font="" gosub="" screen="" then=""> NẾU Y> 10 THÌ GOSUB SCREEN2 NẾU Y <6 font="" gosub="" screen="" then=""> SKIP: nếu SEC = 0 THÌ SETTING 'ĐI ĐỂ THIẾT LẬP NẾU PHƯƠNG THỨC ĐƯỢC CHẤP NHẬN gosub SENSOROKU 'ĐỌC BÀI HÁT VÀ VIẾT TRÊN MÀN HÌNH NHIỆT ĐỘ GOTO BREAK EKRAN0: nếu sayac = 28 thì LOW porta.3 X = HOUR DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 X = HOUR DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 X = DAK DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 X = DAK DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = sn DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = SN DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN AL: LOOKUP X, [63,6,91,79,102,109,125,7,127,111,99,57], NUMBER: RETURN Màn hình 1: LOW PORTA.3 COUNT = 0 SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 NẾU SIGN_BITI = NEGAT_ISI THÌ NUMBER = 64 SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 x = (ISI DIG 1): GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 x = (ISI DIG 0): GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = 10: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = 11: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN SCREEN2: NẾU POZ = 0 THEN HIGH porta.3 X = GUN DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.2: PAUSEUS 2: LOW PORTB.2 X = GUN DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.3: PAUSEUS 2: LOW PORTB.3 X = AY DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.4: PAUSEUS 2: LOW PORTB.4 X = AY DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.5: PAUSEUS 2: LOW PORTB.5 X = YEAR DIG 1: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.6: PAUSEUS 2: LOW PORTB.6 X = YEAR DIG 0: GOSUB AL SHIFTOUT DTA, CLK, 1, [NUMBER] HIGH PORTB.7: PAUSEUS 2: LOW PORTB.7 RETURN '------------------------------------------------- ---- Setting: LOW PORTA.3: SN = 0: POZ = 1: GOSUB FLASH NẾU Y> 10 THÌ NGÀY KHI SEC = 0 xoay về GIỜ: GOSUB SCREEN LOW PORTA.3 NẾU SEC = 0 THÌ MINBIR IF UP = 0 THEN THỜI GIAN = THỜI GIAN + 1 NẾU THỜI GIAN = 24 THỜI GIAN = 0 ENDIF NẾU ASAGI = 0 THÌ THỜI GIAN = THỜI GIAN-1 NẾU THỜI GIAN = 255 THỜI GIAN THỜI GIAN = 23 ENDIF GOSUB DELAY GOTO HOUR Các minbar: GOSUB FLASH KHI SEC = 0 xoay về MINUTE: GOSUB SCREEN LOW PORTA.3 NẾU SEC = 0 THÌ tìm kiếm IF UP = 0 THEN DAK = DAK + 1 NẾU DAK = 60 THEN DAK = 0 ENDIF NẾU ASAGI = 0 THÌ DAK = DAK-1 NẾU DAK = 255 THEN DAK = 59 ENDIF GOSUB DELAY GOTO MINUTE SECBIR: WHILE SEC = 0 xoay về DELAY: CHO X = 0 TO 1800 PAUSEUS 50 TIẾP THEO RETURN DELAY: CHO X = 0 TO 1900 PAUSEUS 10 TIẾP THEO RETURN TÌM KIẾM: GOSUB FLASH CAO PORTA.3 KHI SEC = 0 xoay về MEM = SN: GOSUB TERSCEVIR: SN = NUMBER MEM = DAK: GOSUB TERSCEVIR: DAK = NUMBER MEM = HOURS: GOSUB TERSCEVIR: HOURS = NUMBER MEM = GUN: GOSUB TERSCEVIR: GUN = NUMBER MEM = THÁNG: GOSUB TERSCEVIR: MONTH = NUMBER MEM = YEAR: GOSUB TERSCEVIR: YEAR = NUMBER GOSUB TIME_YAZ GOSUB ZAMAN_OKU y = 0: POS = 0 GOTO UP FLASH: TOGGLE PORTA.3: GOSUB DELAY: TOGGLE PORTA.3: GOSUB DELAY TOGGLE PORTA.3: GOSUB DELAY: TOGGLE PORTA.3: GOSUB DELAY trả lại '------------------------------------------------- ---------------- Đó là TARIHAY: KHI SEC = 0 xoay về GUNAL: GOSUB SCREEN2 NẾU SEC = 0 THÌ THÁNG IF UP = 0 THEN G = G + 1 NẾU GUN = 32 THEN GUN = 1 ENDIF NẾU ASAGI = 0 THÌ G = G-1 NẾU GUN = 255 THEN THỜI GIAN = 31 ENDIF GOSUB DELAY GOTO GUNAL EIB: GOSUB FLASH KHI SEC = 0 xoay về AYAL: GOSUB SCREEN2 NẾU SEC = 0 THÌ NĂM IF UP = 0 THEN = AY AY + 1 NẾU AY = 13 THÌ AY = 1 ENDIF NẾU ASAGI = 0 THÌ AY-AY = 1 NẾU AY = 255 THÌ AY = 12 ENDIF GOSUB DELAY GOTO AYAL Các Maal Hijrah: gosub FLASH KHI SEC = 0: WEND YILAL: GOSUB SCREEN2 NẾU SEC = 0 THÌ TÌM KIẾM IF UP = 0 THEN NĂM NĂM = + 1 NĂM NĂM = 100 THÌ NĂM = 0 ENDIF NẾU ASAGI = 0 THÌ NĂM = yr-1 NĂM NĂM = 255 THÌ NĂM = 99 ENDIF GOSUB DELAY GOTO YILAL '---------------- SENSOR SENSOR ĐỌC PHẦN ----------------------------- --- SENSOROK của: '----------------- THẬN TRỌNG S ACT ĐƯỢC THỰC HIỆN TRONG NÀY LÀ ---------------------- 'ham = $ ff5e: Tính toán Gosub: return' NORMAL WORKING NÀY DÒNG S BE ĐƯỢC XÓA '------------------------------------------------- ----------------------------- OW_T COMM_PIN, 1, [$ CC, $ 44] 'Đọc giá trị ISI chờ đợi: OW_P COMMIN, 4, [Bận] 'Đọc giá trị bận IF Busy = 0 THEN Wait 'vẫn đang bận? , vâng, nếu goto Chờ ..! OWOUT Comm_Pin, 1, [$ CC, $ BE] 'đọc bộ nhớ đệm OWIN COMM_PIN, 2, [HAM.Lowbyte, HAM.Highbyte] 'Hai byte đọc và đọc xong. Tính toán GOSUB RETURN Tính toán: 'Giá trị độ tín dụng từ giá trị thô Ký = "+" NẾU SIGN_BITI = NEGAT_ISI THEN Dấu = "-" temp = ($ FFFF-ham + 1) * 625 ISI = DIV32 10 GOTO GEC endif TEMP = 625 * (HAM + 1) ISI = DIV32 10 'Chúng tôi đang phân chia 32 bit cho tài khoản cấp độ chính xác của Div32. GEC: FLOAT = (ISI // 1000) / 100 ISI = ISI / 1000 RETURN ZAMAN_OK của: RTC_RST cao chuyển đổi RTC_DTA, RTC_CLK, 0, [$ BF] SHIFTA RTC_DT cho bạn, RTC_CLK 1, [SN, MIN, TIME, D AY, MEM, NĂM, MEM] ĐỌC MEM = SN: GOSUB CEVIR: SN = NUMBER MEM = DAK: GOSUB CEVIR: DAK = NUMBER MEM = GIỜ: GOSUB CEVIR: HOURS = NUMBER MEM = GUN: GOSUB END: GUN = NUMBER MEM = THÁNG: GOSUB CEVIR: MONTH = NUMBER MEM = NĂM: GOSUB CEVIR: YEAR = NUMBER RTC_RST thấp trả lại ZAMAN_YAZ: RTC_RST cao SHIFTOUT RTC_DTA, RTC_CLK, 0, [$ 8E, 0] 'Mở WRT Protek RTC_RST thấp: PAUSEUS 10 RTC_RST cao SHIFTOUT RTC_DTA, RTC_CLK, 0, [$ BE, SN, DAK, GIỜ, GUN, THÁNG, 0, NĂM, 128] RTC_RST thấp PAUSEUS 10 trả lại Đội hình thi đấu: ONLAR = MEM &% 01110000 HỌ HỌ >> = 4 BIRLER = MEM &% 00001111 COUNT = 10 + B họ * là RETURN Là Ruffnut: ONLAR = MEM DIG 1 HỌ HỌ << = 4 BIRLER = MEM DIG 0 Họ đếm = A + B là RETURN DISABLE CẮT: NẾU POZ = 1 thì CIK SAYAC = SAYAC + 1 'bộ đếm ngắt 1 giây = 61 (bộ đếm) x 256 (Tmr0) x 64 (phân chia) NẾU SAYAC = 58 thì 1 khi có 61 vết cắt. hết thời gian (999424 chúng tôi) Bộ đếm SAYAC = 0 'được đặt lại Y = Y + 1 GOSUB ZAMAN_OKU nếu Y <5 font="" high="" porta.3="" th=""> ENDIF CIK: INTCON.2 = 0 'Cờ ngắt TMR0 được đặt lại RESUME ENABLE END 5>6>11>
Tất cả các tệp nguồn của dự án 7 GIỜ và THERMOMETER mạch được thực hiện với PIC16F628. Proteus isis mô phỏng bao gồm nguồn picBasic .bas .hex và như vậy. mã Clock Nhiệt kế với mạch PIC16F628 PIC cơ bản
Tải xuống tệp LINK danh sách (ở định dạng TXT)
Post a Comment