国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

利用單個(gè)PIC輸入監(jiān)控15個(gè)觸點(diǎn)

發(fā)布時(shí)間:2015-1-26 14:52    發(fā)布者:designapp
關(guān)鍵詞: PIC微控制器 , LED顯示器 , 匯編

        作為一個(gè)簡(jiǎn)單實(shí)用的示例,圖1中的電路利用一個(gè)8位PIC微控制器控制一個(gè)4位LED顯示器,顯示出按下了哪個(gè)按鈕。當(dāng)任意按鈕被按下時(shí),比較器中斷程序會(huì)立即作出響應(yīng)。該程序會(huì)在VREF值之間進(jìn)行循環(huán),直至比較器輸出COUT返回高電平,表明該按鈕被按下。完整注釋的匯編程序源代碼總共不到100字。該代碼并未作過(guò)度優(yōu)化,從而可方便理解或易于轉(zhuǎn)化到其他控制器上。




匯編程序源代碼:
; MULTIBTN.ASM: sensing upto 15 pushbuttons with one I/O (pin6: GP1/CIN-)
; BENABADJI Noureddine - ORAN - Dec. 11...14th, 2013
;
        Errorlevel -302                ; avoid warning #302: Register in operand not in bank0.
                                                ; Ensure that bank bits are correct.
        List P = 12F683                      
#include "p12f683.inc"                        
        __CONFIG    _INTOSCIO&_MCLRE_OFF&_PWRTE_ON&_WDT_OFF&_FCMEN_OFF&_IESO_OFF&_BOD_ON&_CPD_OFF&_CP_OFF
#define         LED1        GPIO, 0        ; output bit0 of the 4-bit binary LED display
#define         LED2        GPIO, 2        ; output bit1 of the 4-bit binary LED display
#define         LED3        GPIO, 4        ; output bit2 of the 4-bit binary LED display
#define         LED4        GPIO, 5        ; output bit3 of the 4-bit binary LED display
;----------------------------- define variables ------------------------------
        CBLOCK        0x20        ; bank0 = [0x20...0x7F] = 94 bytes
;delay
        cnt1, cnt2, cnt3 ; counters
        ENDC
;------------------------------------------------------------------------------
BANK0        macro
        BCF        STATUS, RP0                 ; bank0
        endm
;------------------------------------------------------------------------------
BANK1        macro
        BSF        STATUS, RP0                 ; bank1
        endm
;------------------------------------------------------------------------------
SIregGEval8b        macro        file, val, jmpOk        ; if (file >= val) goto jmpOk ;
        MOVLW        val
        SUBWF        file, w                ; w = file - val
        BTFSC        STATUS, C
        GOTO        jmpOk                ; yes
        endm
;/////////////////////////////////////////////////////////////////////////////
;        MAIN PROGRAM
;/////////////////////////////////////////////////////////////////////////////
        ORG                0x00                        ; reset vector
        GOTO        Setup
        ORG                0X04                        ; interrupt vector
        GOTO        IntCmp
;/////////////////////////////////////////////////////////////////////////////
;-----------------------------------------------------------------------------
LEDsOFF
        CALL        Delay256ms
        CLRF        GPIO        ; all LEDs off
        RETLW        0
;-----------------------------------------------------------------------------
Delay256ms
        CLRF        cnt2
        CLRF        cnt1
        NOP                                ; 1us
        DECFSZ        cnt1, f        ; 1us
        GOTO        $-2                ; 2us => 4*256 = 1024 us, approx. 1 ms internal delay loop
        DECFSZ        cnt2, f        ; approx. 256 ms external delay loop
        GOTO        $-4
        RETLW        0
;/////////////////////////////////////////////////////////////////////////////
Setup
        BANK1
        CLRF        TRISIO                 ; config. all I/O as outputs
        BCF        OPTION_REG, T0CS ; use pin5 as GP2, not TOCKI
        CLRF        ANSEL                 ; use all AN as digital I/O
        BANK0
        CLRF        GPIO                ; all LEDs off
        MOVLW        b'00000111'
        MOVWF        CMCON0                 ;comparator off
splash ; (initial test for LEDs)
        BSF                LED1
        CALL        LEDsOFF
        BSF                LED2
        CALL        LEDsOFF
        BSF                LED3
        CALL        LEDsOFF
        BSF                LED4
        CALL        LEDsOFF
;;;;;;;;;;
initializeComparator
        BANK1
        MOVLW        b'00001010'         ;config. GP1 as input (will be CIN-)
        MOVWF        TRISIO
        ;BANK0
        MOVLW        b'10100001'
        ;BANK1
        MOVWF        VRCON                 ;Vref on, low range, VR=0001 => ratio = 1/24
        BANK0
        MOVLW        b'00000100'
        MOVWF        CMCON0                 ;comparator on: CIN- = GP1; CIN+ = Vref; Cout internal
;;;;;;;;;
       
;enable interrupt
        BANK1
        BSF        INTCON, PEIE         ; enable interrupt on Comparator trip
        BSF        PIE1, CMIE                 ; enable interrupt on Comparator trip
        BANK0
        BSF        INTCON, GIE                 ; set general interrupt enable
        goto $                                 ; infinite loop (waiting for an interrupt)
;-----------------------------------------------------------------------------
; Comparator trip interrupt routine
;-----------------------------------------------------------------------------
IntCmp
;don't need to save any context, only interrupting a goto $
        BANK0
        MOVLW        .1
        MOVWF        cnt3
nextBtn
        INCF        cnt3, F
        SIregGEval8b cnt3, .16, whichBtn ; if (cnt3 >= 16) goto whichBtn ;
        MOVLW        b'10100000'
        ADDWF        cnt3, W
        BANK1
        MOVWF        VRCON                 ;Vref on, low range, VR=cnt3
        BANK0
        BTFSS        CMCON0, COUT         ; Cout == 1 ?
        GOTO        nextBtn
whichBtn
        DECF        cnt3, F
        BTFSC        cnt3, 0
        BSF                LED1
        BTFSC        cnt3, 1
        BSF                LED2
        BTFSC        cnt3, 2
        BSF                LED3
        BTFSC        cnt3, 3
        BSF                LED4
        CALL        LEDsOFF
       
endIntCmp
        MOVLW        b'10100001'
        BANK1
        MOVWF        VRCON                 ;Vref on, low range, VR=0001 => ratio = 1/24
        BANK0
        BCF        PIR1, CMIF                 ; clear comparator interrupt flag
        RETFIE
;-----------------------------------------------------------------------------
        END



本文地址:http://m.qingdxww.cn/thread-145040-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
Zaxife 發(fā)表于 2015-1-27 09:27:20
你這樣的等比例電阻分壓,多個(gè)按鈕同時(shí)按下時(shí),會(huì)錯(cuò)誤的認(rèn)為是氣體按鈕按下的,沒(méi)啥意義。
電阻分組必須按1:2:4:8:16:32:64:128:256:1024:2048......這樣的2的N次方來(lái)分配才能確定是哪幾個(gè)按鍵按下了。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产麻豆精品一区二区 | 99在线小视频 | 中文字幕欧美在线观看 | 天降奇兵国语高清在线观看 | 日韩在线一区二区三区 | 婷婷丁香在线观看 | 国产精品一区二区在线观看完整版 | 91精品国产高清91久久久久久 | 欧美精品一二三区 | 日韩一区二区中文字幕 | 91亚洲精品福利在线播放 | 成人欧美一区二区三区白人 | 一级特黄aaaaaa大片 | 美女被猛男躁免费视频网站 | 九九99久久精品影视 | 美女视频黄频a免费大全 视频 | 亚洲欧美日韩高清专区一区 | www亚洲视频| 亚洲高清免费观看 | 欧美综合视频在线 | 欧美曰韩一区二区三区 | 精品国产一区二区三区久 | 亚洲国产精品一区二区三区久久 | 成年网站在线观看 | 亚洲污视频| 日本一区二区三区在线观看 | 亚洲国产成人精品女人久久久 | 青青在线视频观看 | 女老师韩剧 | 亚洲国产精品久久婷婷 | 免费人成在线观看网站品爱网日本 | 成人国产激情福利久久精品 | 91中文视频| 五月婷婷婷 | 久久综合色综合 | 特黄特级毛片免费视 | 羞羞午夜爽爽爽爱爱爱爱 | 欧美在线一区二区三区精品 | 亚洲网色 | 99久久精品免费看国产四区 | 天天摸日日舔 |