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

发布者:CuriousTraveler最新更新时间:2017-12-07 来源: eefocus关键字:PIC16F877A  动态数码  时钟显示 手机看文章 扫描二维码
随时随地手机看文章

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


;使用资源:

;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                                     ;判断分的十位是否够6(1小时60分)

   BTFSS STATUS,Z

   GOTO KS

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

   CLRF QIW

   CLRF STATUS

   MOVF WAW,W

   XORLW .4                                     ;判断时的个位是否够4(24小时制)

   BTFSS STATUS,Z

   GOTO KS

   INCF YIW,F                                   ;是,时的个位清0,时的十位加1

   CLRF WAW

   CLRF STATUS

   MOVF YIW,W

   XORLW .2                                     ;判断时的十位是否够2

   BTFSS STATUS,Z

   GOTO KS

   

   CLRF GEW                                     ;是,使时间回到00-00-00

   CLRF SHW

   CLRF BAW

   CLRF QIW

   CLRF WAW

   CLRF YIW

   GOTO KS                                      ;循环显示

;**************************200ms延时程序********************

DELAY  

   NOP

   BANKSEL PIE1

   BCF  PIE1,0                                  ;禁止TMR1中断

   BANKSEL T1CON

   MOVLW 24H                                    ;TMR1分频1:4

   MOVWF T1CON

   BCF  PIR1,0

   MOVLW 0X3C

   MOVWF TMR1H

   MOVLW 0XB0

   MOVWF TMR1L                                  ;TMR1赋初值0X3CB0

   BSF  T1CON,0 

LOP 

   BTFSS PIR1,0                                 ;查询是否定时时间到

   GOTO LOP

   RETURN

  

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

BMA 

   ADDWF PCL,F                                 ;考察偏移量      

   RETLW 0XC0                                  ;"0" 编码

   RETLW 0XF9                                  ;"1" 编码

   RETLW 0XA4                                  ;"2" 编码

   RETLW 0XB0                                  ;"3" 编码

   RETLW 0X99                                  ;"4" 编码

   RETLW 0X92                                  ;"5" 编码

   RETLW 0X82                                  ;"6" 编码

   RETLW 0XF8                                  ;"7" 编码

   RETLW 0X80                                  ;"8" 编码

   RETLW 0X98                                  ;"9" 编码

   RETLW 0XFF


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

  END                                          ;源程序结束

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

;    进入该实战演练的工序流程如下:

;    1.创建源文件和编辑源文件;在此介绍一种不同于前面讲的创建源文件的方法,用Windows附件中的”记事本”

;   这个为大家所熟知和好用的文件编辑器,并且可以方便的加入中文注释.不过有两点需要注意,一是注释前面的

;   分号”;”必须用西文半角输入;二是必须用”.asm”扩展名存储到事先建立的一个专用子目录下.

;    2.打开MPLAB集成开发环境:首先在WINDOWS环境下,选用开始>程序>Microchip MPLAB>MPLAB命令,启动MPLAB

;   并进入MPLAB的桌面.

;    3.创建项目:选用菜单File>New或Project>New Project,在事先建立的一个专用子目录下创建一个新项目,将

;   用记事本创建的源文件加入到该项目中.

;    4.建立项目中的目标文件:选择菜单Project >Build All(项目>建立所有文件),MPLAB将自动调用MPASM将项目

;   文件管理下的源文件(.asm)汇编成十六进制的目标文件(.hex).


关键字:PIC16F877A  动态数码  时钟显示 引用地址:PIC16F877A动态数码时钟显示实验参考程序

上一篇:PIC16F73单片机构成的环境温湿度实时测控装置设计
下一篇:基于16F877A和DS18B20的测温程序

推荐阅读最新更新时间:2024-03-16 15:49

STM32+LCD12864汉字显示与定位 时钟,闹钟Proteus仿真程序
师傅所教知识制作了一个LCD12864的屏幕显示,字模自己软件下载的,俺们新手,写的粗糙 期末项目为时钟的显示和设定,内含闹钟 PU原理图 按键:PA0:暂停时钟 在暂停时钟后再按一次PA0则开始选择改变分钟(反白),继续按下PA0开始设置时钟的改变(反白) PA1与PA2连用检测按键:数字的增加 PB0:数据的减少 PB1与PB2连用检测按键:确认改变 仿真原理图如下 另外,我现在另添加的闹钟的设置,可在运行程序后设置闹钟,闹钟的设定没上传,原理类似 缺点: 1. 日期判定没有做完,只是进行了简单的判断,没有大月小月的判断,闰年这类的 2. 时钟的修改的增加判断23的时候没用反白和清屏 修改
[单片机]
STM32+LCD12864汉字<font color='red'>显示</font>与定位 <font color='red'>时钟</font>,闹钟Proteus仿真程序
如何实现DS1302实时时钟显示在1602LCD液晶
在1602LCD液晶里显示实时时间: 首先在DS1302实时时钟芯片里写入一个时间, 然后在这个芯片里读取这个时间,并显示在液晶里。现在终于实现了... #include reg52.h #include intrins.h sbit SCLK=P3^6; sbit SDA=P3^4; sbit RST = P3^5; //unsigned char code Write_Address ={0x80,0x82,0x84}; unsigned char code Read_Address ={0x85,0x83,0x81}; unsigned char Time_Table ; void
[单片机]
带串口、定时闹钟、时钟计时器的显示屏设计(万年历)
0.引言 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。 本设计是数据采集及处理,显示系统与单片机有效结合,本设计是通过在“单片机原理及应用”课堂上学习的知识的综合应用,以及查阅资料,培养一种自学的能力。并且引导一种创新的思维,把学到的知识应用到日常生活当中。在设计的过程中,不断的学习,思考和同学间的相互讨论,运用科学的分析问题的方法解决遇到的困难,掌握单片机系统一般的开发流程,学会对常见问题的处理方法,积累设计系统的经验,充分发挥教学与实践的结合。全能提高个人
[单片机]
带串口、定时闹钟、<font color='red'>时钟</font>计时器的<font color='red'>显示</font>屏设计(万年历)
基于PIC16F877A数码显示
//数码管显示 //★★★★★★★★★数码管显示★★★★★★★★★★★\\ //单征机型号:PIC16F877A //功能描述:采用动态扫描方式,初始时显示123,当按下RB0时,数值加一,当按下RB1时,数值减一 //端口定义:RA0,RA1,RA2数码管位控制脚,RD口数码管段控制口,RB0加一按键,RB1减一按键。 #include pic.h __CONFIG(0XF73A); //芯片配置字节 const unsigned char disp ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0~9译码 char ba,sh,ge,keyb0,ke
[单片机]
PIC16F877A 模数转换Demo
#include htc.h #include stdio.h __CONFIG(0xFF32); #define u8 unsigned char #define u16 unsigned int void delayus() { int i; for(i=200;i--;); } /********延时程序********/ void Delay_ms(u16 xms) { int i,j; for(i=0;i xms;i++) { for(j=0;j 71;j++) ; } } void port_init(void) { PORTA=0xFF; TRISA=0x01; //RA0输
[单片机]
数码显示动态数字
以下代码在8个数码管上同时依次显示从0~F,利用i,j,m三个变量来实现显示的控制。 #include reg52.h sbit LATCH1=P2^2; sbit LATCH2=P2^3; unsigned char code DuanMa ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~F unsigned char code WeiMa ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 void Delay(uns
[单片机]
51单片机--8 位数码动态显示 12 位数字
51单片机,要求用 8 位数码管动态显示 12 位学号。 还要用按键调整走动速度,C语言的。 //------------------------------------------- #include reg52.h #include intrins.h sbit k_add = P3^1; sbit k_sub = P3^4; //------------------------------------------- unsigned char code SEG7 = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0xff}; unsigned ch
[单片机]
51单片机--8 位<font color='red'>数码</font>管<font color='red'>动态</font><font color='red'>显示</font> 12 位数字
用定时器中断设计时钟,用1602液晶显示
本时钟有些功能还未完全实现,仅实现一部分功能,年月日星期功能还未实现 还可以加上整点报时和断电记忆的功能 #include reg52.h #define uchar unsigned char sbit rd=P2^6; sbit wr=P2^5; sbit lcde=P2^7; sbit k1=P1^0; sbit k2=P1^1; sbit k4=P1^3; sbit k8=P1^7; uchar code table1 = 2011-10-01 SAT ; uchar code table2 = 00:00:00 ; uchar t,s1num; char shi,fen,miao; voi
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved