矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: Julie

[实验] PIC 控制的旋转LED电子钟

[复制链接]
     
 楼主| 发表于 2008-5-17 02:43:37 | 显示全部楼层
能走时了(不知准不准)

J1001.jpg

J1002.jpg
     
 楼主| 发表于 2008-5-17 02:51:11 | 显示全部楼层
走时处理摸块1(中断程序):
;--------- interrupt --------
Irpt   movwf      sw                ; save w
        movf        STATUS,0        
        movwf      ss                ; save status
        incfsz      kl,1
        goto        Dn
        incfsz      kh,1
        goto        Dn
        incfsz      k,1                ; increment k
        goto        Dn
        bsf          temp,7               
        call         init_k             ; init k value
Dn    movf        ss,0        
        movwf      STATUS       ; restore status
        movf        sw,0             ; restore w
        bcf          INTCON,T0IF ; clear interrupt flag
        return
     
 楼主| 发表于 2008-5-17 02:57:39 | 显示全部楼层
走时处理摸块2(时间处理程序):
;-------- Processing -------
Proc btfss        PORTA,0           ; check sync
        bcf           temp,0               
        btfss        temp,7              ; check flag
        return
        incf          min,1                ; add 1 minute
        movlw      0Fh
        andwf      min,0        
        movwf      i                 
        movlw      0Ah
        xorwf       i,0
        btfss        STATUS,Z        ; overflow
        return
        swapf      min,1
        incf         min,1                ; increment 10min
        movlw      0Fh
        andwf      min,0                ; get the 10min
        movwf      min                  ; clear min
        movwf      i        
        movlw      6h
        xorwf       i,0
        swapf      min,1                ; restore min
        btfss       STATUS,Z        ; overflow
        return
        incf         hr,1                ; increment 1 hour
        movlw     0Fh
        andwf      hr,0        
        movwf      i        
        btfsc        hr,4        
        goto        Apm                ; AM/PM processing
        movlw      0Ah
        xorwf       i,0
        btfss       STATUS,Z        ; check 10hr
        return
        bsf          hr,4                ; increment 10hr
        movwf      0Fh        
        andwf       hr,1                ; clear hr        
        return
Apm  movlw      3h
        andwf       hr,0               
        movwf      i        
        xorwf       i,0
        btfss        STATUS,Z      ; overflow
        return
        bsf          hr,0                ; set hr=1        
        bcf          hr,4                ; clear the 10hr
        movlw      80h
        xorwf       hr,1                ; AM/PM changed        
        return
     
 楼主| 发表于 2008-5-17 04:55:44 | 显示全部楼层
红外遥控校时也工作了.

B002.jpg

B001.jpg
     
 楼主| 发表于 2008-5-17 05:09:31 | 显示全部楼层
红外遥控校时Update模块程序:
;-------- Update ---------------
Updt  movlw       7Eh
        andwf        temp,1                ; reset
RM   btfsc         PORTA,1             ; check infred remote signal
        return
        call           Di               
        btfsc         PORTA,1            ; comfirm
        return
        bsf            temp,7                ; time changed
        goto          RM


[ 本帖最后由 Julie 于 2008-5-18 08:44 编辑 ]
     
 楼主| 发表于 2008-5-17 05:19:10 | 显示全部楼层
其它:
初始化程序:
;-------- Init ----------
Init      movlw       12h
          movwf        hr               
          clrf            min                      ; start at 12:00 AM
          movlw        0h        
          tris            PORTB                ; RB0-7 all output
          movlw        3h        
          tris            PORTA                ; RA0=sync(input), RA1=remote(input), RA2=motor(output)        
          bcf            INTCON,T0IF        ; clear TMR0 interrupt flag
          bsf            INTCON,T0IE        ; enable TMR0 interrupt
          movlw        0D8h               
          option                                   ; timer setup
          clrf           TMR0                    ; start timer
          bsf           PORTA,2               ; motor=on
Dim    movlw       5h
          movwf       n                          ; init display index
          movlw       0FFh        
          movwf       PORTB                ; dim a space
          return
init_k  movlw       0x79
          movwf       kl
          movlw       0x6C
          movwf       kh
          movlw       0xFC               
          movwf       k                         ; init k value = overflow from FC6C79h
          return
     
 楼主| 发表于 2008-5-17 05:34:34 | 显示全部楼层
其它:
变量和主程序等:
;----------------------------------------------
; File: JLED100.asm
;       For Julie Rotational LED Clock
;       H/W:  PIC16F84, 4MHz Crystal
;       Ver:  0.04
;       Date: 16/05/2008     By: Julie Jean
;----------------------------------------------
        list        p=16F84
        include        "p16f84.inc"
        __config 3FF1h        

;-------- Variable ---------
        cblock        0x0C
        temp       ; flag
        i             ; counter i
        j              ; counter j
        k             ; number of interrupt
        kl            ; low k
        kh           ; high k
        n             ; for display
        hr            ; hours
        min         ; minutes        
        sw          ; saved w
        ss          ; saved status
        endc

;-------- Start -----------
        org        0h               
        goto      Main        ; main program

        org        4h         
        call       Irpt       ; interrupt service routine
        retfie

;-------- TABLE --------
Table        addwf        PCL,1
        dt        0C1h,0BEh,0BEh,0BEh,0C1h        ; "O"        
        dt        0FFh,0FEh, 80h,0DEh,0FFh          ; "1"        
        dt        0CEh,0B6h,0BAh,0BCh,0DEh       ; "2"        
        dt        0B9h, 96h,0AEh,0BDh,0BEh         ; "3"        
        dt        0FBh, 80h,0DBh,0EBh,0F3h         ; "4"        
        dt        0B1h,0AEh,0AEh,0AEh, 8Dh        ; "5"        
        dt        0F9h,0B6h,0B6h,0D6h,0E1h         ; "6"        
        dt         9Fh,0AFh,0B7h,0B8h,0BFh         ; "7"        
        dt        0C9h,0B6h,0B6h,0B6h,0C9h        ; "8"        
        dt        0C3h,0B5h,0B6h,0B6h,0CFh        ; "9"        
        dt        0FFh,0FFh,0C9h,0C9h,0FFh        ; ":"        
        dt        0E0h,0D7h,0B7h,0D7h,0E0h        ; "A"        
        dt        0CFh,0B7h,0B7h, 80h,0FFh         ; "P"        
        dt         80h,0DFh,0E7h,0DFh, 80h          ; "M"        

;-------- Delay ------------
Daa      movlw   6Fh                ; long delay daa
           goto        Delay
Di        movlw        1Fh            ; short delay di
Delay   movwf        i
Loop    decfsz        i,1
           goto        Loop               
           return                        

;--------- Main -----------
Main       call        Init              ; init variable, port, timer
Run        call        Proc            ; processing
              call        Disp            ; display
              call        Updt            ; update
              goto       Run             ; endless run
              end
     
 楼主| 发表于 2008-5-17 05:54:59 | 显示全部楼层
其它:
编译和HEX文件:

JLEDHex02.JPG
     
 楼主| 发表于 2008-5-17 06:01:22 | 显示全部楼层
Julie谢谢大家半年来对本实验的关注!
发表于 2008-5-19 14:49:31 | 显示全部楼层
恭喜楼主!实验成功,要请客哦
发表于 2008-5-22 11:01:14 | 显示全部楼层
实属不易,激励后人,恭喜!
发表于 2008-5-23 15:36:58 | 显示全部楼层
我用51做的

打算送女友哄她开心

呵呵

等有时间借个相机给大家拍下
您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-6-17 11:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表