;按键S3触发累加计数显示0---9的数码管程序
;使用资源
;1、PORTA口,做为6位数码管的位选信号
;2、PORTB口,在此只利用了RBO口做按键输入
;3、PORTC口,7段数码管的段信号
;功能说明
;1、该程序的功能是把演示板当做一个按键计数器。接通电源时,按下IDE软软件的运行键6只数码管全显示000000。
;每按下开关S3(RB0)时,计数器的值加1,数码管显示也增加1,然后松开按钮;以些类推,反复循环。
;2、程序中包含按键按下检测跟释放检测,并且都伴有一定的延时去抖功能,只有在一次按键被释放后才进行第2次按键的判断
;3、程序中需开启B口的内部弱上拉功能,因DEMO板上无上拉电阻;并把A口全部设置为普通I/O口,上电复位后A口为模拟输入口。
;硬件连接
;1、DEMO实验板作以下设置 s1拔到0FF,S13除拔码开关1为ON外其余的全拔到OFF
;2、S4,S5全部拔到ON LCD不要插在演示板上
;本实例原提供者:pic16论坛会员:雨寒风 ,在此鸣谢雨寒风同志共享本实例.
;由深圳市乾龙盛电子科技有限公司技术部钟闺田(工程师)(论坛网名:zhongruntian)验正并加于整理、注释.
;版权所有,转载请注明出处,并不能去掉或改变文件中的说明文字。
;程序文件名“count.ASM"
;程序清单如下:
;**************************************************
__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的方向控制寄存器地址
option_reg equ 81h
adcon1 equ 9fh ;ADC控制寄存器1
;**************************************************
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 &nbs