PIC16F628 PIC CƠ BẢN VỚI MẠCH ĐỒNG HỒ NHIỆT KẾ

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


Pic16f628 Pic cơ bản với mạch đồng hồ nhiệt kế



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 độ .
giờ isis lcd dự án nhiệt kế 1
'*********************************
'* 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.
PicBasic hiển thị nhiệt kế thời gian
'*****************************
'* 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

PIC16F628 PIC CƠ BẢN VỚI MẠCH ĐỒNG HỒ NHIỆT KẾ

Pic16f628 Pic cơ bản với mạch nhiệt kế đồng hồ trang 2
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.
pic16f628 uln2004 ds18b20 nhiệt kế
'**************************************
'* 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

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.
pic16f628 nhiệt kế mạch đồng hồ 74hc595 ds18b20 pibasic
'****************************************
'* 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

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ỏ.
Đồng hồ isi dẫn pic16f628 pic cơ bản
'***************************************
'* 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Ế

Pic16f628 Pic cơ bản với mạch nhiệt kế đồng hồ trang 3
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.
giờ nhiệt kế DS1302 pic16f628
'*******************************************
'* 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

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
đồng hồ isis mạch dẫn 7
'******************************************
'* 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

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

[disqus] [facebook] [blogger]

MKRdezign

Biểu mẫu liên hệ

Name

Email *

Message *

Powered by Blogger.
Javascript DisablePlease Enable Javascript To See All Widget
Hỗ trợ trực tuyến