当前位置:首页 > 单片机 > 单片机
[导读] ;动态数码时钟显示实验参考程序;使用资源:;1,TMRO定时器。确定显示的位,及显示延时。;2,TMR1定时器。秒信号产生。;3,PORTA端口。六共阳极位数码管的位选信号,低电平有效;4,PORTC端口。数码管的七

;动态数码时钟显示实验参考程序


;使用资源:

;1,TMRO定时器。确定显示的位,及显示延时。

;2,TMR1定时器。秒信号产生。

;3,PORTA端口。六共阳极位数码管的位选信号,低电平有效

;4,PORTC端口。数码管的七段,RC7不用。


;功能说明:

;1.六位数码管动态扫描显示时间(格式为:HHMMSS,24小时制)。

;2.时钟信号由单片机内部定时器硬件单元编程产生。


;本实战的目的是让大家进一步熟悉定时器的编程,多位数码管动态扫描显示的编程。


;硬件接法:

;1.实验板上拨码开关S4、S5的所有位必须置ON,其他都可以关闭。

;2.最好把93C46跟24CXX存储器从板上取下。


;本实例原提供者:pic16论坛会员 leef728 ,在此鸣谢leef728同志共享本实例.

;由深圳市乾龙盛电子科技有限公司技术部钟闺田(工程师)(论坛网名:zhongruntian)验正并加于整理、注释.

;网站:PIC单片机学习网 http://www.pic16.com 讨论论坛:http://pic16.com/bbs/

;版权所有,转载请注明出处,并不能去掉或改变文件中的说明文字。

;程序文件名“TIME.ASM"

;程序清单如下:

;************************************

LIST P=16F877A

INCLUDE"P16F877A.INC"

ERRORLEVEL -302

;***********************************

__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC;

;***************文件寄存器定义**************

CBLOCK 0X20

WAW

YIW

BAW

QIW

GEW

SHW

TEMP

COUNTER

S3

DAA

STATUS_TMP

W_TMP

ENDC

;********************程序开始****************

ORG 0000H

NOP ;复位地址

GOTO MAIN

ORG 0004H


;********************中断处理程序***********

MOVWF W_TMP

SWAPF STATUS,W

CLRF STATUS

MOVWF STATUS_TMP ;以上4条指令为中断现场保护

BCF INTCON,2 ;清除TMRO中断标志位

MOVF TEMP,W ;时间存放单元的地址

MOVWF FSR

MOVF INDF,W ;取得某一位的时间值

CALL BMA ;查表得时间的显示代码

MOVWF PORTC ;送数码管显示

COMF DAA,W ;位码取反

MOVWF PORTA ;点亮相应的数码管

RLF DAA,F ;准备点亮下一位

INCF TEMP,F ;下一时间存放单元地址

BTFSS DAA,6 ;是否显示完六位

GOTO RT

MOVLW 01H ;是,重新开始新一轮显示

MOVWF DAA

MOVLW 20H ;重新获取时间单元的地址

MOVWF TEMP

RT

SWAPF STATUS_TMP,W ;中断现场恢复

MOVWF STATUS

SWAPF W_TMP,F

SWAPF W_TMP,W

MOVLW 0XE0 ;赋定时器初值

MOVWF TMR0

RETFIE

;*******************主程序开始****************

MAIN

BANKSEL TRISA ;选择体1

MOVLW 00H

MOVWF TRISA ;PORTA设置为输出

MOVWF TRISC ;PORTC设置为输出

MOVLW 06H

MOVWF ADCON1 ;设置A口为普通数字口

BANKSEL INTCON

MOVLW 00H

MOVWF YIW

MOVWF WAW

MOVWF QIW

MOVWF BAW

MOVWF SHW

MOVWF GEW ;以上7条指令清零时间

MOVWF DAA

MOVLW 20H

MOVWF TEMP ;时间存放单元地址


BSF STATUS,RP0

MOVLW 0X05

MOVWF OPTION_REG ;分频器给TMR0做定时用,且分频比1:4

BCF STATUS,RP0

BSF INTCON,7 ;开启中断总允许位GIE

BSF INTCON,5 ;开启TMRO中断允许位

BCF INTCON,2 ;清除TMRO中断标志位

MOVLW 0XE0 ;TMRO赋初值

MOVWF TMR0


CLRF DAA

INCF DAA,F ;显示位设置

;**************************************************************

KS

CALL DELAY ;调用200ms定时程序

CALL DELAY

CALL DELAY

CALL DELAY

CALL DELAY ;调用5次,刚好1s

INCF GEW,F

MOVF GEW,W ;判断秒的个位是否够10

XORLW .10

BTFSS STATUS,Z

GOTO KS ;是,秒的个位清0,秒的十位加1

INCF SHW,F

CLRF GEW

CLRF STATUS

MOVF SHW,W

XORLW .6 ;判断秒的十位是否为6(1分钟60秒)

BTFSS STATUS,Z

GOTO KS

INCF BAW,F ;是,秒的十位清0,分的个位加1

CLRF SHW

CLRF STATUS

MOVF BAW,W

XORLW .10 ;判断分的各位是否够10

BTFSS STATUS,Z

GOTO KS

INCF QIW,F ;是,分的个位清0,分的十位加1

CLRF BAW

CLRF STATUS

MOVF QIW,W

XORLW .6

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭