金沙js5线路(中国)有限公司

技术热线: 4007-888-234

PIC16C55单片机控制多用电子钟

更新时间: 2019-03-22
阅读量:2334

本电子钟采用PIC16C55单片机控制,适于温室的定时恒温或自来水的定时定压控制等。PIC16C55单片机工作电压为2.5~6.25V,功耗低、驱动能力强。本电子钟可以控制一路负载在24小时内的3次开/关;一个双限触发的定时输出口,既可接传统的功率保持型继电器,也可接脉冲继电器。本机用四位LED数码管扫描式显示,还有消隐(省电)工作方式,使用起来非常灵活、方便。
  一、工作原理
  电子钟电路见图1。
  RB7口是定时指示端,在定时开期间输出高电平,驱动V1发光,该口也可经缓冲作定时输出口;RB6是双限触发控制的定时输出口,其工作方式是:在RB7高电平期间,若RB1为高电平,则RB6输出高电平;若RB0为高电平,RB6输出低电平;若RB1、RB0同为低电平,RB6保持原态;同为高电平时,RB6输出低电平。RB5、RB4用于驱动脉冲继电器,RB6上升沿触发RB5输出高电平开脉冲;在RB6下降沿触发RB4时,RB4端输出高电平关脉冲,开/关脉冲的持续时间均为125ms。
  RB3是消隐控制器,接高电平(即SK1闭合)时,显示屏及秒闪正常;否则,显示消隐。显示消隐时,时钟及各控制逻辑都正常运行,如忽略RB4至RB7各口的驱动电流,则在3V供电时,整机电流不足20μA,即两节5号电池可用数月!RB2选择数码管极性,RB2为低电平,使用共阴LED;RB2为高电平,则用共阳LED。数码管的极性是在上电初始化时,根据RB2口状态确定的,工作过程中改变RB2的电平则不起作用。

本机设S1~S4四个按键,S1是功能选择键,S2是小时增量调整,S3是分钟增量,S4用于分钟减量调节,其使用方法为:
  上电时,RB5至RB7均为低电平,RB4端送出一个关脉冲,使SK1闭合,整机正常显示、工作,RC7口送出秒闪脉冲,RC6~RC0送字段码。RA3~RA0分别为10时、时、10分、分位的位码输出。这时,按一下S2或S3(时增量/分增量键),可使RB7端置位或复位。
  在正常走时期间,秒闪正常;在校对或设置定时时,秒停闪。例如:在正常走时期间,按一下S1键,秒闪停止,屏幕显示J-,表示可以校对时间。这时再按S2~S4中任一键,屏幕显示现在时间,但秒不闪,此刻可按S2~S4校对时钟。再次按S1,屏幕显示1∪,表示可以设定第一次开时间,此时按S2~S4对时间进行查看及设置。继续按S1,系统显示1∩,表示可设置第一次关时间……依次进行。设置好系统及3次开关时间后,整机回到正常显示状态,秒闪恢复。
  如欲取消某次开/关定时,只需把该次的开与关时间设置成相同值即可。
  笔者曾把该时钟用于定时定压供水控制系统,RB6端用于驱动继电器(也可用RB5与RB4两端驱动脉冲继电器),RB1端接水压(水位)的低限输入,RB0端接高限输入,设置好定时,一个简易的定时定压自动供水系统即告完成。
  二、编程技巧
  PIC16C55单片机程序存储器只有512字节,加上采用外接32768Hz晶体振荡方式,时钟速度较低,因此,统筹好系统的工作时序与人机界面之间的关系是软件设计成败的关键。本机编程采用如下方案:
  软件工作流程见附图2。

PIC16C55单片机的一个机器周期是4个时钟周期,不难算出,本系统中每秒有8192个机器周期。在编制软件时,先设定单片机内部定时计数器F1的计数方式为机器周期的64分频。这样,每当F1溢出时,系统递加2秒。平时,系统每128个机器周期内用RC口与RA口驱动扫描一次显示屏,可保证每秒内扫描64次显示屏,基本上无闪烁感。而128个机器周期正是F1的第0位(为便于叙述以下简记为F10)每次下降沿的间隔时间,我们可以编一段程序,当F10的下降沿到来时,扫描一次显示屏,每当F1的低4位为全0时(125ms一次)使系统检测一次RB口与按键状态,并进行相关处理,部分相关程序如下:
WAIT  BTFSC 1,0    ;等待F10的下降沿,编程时
      GOTO  WAIT   ;要保证每次下降沿前到此

MOVFW 1
      SKPNZ
      GOTO  CLOCK ;F1=0,满2秒,转时钟处理
      ANDLW 0FH ;屏蔽F1高4位
      SKPZ
      GOTO DISPLAY;F1低4位不为0,转显示
      MOVLW 0C0H ;满125mS,使RB口脉冲复位
      ANDWF 6,1
      MOVLW 0FH   ;检测按键
      TRIS  7
      MOVFW 7
      ANDLW 0FH ;保留按键数据
      SKPZ
      GOTO AN  ;有键值,转按键处理
DISPLAY ……      ;显示扫描,定时管理RB口
CLOCK    ……      ;时钟,定时处理程序
AN    ……      ;按键管理程序
  经近一年的运行,该系统非常的稳定、可靠。有兴趣者不妨一试


PIC16C55单片机控制多用电子钟2


PIC16C55单片机控制多用电子钟1

本源程序系`一款多用电子钟芯片'源程序,可有3开3关定时,且有受双限触发的定时口
 ;该程序硬件系采用PIC16C55芯片LP振荡方式外接32768Hz晶振

   ORG      000H      
TOP             XORLW    0FFH      
                XORLW    0FFH      
                XORLW    0FFH      
                XORLW    0FFH      
                MOVLW    08H         ;F 12H--1DH依次为K1F--G3S
                MOVWF    4         
QL              CLRF     0         
                INCF     4,1       
                CLRWDT  
                MOVFW    4         
                ANDLW    1FH       
                SKPZ    
                GOTO     QL        
                CLRF     4         
                BTFSC    6,2       
                BSF      0BH,2       ;共阳
                GOTO     CSH       
HBCD            NOP     
DBCD            ANDLW    0FH        

CLRWDT  
                NOP     
                ADDWF    2,1       
                RETLW    01H         ;0(共阳)
                RETLW    4FH         ;1
                RETLW    12H         ;2
                RETLW    06H         ;3
                RETLW    4CH         ;4
                RETLW    24H         ;5
                RETLW    20H         ;6
                RETLW    0FH         ;7
                RETLW    00H         ;8
                RETLW    04H         ;9
                RETLW    47H         ;A(校时) 显示J
                RETLW    71H         ;B(闹铃) 显示L
                RETLW    31H         ;C
                RETLW    63H         ;D(开)
                RETLW    6AH         ;E(关)
                RETLW    7EH         ;F(杠)
CSH             CLRW                 ;初始化
                TRIS     5           ;F5,3--5,0共阳显示扫描10时--分
                BTFSS    0BH,2      

 MOVLW    0FH       
                MOVWF    5           ;关扫描
                MOVLW    0FH       
                TRIS     6         
                CLRF     6           ;关闭定时输出
                BSF      6,4         ;输出关脉冲
                MOVLW    11H         ;置显示指针,F11H--时,F10H--分
                MOVWF    4         
                MOVLW    05H         ;F1计数64分频
                OPTION  
                MOVLW    01H       
                MOVWF    1         
                MOVLW    0E2H      
                MOVWF    0FH       
HBEGIN          BCF      0BH,0       ;清1/8秒标志
                CLRWDT  
WAIT            BTFSC    1,0         ;至HXSCL-17
                GOTO     WAIT        ;1/64秒检查
                MOVFW    1          

 SKPNZ   
                INCFSZ   0FH,1       ;秒增量(逢2秒1次)
                GOTO     DZJC      
                GOTO     HSZCL       ;整分处理
DZJC            ANDLW    0FH       
                SKPZ    
                GOTO     XSCL        ;转显示处理
                BSF      0BH,0       ;0BH.0-1/8秒标志(启动/停止检测时用)
                MOVLW    0C0H      
                ANDWF    6,1         ;关(继电器)驱动脉冲
                MOVLW    0FH       
                TRIS     7         
                MOVFW    7           ;检查按键状态(0.125S-1次)
                ANDLW    0FH         ;F7,3--7,0依次是功能,时加,分加,分减键
                SKPZ    
                GOTO     HAJCL       ;转按键处理
XSCL            MOVF     0EH,1       ;F0EH-调节指针
                MOVLW    80H       
                SKPNZ   
                MOVLW    00H         ;在设定时间时,

秒停闪
                BTFSS    6,3       
                MOVLW    0FFH        ;消隐时,7段码口为高阻态
                TRIS     7         
                BTFSS    0BH,2       ;共阳/共阴选择
                GOTO     DXSCL       ;转共阴显示
                BTFSC    0BH,6     
                GOTO     HBZXS       ;转标志显示
HXSB            MOVFW    0AH         ;时间显示(95)
                MOVWF    7           ;输出10时码
                BSF      5,3         ;开10时线
                CLRW    
                BTFSC    0BH,0     
                MOVFW    6           ;每0.125秒`启动/停止'检测1次
                ANDLW    03H       
                MOVWF    8         
                BTFSC    8,0       
                BCF      8,1         ;消除启动/停止竞争
                MOVFW    0         
                CALL     HBCD        ;10
                BTFSC    1,6       
                IORLW    80H         ;准备`时'数据
                BCF      5,3         ;关10时

MOVWF    7         
                BTFSS    0BH,7     
                CLRF     8         
                BSF      5,2         ;显示时
                BTFSS    6,6       
                BCF      8,0         ;如已关,不再停止
                BTFSC    6,6       
                BCF      8,1         ;如已开,不再启动
                BTFSC    8,0       
                BCF      6,6         ;如停止,复位开电平
                DECF     4,1       
                SWAPF    0,0       
                CALL     HBCD        ;10
                BTFSC    1,6       
                IORLW    80H         ;准备10分显示数


                BCF      5,2         ;关扫描线
                MOVWF    7         
                BTFSC    8,1       
                BSF      6,6         ;如启动,置位开电平
                BSF      5,1         ;显示10分
                SWAPF    08H,1     
                MOVFW    6         
                ANDLW    0C0H      
                IORWF    08H,1     
                MOVFW    08H       
                MOVWF    6           ;启动/停止输出
                NOP     
                MOVFW    0         
                CALL     HBCD        ;10
                BTFSC    1,6       
                IORLW    80H         ;准备分显示数据
                BCF      5,1         ;关扫描线
                MOVWF    7         
                BSF      5,0         ;显示分
                NOP     
                NOP      

 NOP     
                NOP     
                NOP                
                INCF     4,1         ;恢复时指针
                SWAPF    0,0         ;准备10时7段码
                CALL     HBCD        ;10
                BTFSC    1,6       
                IORLW    80H       
                MOVWF    0AH         ;10时位7段显示码暂存于F0AH中
                CLRF     5         
                GOTO     HBEGIN      ;时间显示完,转程序结束
HBZXS           RRF      0EH,0       ;调节指针(F0EH)除以2(71)
                ANDLW    0FH       
                MOVWF    1FH       
                SKPNZ   
                MOVLW    0AH         ; J 7段码地址
                CALL     HBCD        ;(10)标志指示1(10分位)

          MOVWF    7           ;此时可能显示[J 1 2 3]
                BSF      5,1         ;开(10分位)显示
                MOVFW    6         
                ANDLW    03H       
                MOVWF    8           ;启动/停止数据暂存入F8中
                NOP     
                MOVLW    0DH         ; U 地址
                BTFSC    0EH,0     
                MOVLW    0EH         ; n 地址
                MOVF     1FH,1     
                SKPNZ   
                MOVLW    0FH         ; - 地址
                CALL     HBCD        ;10
                BCF      5,1         ;关10分位
                MOVWF    7         
                BSF      5,0         ;开分位,可能显示[- U n]
                BTFSS    0BH,0     
                CLRF     8           ;每0.125秒取1次启动/停止数据
                BTFSS    0BH,7     
                CLRF     8          

 BTFSC    8,0       
                BCF      8,1         ;免除启/停竞争(停止优先)
                BTFSC    6,6       
                BCF      8,1         ;如已开,则清启动位
                BTFSS    6,6       
                BCF      8,0         ;如已关,则清停止位
                SWAPF    8,1       
                BTFSC    8,5       
                BSF      6,6         ;如启动,置位开电平
                BTFSC    8,4       
                BCF      6,6         ;如停止,复位开电平
                MOVFW    6           ;控制输出
                ANDLW    0C0H      
                IORWF    08H,1      

 MOVFW    08H       
                MOVWF    6         
                CLRF     5           ;标志显示完
                GOTO     HBEGIN    
DXSCL           BTFSC    0BH,6     
                GOTO     DBZXS       ;转标志显示
DXSB            MOVFW    0AH         ;时间显示(84)
                MOVWF    7           ;输出10时码
                BCF      5,3         ;开10时线
                CLRW    
                BTFSC    0BH,0     
                MOVFW    6           ;每0.125秒`启动/停止'检测1次
                ANDLW    03H       
                MOVWF    8         
                BTFSC    8,0       
                BCF      8,1         ;消除启动/停止竞争
                MOVFW    0         
                CALL     DBCD        ;9
                XORLW    7FH       
                BTFSC    1,6       
                IORLW    80H         ;准备`时'数据
                BSF      5,3         ;关10时

 MOVWF    7         
                BTFSS    0BH,7     
                CLRF     8         
                BCF      5,2         ;显示时
                BTFSS    6,6       
                BCF      8,0         ;如已关,不再停止
                BTFSC    6,6       
                BCF      8,1         ;如已开,不再启动
                BTFSC    8,1       
                BSF      6,6         ;如启动,置位开电平
                DECF     4,1       
                SWAPF    0,0       
                CALL     DBCD        ;9
                XORLW    7FH       
                BTFSC    1,6       
                IORLW    80H         ;准备10分显示数据

 MOVWF    7         
                BTFSS    0BH,7     
                CLRF     8         
                BCF      5,2         ;显示时
                BTFSS    6,6       
                BCF      8,0         ;如已关,不再停止
                BTFSC    6,6       
                BCF      8,1         ;如已开,不再启动
                BTFSC    8,1       
                BSF      6,6         ;如启动,置位开电平
                DECF     4,1       
                SWAPF    0,0       
                CALL     DBCD        ;9
                XORLW    7FH       
                BTFSC    1,6       
                IORLW    80H         ;准备10分显示数据

 BTFSC    1,6       
                IORLW    80H       
                MOVWF    0AH         ;10时位7段显示码暂存于F0AH中
                MOVLW    0FH       
                MOVWF    5         
                GOTO     HBEGIN      ;时间显示完,转程序结束
DBZXS           RRF      0EH,0       ;调节指针(F0EH)除以2(66)
                ANDLW    0FH       
                MOVWF    1FH       
                SKPNZ   
                MOVLW    0AH         ; J 7段码地址
                CALL     DBCD        ;标志指示1(10分位)
                XORLW    7FH        

       MOVWF    7           ;此时可能显示[J 1 2 3]
                BCF      5,1         ;开(10分位)显示
                MOVFW    6         
                ANDLW    03H       
                MOVWF    8         
                MOVLW    0DH         ; U 地址
                BTFSC    0EH,0     
                MOVLW    0EH         ; n 地址
                MOVF     1FH,1     
                SKPNZ   
                MOVLW    0FH         ; - 地址
                CALL     HBCD        ;10
                XORLW    7FH       
                BSF      5,1         ;关10分位
                MOVWF    7         
                BCF      5,0         ;开分位,可能显示[- U n]
                BTFSC    0BH,0     
                CLRF     8           ;每0.125秒取1次启动/停止数据
                BTFSS    0BH,7     
                CLRF     8           ;启动/停止数据暂存入F8中
                BTFSC    8,0       
                BCF      8,1         ;免除启/停竞争

BTFSC    6,6       
                BCF      8,1         ;如已开,则清启动位
                BTFSS    6,6       
                BCF      8,0         ;如已关,则清停止位
                SWAPF    8,1       
                BTFSC    8,5       
                BSF      6,6         ;如启动,置位开电平
                BTFSC    8,4       
                BCF      6,6         ;如停止,复位开电平
                MOVFW    6         
                ANDLW    0C0H      
                IORWF    8,1         ;准备输出控制数据

XML 地图