网站导航免费论文 原创论文 论文搜索 作业答案 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 设计资源 > 单片机 > 正文
实战九《ST套件两位数码动态显示实验》
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: Admin 发布时间: 10/06/19
;本例说明动态显示二位数码管的方法,其实动态显示数码管是利用人眼的暂留效应,即
;轮流让需显示的多个数码管分别各显示一段时间,有的朋友可能会问:这样不是可以看到
;数码管在闪烁?不,只要你的扫描速度够快,人眼是看不到闪烁的,也不是非常快基本上小于
;10MS就可以了,
;程序中使用一个寄存器(DIGIT)作计数器,然后将计数结果输出显示。
;因为数码管只能显示0-9的十进制输出,所以计数器DIGIT需转换成十进制再输出,程序中将
;涉及到将十六进制转成十进制BCD码的方法。二进制调整为BCD码的方法是将二进制码左移8次
;每次移位后都检查低四位LSD+3是否大于7,如果是则再加3,否则不加。接着再将高四位MSD作相同处理
;本程序的功能是:程序复位后,数码管从0开始显示数字,直到99,然而又从0到99循环显示
 ;烧写时应注意:配置位已经在程序中写明,加载HEX文件时会自动加载,烧写时不用再手动设置配置位。
;实验时请注意套件跳线选择
;***********************************************************
 LIST P=16F84A,R=DEC     ;定义器件为16F84,默认数制为十进制
;-----------------------------------------------------------
  __CONFIG B'11111111110001';_CP_OFF&_WDT_OFF&_PWRITE_ON&_XT_OSC 
                                              ;没有代码保护
                                              ;看门狗关闭
                                              ;上电廷时器开启
                                              ;振荡器模式为XT
;---------------------
PC     EQU 02H           ;变量单元定义
STATUS EQU 03H
PORTA EQU 05H
PORTB EQU 06H
TRISA EQU 5H
TRISB EQU 6H
;-----------------------STATUS
RP0    EQU 5
;---------------------
COUNTER EQU 10H
COUNT1  EQU 11H
COUNT2  EQU 12H
TABADD  EQU 13H
DISPBUF EQU 14H           ;显示值暂存
DISPBUF_H EQU 15H         ;显示器高位
DISPBUF_L EQU 16H         ;显示器低位
BUFFER    EQU 17H
BUFFER1   EQU 18H
SUM       EQU 19H
DIGIT     EQU 1AH         ;0-99计数器
;--------------------
               ORG 0000H
MAIN
               CLRF        PORTA
               CLRF        PORTB   ;初始化IO口
     
               BSF         STATUS,RP0 ;设置寄存器体1
               MOVLW       00000000B  ;将所有IO口设置为输出
               MOVWF       TRISA 
               MOVWF       TRISB  
               BCF         STATUS,RP0  ;恢复寄存器体0
   
                MOVLW       0FFH       ;先让数码管全部不显示
                MOVWF       PORTB
	  	        CLRF	   	DIGIT      ;显示计数器清0
                CLRF        DISPBUF    ;清显示值
LOOP1	  	  
                MOVLW       22
                MOVWF       COUNTER    ;计数器0.2秒钟加1   22*9.2MS=0.2s
LOOP1_1
                CALL        DISP       ;调用显示子程序
                DECFSZ      COUNTER,1   ;显示0.2秒钟
                GOTO        LOOP1_1
	  	INCF	   	DIGIT,1       ;计数器加1
	  	MOVLW    	8
	  	MOVWF    	COUNTER      	;循环左移计数器置8
	  	CLRF	   	BUFFER          ;清除缓冲器
	  	MOVF	   	DIGIT,W   
	  	MOVWF    	BUFFER1         
LOOP2	  	
                RLF	        BUFFER1,1         ;二进制数转换成BCD码(以便显示)
	  	RLF	  	BUFFER,1
	  	DECFSZ   	COUNTER,1          ;左移8次
	  	GOTO	   	ADJUST             ;
	  	MOVFW	   	BUFFER
	  	MOVWF    	DISPBUF         ;是否有进位(即已达100),如已计数到100则
	  	SKPC                    	;从0开始再计数显示(显示00~99)
	  	GOTO	   	LOOP1
	  	GOTO	   	MAIN
ADJUST	  	
                MOVLW    	3               ;二进制转BCD的调整
	  	ADDWF    	BUFFER,W    	;每次移位后都检查低四位LSD+3是否大于7
	  	MOVWF    	SUM             
	  	BTFSC    	SUM,3
	  	MOVWF    	BUFFER
	  	MOVLW    	30H
	  	ADDWF    	BUFFER,W        ;如果是则再加3,否则不加。
	  	MOVWF    	SUM
	  	BTFSC    	SUM,7
	  	MOVWF    	BUFFER          ;接着再将高四位MSD作相同处理
	  	GOTO	   	LOOP2
;- -----------------------------------------
DELAY	  		                             ;显示廷时常数,廷时时间为3*255*6+6us+4us=4.6ms
                MOVLW    	6
	  	MOVWF    	COUNT1
L2	  	
        	MOVLW    	255
	  	MOVWF    	COUNT2
L3	  		
                DECFSZ   	COUNT2,1        
	        GOTO	   	L3
	  	DECFSZ   	COUNT1,1
	  	GO	

	
			

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
湘ICP备09003080号