PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
COBRA2005
Advance Member
 
COBRA2005的大頭照
 

加入日期: Aug 2001
您的住址: 台北縣
文章: 405
PIC 16f877 如何才能讓"蜂鳴器"叫~

PIC 16f877 驅動碼達,與按鍵!如何才能讓"蜂鳴器"叫~
1:原型是按4x4按鍵三位數,讓馬達轉所輸入的數字,超過255,轉255(最高速)

2:現在想加一個功能就是,當輸入的數字超過180以上,蜂鳴器叫40ms,低於180不叫!

3:蜂鳴器接在RA5/AN4

主程式
;
; 8 BITS A/D(VR) + LCD + PWM
;
LIST P=16F877, R=DEC
#INCLUDE P16F877.INC
CBLOCK 0X20
ENDC
;
; DEFINE RAM
;
CBLOCK
BCDBFH, BCDBFL,KYBUF
SPEED,TEMP,KEY_C

ENDC
;
alarm_seg equ TRISA
alarm_port equ PORTA
alarm_bit equ 5
;
ORG 0
NOP
GOTO MAIN
;
;

;---------------------------------------------------------------;
;
#INCLUDE <LCD.INC> ;
;
; Defines for I/O ports that provide LCD data & control ;
;
LCD_DATA equ PORTB ;
LCD_CNTL equ PORTB ;
;
RS equ 5 ; RS=PORTB,5 ;
E equ 4 ;
;
;===============================================================;
;
#INCLUDE <HX2BCD.INC>
#include <DLY2_5mS.INC>
;
;.................................
;---------------------------------------------------------------;
;
#INCLUDE <key4X4.asm> ;
PORT4X4 EQU PORTD ; keyboard is connected with portd ;
TRIS4X4 EQU TRISD ; set direction of port ;
;
;---------------------------------------------------------------;

;

MAIN:
call InitLCD
call clrLCD
;
;************************************************
;* - Initialize the A/D converter *
;* - Left justified *
;* - 1 analog channels, 0 references *
;* - Fosc/8 clock source *
;* - Channel 0 *
;* - Enable A/D *
;************************************************
;
; BANKSEL ADCON1 ; ADCON1 is in bank1
; MOVLW B'10000010' ; select left(0) justified (d7)
; 1 ch(AN0)/0 refs
; MOVWF ADCON1
; BANKSEL alarm_seg
BCF alarm_seg,alarm_bit ;set alarm_bit be output
; BANKSEL ADCON0
; MOVLW B'01000001' ; select Fosc/8(01), AN0(000)
; MOVWF ADCON0 ; a/d done(0), x(0), a/d ON(1)
;
;************************************************
;* - Initialize the CCP1 Module *
;* - Set the period to FFh *
;* - Make RC2 an output *
;* - Configure CCP1 for PWM (xxxx11xx) *
;* - Initialize Timer2 *
;* - 1:1 Postscale (x0000xxx) *
;* - 1:4 Prescale (xxxxxx01) *
;* - Enable the timer (xxxxx1xx) *
;************************************************

BANKSEL PR2
MOVLW H'FF'
MOVWF PR2
BCF TRISC,2
BANKSEL CCP1CON
MOVLW B'00001111'
MOVWF CCP1CON
MOVLW B'00000101'
MOVWF T2CON
CLRF SPEED ;reset speed to 0

CALL DLY2_5mS ; wait for input charge
MAIN1:
; BSF ADCON0,GO ; start a/d converting
MAIN2:
; BTFSC ADCON0,GO ; a/d convertion finished?
; GOTO MAIN2 ; no
;

call L2homeLCD
MOVLW 3
CALL movcurLCD ; move cursor right 3 positions

; MOVF ADRESH,W ; read a/d result ( high byte )
MOVF SPEED,W
CALL HX2BCD ; convert HEX to BCD
; results in BCDBFH/BCDBFL
MOVF BCDBFH,W ; output results to LCD
CALL putHexLCD
;
MOVF BCDBFL,W
CALL putHexLCD
MOVF SPEED,W
MOVWF CCPR1L ; Also in Duty cycle
CLRF KEY_C
CLRF TEMP
wait_key:
CALL KB4X4 ; read kyboard
BTFSC KYBUF,4 ; Key detected?
GOTO wait_key
MOVLW 10

SUBWF KYBUF,W ;number key?
BTFSS STATUS,C
GOTO NUMBER_KEY
;
GOTO wait_key
NUMBER_KEY:
MOVF KEY_C,W
BTFSC STATUS,Z
GOTO HUNDREDTH
SUBLW 1
BTFSC STATUS,Z
GOTO TENTH
MOVF TEMP,W
ADDWF KYBUF,W
BTFSC STATUS,C
GOTO OVER_FLOW
MOVWF SPEED
GOTO wait_ret
OVER_FLOW:
MOVLW 255
MOVWF SPEED
wait_ret:
CALL KB4X4
BTFSS KYBUF,4 ; KEY RELEASED?
GOTO wait_ret ; w=zero means key still pressed
GOTO MAIN2
HUNDREDTH:
INCF KEY_C
HUN_AGAIN:
MOVF KYBUF,W
BTFSC STATUS,Z
GOTO wait_release
; SUBLW 2
; BTFSC STATUS,C
; GOTO LESS_THAN_3
; MOVLW 2
; MOVWF KYBUF
LESS_THAN_3:
DECF KYBUF,F
MOVLW 100
ADDWF TEMP,F
BTFSS STATUS,C
GOTO HUN_AGAIN
MOVLW 255
MOVWF TEMP
GOTO HUN_AGAIN
TENTH:
INCF KEY_C
TEN_AGAIN:
MOVF KYBUF,W
BTFSC STATUS,Z
GOTO wait_release
DECF KYBUF,F
MOVLW 10
ADDWF TEMP,F
BTFSS STATUS,C
GOTO TEN_AGAIN
MOVLW 255
MOVWF TEMP
GOTO TEN_AGAIN
wait_release:
CALL KB4X4
BTFSS KYBUF,4 ; KEY RELEASED?
GOTO wait_release ; w=zero means key still pressed
CALL DLY2_5mS ; wait for moment
CALL DLY2_5mS ; wait for input charge
GOTO wait_key
;
;
;
END---------------------------------------------------------------------------------
     
      
__________________

我!!!拒收好人卡!!不要變成泡不到馬子的可憐虫!!
我的Blog好人幫本鋪
我的相簿!!好人幫!!來練身材!變成拒收好人卡的好人!!!
我被發好人卡!拒收好人卡的好人!!!
舊 2008-01-10, 03:08 PM #1
回應時引用此文章
COBRA2005離線中  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是10:15 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2025。