英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 4471|回复: 0
打印 上一主题 下一主题

按S3键递显示0---9的数码管程序转

[复制链接]
跳转到指定楼层
1#
发表于 2012-8-21 16:19:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按S3键递显示0---9的数码管程序

;-----------------------------------------------------------------------------
;该程序的功能是把演示板当做一个按键计数器。接通电源时,按下IDE软软件的运行键6只数码管

;全显示000000。
;每按下开关S3(RB0)时,计数器的值加1,数码管显示也增加1,然后松开按钮;以些类推,反复循环。

;-----------------------------------------------------------------------------
;DEMO实验板作以下设置 s1拔到0FF,S13除开拔码开关1为ON,其余的全拔到OFF
;S4,S5拔到ON LCD不要插在演示板上

;-----------------------------------------------------------------------------
;程序清单:
;**************************************************
__CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭
;*************************************************
PCL equ 2h ;定义寄存器PCL的地址为02H
status equ 3h ;定义状态寄存器地址
porta equ 5h ;定义端口A的数据寄存器地址
portb equ 6h ;定义端口B的数据寄存器地址
portc equ 7h ;定义端口C的数据寄存器地址
trisa equ 85h ;定义端口A的方向控制寄存器地址
trisb equ 86h ;定义端口B的方向控制寄存器地址
trisc equ 87h ;定义端口C的方向控制寄存器地址
;**************************************************
data1 equ 20h ;定义一个廷时变量寄存器
data2 equ 21h ;定义另一个廷时变量寄存器
n1 equ d'13' ;定义一个外层循环廷时常数
n2 equ 0ffh ;定义一个内层廷时常数
rp0 equ 5 ;定义状态寄存器的页选位RP0
z equ 2 ;定义0标志位位地址
;********************************************** ***
wang equ 22h ;定义显示寄存器的地址
yan equ 23h ;定义计数寄存器的地址
;*************************************************
org 000h ;定义程序存放区域的起始地址
nop ;放置一条ICD必须的空操作指令
goto main
main bsf status,rp0 ;设置文件寄存器体1
movlw 00h ;将端口C的方向控制码00H先送W
movwf trisa ;再转到方向寄存器,将其设置为输出
movwf trisc ;设置C口为输出
movlw 0ffh ;同理,将端口B设置为输入
movwf trisb
bcf status,rp0 ;恢复到文件寄存器体0
clrf porta ;使PORTA输出为低电平,让所有数码管共阳极都为高电平
loop1 movlw .10
movwf yan ;设置循环值10
movlw 00h
movwf wang ;送初值00H到wang显示寄存器
loop2
movf wang,0
subwf yan,0 ;判断是否到了显示数值“9”
btfsc status,z ;全亮则返回loop1重新给yan,wang赋值为0
goto loop1
movf wang,0 ;否则继续调用显示程序
call CHABIAO ;调用数码段显示程序
movwf portc
;-----------------------------------------------------------------------------
;测试按键与否,以及如按下键则寄存器wang的数据加1
;-----------------------------------------------------------------------------
check btfsc portb,0 ;测试S3按下否?是!跳过下条指令
goto check ;否!则循环检测
call delay ;调用廷时子程序,消除按钮抖动的影响
btfsc portb,0 ;再次测试S3按下否?是!跳过下条指令
goto check ;否!则循不检测
incf wang,1 ;寄存器wang的数据寄存器加1
check1 btfss portb,0 ;测试S3断开否?是!跳过下条指令
goto check1 ;否!则循不检测
call delay ;调用廷时子程序,消除按钮抖动的影响
btfss portb,0 ;再次测试S3断开否?是!跳过下条指令
goto check1 ;否!则循不检测
goto loop2 ;返回
;*************10MS廷时子程序************************
delay ;子程序名,也是子程序入口地址
movlw n1 ;将外层循环参数值送到DATA1
movwf data1
lp0 movlw n2 ;将内层循环参数值送到DATA2
movwf data2
lp1 decfsz data2,1 ;变量DATA2内容递减,若为0则跳跃
goto lp1 ;跳转到LP1
decfsz data1,1 ;变量DATA1内容递减,若为0则跳跃
goto lp0 ;跳转到LP0
return ;返回主程序

;***********共阳数码管查表子程序***************
CHABIAO ;取数码管段码
ADDWF PCL,1 ;地址偏移量加当前PC
RETLW 0C0H ;0
RETLW 0F9H ;1
RETLW 0A4H ;2
RETLW 0B0H ;3
RETLW 99H ;4
RETLW 92H ;5
RETLW 82H ;6
RETLW 0F8H ;7
RETLW 80H ;8
RETLW 98H ;9
;-----------------------------------------------------------------------------
END ;源程序结束
;-----------------------------------------------------------------------------
;***********共阳数码管查表子程序***************
CHABIAO ;取数码管段码
ADDWF PCL,1 ;地址偏移量加当前PC
RETLW 0C0H ;0
RETLW 0F9H ;1
RETLW 0A4H ;2
RETLW 99H ;4
RETLW 0B0H ;3
RETLW 92H ;5
RETLW 82H ;6
RETLW 0F8H ;7
RETLW 80H ;8
RETLW 98H ;9

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-5-1 00:01 , Processed in 0.053265 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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