人狗畜禽COMPANY LIMITED|全是肉的高H文〈男男〉|全篇肉高H秘书被C办公室四爱|全黄H全肉共妻|全黄H全肉短篇禁乱NP慕浅浅|全黄H全肉短篇N男男

技術熱線: 4007-888-234
設計開發(fā)

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應用測試 完善的開發(fā)代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創(chuàng)造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產品競爭力

新聞中心

提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

實戰(zhàn)十三:按鍵觸發(fā)的1位累加器

更新時間: 2019-03-25
閱讀量:953

按鍵觸發(fā)的1位累加器
;按鍵S3觸發(fā)累加計數(shù)顯示0---9的數(shù)碼管程序
;使用資源
 ;1、PORTA口,做為6位數(shù)碼管的位選信號
 ;2、PORTB口,在此只利用了RBO口做按鍵輸入
 ;3、PORTC口,7段數(shù)碼管的段信號
;功能說明
;1、該程序的功能是把演示板當做一個按鍵計數(shù)器。接通電源時,按下IDE軟軟件的運行鍵6只數(shù)碼管全顯示000000。
;每按下開關S3(RB0)時,計數(shù)器的值加1,數(shù)碼管顯示也增加1,然后松開按鈕;以些類推,反復循環(huán)。
;2、程序中包含按鍵按下檢測跟釋放檢測,并且都伴有一定的延時去抖功能,只有在一次按鍵被釋放后才進行第2次按鍵的判斷
;3、程序中需開啟B口的內部弱上拉功能,因DEMO板上無上拉電阻;并把A口全部設置為普通I/O口,上電復位后A口為模擬輸入口。

;硬件連接
;1、DEMO實驗板作以下設置  s1拔到0FF,S13除拔碼開關1為ON外其余的全拔到OFF
;2、S4,S5全部拔到ON    LCD不要插在演示板上
;程序文件名“count.ASM"

;程序清單如下:
;**************************************************
  __CONFIG 3F39H;設置配置位中振蕩方式為XT,其它全部禁止或關閉
;*************************************************
PCL       equ     2h     ;定義寄存器PCL的地址為02H
status    equ     3h     ;定義狀態(tài)寄存器地址
porta     equ     5h     ;定義端口A的數(shù)據(jù)寄存器地址
portb     equ     6h     ;定義端口B的數(shù)據(jù)寄存器地址
portc     equ     7h     ;定義端口C的數(shù)據(jù)寄存器地址
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'  ;定義一個外層循環(huán)廷時常數(shù)
n2        equ     0ffh   ;定義一個內層廷時常數(shù)
rp0       equ     5      ;定義狀態(tài)寄存器的頁選位RP0
z         equ     2      ;定義0標志位位地址
;********************************************** ***
wang      equ     22h        ;定義顯示寄存器的地址
yan       equ     23h        ;定義計數(shù)寄存器的地址
;*************************************************
          org    000h        ;定義程序存放區(qū)域的起始地址
          nop                ;放置一條ICD必須的空操作指令
          goto   main
main      bsf    status,rp0  ;設置文件寄存器體1
          movlw  00h         ;將端口C的方向控制碼00H先送W
          movwf  trisa       ;再轉到方向寄存器,將其設置為輸出
          movwf  trisc       ;設置C口為輸出
          movlw  0ffh        ;同理,將端口B設置為輸入
          movwf  trisb    
          clrf   option_reg  ;開起內部弱上拉
          movlw  06h
          movwf  adcon1      ;設置A口為普通的數(shù)字口
          bcf    status,rp0  ;恢復到文件寄存器體0
          clrf   porta       ;使PORTA輸出為低電平,讓所有數(shù)碼管共陽極都為高電平
loop1     movlw  .10
          movwf  yan         ;設置循環(huán)值10
          movlw  00h      
          movwf  wang        ;送初值00H到wang顯示寄存器
loop2     
          movf   wang,0
          subwf  yan,0       ;判斷是否到了顯示數(shù)值“9”
          btfsc  status,z     ;全亮則返回loop1重新給yan,wang賦值為0
          goto   loop1
          movf   wang,0      ;否則繼續(xù)調用顯示程序
          call   CHABIAO     ;調用數(shù)碼段顯示程序
          movwf  portc
         
;-----------------------------------------------------------------------------
;測試按鍵與否,以及如按下鍵則寄存器wang的數(shù)據(jù)加1
;-----------------------------------------------------------------------------
check     btfsc  portb,0     ;測試S3按下否?是!跳過下條指令
          goto   check       ;否!則循環(huán)檢測
          call   delay       ;調用廷時子程序,消除按鈕抖動的影響
          btfsc  portb,0     ;再次測試S3按下否?是!跳過下條指令
          goto   check       ;否!則循不檢測
          incf   wang,1      ;寄存器wang的數(shù)據(jù)寄存器加1
         
check1    btfss  portb,0    ;測試S3斷開否?是!跳過下條指令
          goto   check1     ;否!則循不檢測
          call   delay      ;調用廷時子程序,消除按鈕抖動的影響
          btfss  portb,0    ;再次測試S3斷開否?是!跳過下條指令
          goto   check1     ;否!則循不檢測
          goto   loop2      ;返回
;*************10MS廷時子程序************************
delay                       ;子程序名,也是子程序入口地址
          movlw n1          ;將外層循環(huán)參數(shù)值送到DATA1
          movwf data1     
lp0       movlw n2          ;將內層循環(huán)參數(shù)值送到DATA2
          movwf data2    
lp1       decfsz data2,1    ;變量DATA2內容遞減,若為0則跳躍
          goto lp1          ;跳轉到LP1
          decfsz data1,1    ;變量DATA1內容遞減,若為0則跳躍
          goto lp0          ;跳轉到LP0
          return            ;返回主程序
;***********共陽數(shù)碼管查表子程序***************           
CHABIAO                     ;取數(shù)碼管段碼
            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             ;源程序結束
;-----------------------------------------------------------------------------

;    進入該實戰(zhàn)演練的工序流程如下:
;    1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本”
;   這個為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點需要注意,一是注釋前面的
;   分號”;”必須用西文半角輸入;二是必須用”.asm”擴展名存儲到事先建立的一個專用子目錄下.
;    2.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動MPLAB
;   并進入MPLAB的桌面.
;    3.創(chuàng)建項目:選用菜單File>New或Project>New Project,在事先建立的一個專用子目錄下創(chuàng)建一個新項目,將
;   用記事本創(chuàng)建的源文件加入到該項目中.
;    4.建立項目中的目標文件:選擇菜單Project >Build All(項目>建立所有文件),MPLAB將自動調用MPASM將項目
;   文件管理下的源文件(.asm)匯編成十六進制的目標文件(.hex).


屏南县| 乐清市| 建瓯市| 台北市| 兴宁市| 同心县| 四子王旗| 兴和县| 上杭县| 青州市| 介休市| 开化县| 鸡东县| 阿拉善盟| 渭源县| 泸定县| 余干县| 句容市| 土默特左旗| 镇沅| 姜堰市| 日土县| 临颍县| 乾安县| 大荔县| 鹤山市| 麻江县| 和平区| 萨嘎县| 清丰县| 中宁县| 孝感市| 屯留县| 阳山县| 丰台区| 阳曲县| 东港市| 徐闻县| 塘沽区| 双江| 吐鲁番市|