|
这个是几个月前做的用 Nokia 5110 LCD + 12F675 电压直接用2个AA电池。 不过数度很慢能测试几百赫兹讯号。X扫描速度是固定的。有兴趣的可以直接 compile一下的程式。 或者改一改做比较完善的数字示波器吧。。
记得输入脚是AN0。讯号需要做正确的调正,请看原理图,可以自己改进用op-amp还是什么的。

演戏视频。
http://www.youtube.com/watch?v=JuvvHk5BbNk
;----------------------------------------code-----------------------------------------
;GPIO 0 -> SCK
;GPIO 2 -> SDIN
;GPIO 5 -> D/C
;GPIO 4 -> RES
;----------------------- Configurations -------------------------
LIST P=12F675, W=-302, r=DEC
#include <p12f675.inc>
__CONFIG 0x0184 ;
;------------------ Equal assign --------------------------------
DAT EQU 0X20
Y EQU 0X21
X EQU 0X22
TEMP EQU 0X23
;------- USE FOR CONVERTER
D1 EQU 0X24
D2 EQU 0X25
D3 EQU 0X26
D4 EQU 0X27
D5 EQU 0X28
D6 EQU 0X29
DP EQU 0X2A
VALUE EQU 0X2B
;------------SENDING TO LCD---
DIS1 EQU 0X2C
DIS2 EQU 0X2D
DIS3 EQU 0X2F
DIS4 EQU 0X30
DIS5 EQU 0X31
DIS6 EQU 0X32
;--------------------------
PVALUE EQU 0X33
TEMP2 EQU 0X34
COUNT EQU 0X35
COUNT1 EQU 0X36
;----------------------------------------------------------------
org 0
MOVLW B'0'
MOVWF INTCON
MOVLW B'11011111'
OPTION
MOVLW B'100'
MOVWF CMCON
BSF STATUS,5
MOVLW B'001010'
TRIS 05
MOVLW B'0000010'
MOVWF ANSEL
BCF STATUS,5
BCF GPIO,0
BCF GPIO,2
BCF GPIO,5
BCF GPIO,4
CALL DELAY
CALL DELAY
BSF GPIO,4
BCF GPIO,5 ;SET LCD TO COMMAND
MOVLW 0x23 ; SET LCD IN VERTICAL MODE
MOVWF DAT
CALL SERIAL_LCD
MOVLW 0xC2
MOVWF DAT
CALL SERIAL_LCD
MOVLW 0x13
MOVWF DAT
CALL SERIAL_LCD
MOVLW 0x20
MOVWF DAT
CALL SERIAL_LCD
MOVLW 0x09
MOVWF DAT
CALL SERIAL_LCD
MOVLW 0x08
MOVWF DAT
CALL SERIAL_LCD
MOVLW 0x0C
MOVWF DAT
CALL SERIAL_LCD
BCF GPIO,5 ;SET LCD TO COMMAND
MOVLW 0x22 ; SET LCD IN VERTICAL MODE
MOVWF DAT
CALL SERIAL_LCD
BSF GPIO,5
MOVLW 250
MOVWF X
MOVLW 0
MOVWF DAT
CLEAR
CALL SERIAL_LCD
DECFSZ X
GOTO CLEAR
MOVLW 253
MOVWF X
CLEAR2
CALL SERIAL_LCD
DECFSZ X
GOTO CLEAR2
BCF GPIO,5
BSF GPIO,5 ;SET LCD TO DATA MODE
MOVLW H'0'
MOVWF DAT
CALL SERIAL_LCD
BCF GPIO,5
;--------------- AFTER INIT LCD ---------------
PRECOUNT
MOVLW D'200'
MOVWF COUNT
LOOPX1
MOVLW D'255'
MOVWF COUNT1
START
MOVF ADRESH,0 ;SAVE PREVIOUS VALUE
MOVWF PVALUE
MOVLW B'00010111'
MOVWF ADCON0
ADCSTART
BTFSC ADCON0,1
GOTO ADCSTART
RRF ADRESH,1
RRF ADRESH,1
MOVF ADRESH,0
ANDLW B'00111111'
MOVWF ADRESH
;----------------------TRIGGER EXPERIMENT AT 0 LEVEL ------------
MOVLW D'32' ; 0 -> 32 . SINCE 64 IS FULL SCALE
SUBWF ADRESH,0
BTFSC STATUS,Z
GOTO PASS
BTFSS STATUS,C
GOTO FAIL
PASS
MOVF PVALUE,0 ; POS EDGE
SUBWF ADRESH,0
BTFSS STATUS,C
GOTO START
GOTO SAMPL
FAIL
DECFSZ COUNT1,F
GOTO START
DECFSZ COUNT,F
GOTO LOOPX1
;--------------------------------------------
SAMPL
MOVLW D'84'
MOVWF COUNT
STARTSAMPL
MOVF ADRESH,0 ;SAVE PREVIOUS VALUE
MOVWF PVALUE
CLRF DIS1
CLRF DIS2
CLRF DIS3
CLRF DIS4
CLRF DIS5
CLRF DIS6
MOVLW B'00010111'
MOVWF ADCON0
ADCSTART1
BTFSC ADCON0,1
GOTO ADCSTART1
RRF ADRESH,1
RRF ADRESH,1
MOVF ADRESH,0
ANDLW B'00111111'
MOVWF ADRESH
;--------------DRAW VECTOR LINE ------------------
VECTOR
MOVF ADRESH,0 ; PVALUE - ADRESH = TEMP2
SUBWF PVALUE,0
BTFSS STATUS,C
GOTO NEGINC
BTFSC STATUS,Z
GOTO NOADD
;WHEN RESULT IS POSITIVE
MOVWF TEMP2
MOVF ADRESH,0
MOVWF VALUE
POSINC
CALL CONVERT
MOVF D1,0 ; ADD DOT
IORWF DIS1,1
MOVF D2,0
IORWF DIS2,1
MOVF D3,0
IORWF DIS3,1
MOVF D4,0
IORWF DIS4,1
MOVF D5,0
IORWF DIS5,1
MOVF D6,0
IORWF DIS6,1
INCF VALUE,F
DECFSZ TEMP2,F
GOTO POSINC
GOTO DRAW
NEGINC
MOVF PVALUE,0 ; WHEN RESULT IS NEGATIVE
SUBWF ADRESH,0 ; ADRESH - PVALUE = TEMP2
MOVWF TEMP2
BTFSC STATUS,Z
GOTO NOADD
MOVF ADRESH,0
MOVWF VALUE
NEGINCLOOP
CALL CONVERT
MOVF D1,0 ; ADD DOT
IORWF DIS1,1
MOVF D2,0
IORWF DIS2,1
MOVF D3,0
IORWF DIS3,1
MOVF D4,0
IORWF DIS4,1
MOVF D5,0
IORWF DIS5,1
MOVF D6,0
IORWF DIS6,1
DECF VALUE,F
DECFSZ TEMP2,F
GOTO NEGINCLOOP
GOTO DRAW
NOADD
MOVF ADRESH,0 ; RESULT IS SAME NO CHANGE , NO NEED TO DRAW LINE
MOVWF VALUE
CALL CONVERT
MOVF D1,0 ; ADD DOT
IORWF DIS1,1
MOVF D2,0
IORWF DIS2,1
MOVF D3,0
IORWF DIS3,1
MOVF D4,0
IORWF DIS4,1
MOVF D5,0
IORWF DIS5,1
MOVF D6,0
IORWF DIS6,1
;------------------SEND TO LCD---------------------
DRAW
BCF GPIO,5
BSF GPIO,5 ;SET LCD TO DATA MODE
MOVF DIS1,0
MOVWF DAT
CALL SERIAL_LCD
BCF GPIO,5
BSF GPIO,5 ;SET LCD TO DATA MODE
MOVF DIS2,0
MOVWF DAT
CALL SERIAL_LCD
BCF GPIO,5
BSF GPIO,5 ;SET LCD TO DATA MODE
MOVF DIS3,0
MOVWF DAT
CALL SERIAL_LCD
BCF GPIO,5
BSF GPIO,5 ;SET LCD TO DATA MODE
MOVF DIS4,0
MOVWF DAT
CALL SERIAL_LCD
BCF GPIO,5
BSF GPIO,5 ;SET LCD TO DATA MODE
MOVF DIS5,0
MOVWF DAT
CALL SERIAL_LCD
BCF GPIO,5
BSF GPIO,5 ;SET LCD TO DATA MODE
MOVF DIS6,0
MOVWF DAT
CALL SERIAL_LCD
BCF GPIO,5
DECFSZ COUNT,F
GOTO STARTSAMPL
GOTO PRECOUNT
;------------------SUBROTINE-----------------------------------
DELAY
MOVLW 50
MOVWF Y
LOOPY
MOVLW 225
MOVWF X
LOOPX
DECFSZ X
GOTO LOOPX
DECFSZ Y
GOTO LOOPY
RETURN
;------------------BINARY TO LEVEL CONVERTER-------------------
CONVERT
CLRF D1
CLRF D2
CLRF D3
CLRF D4
CLRF D5
CLRF D6
MOVF VALUE,0
ANDLW B'000111'
MOVWF TEMP
MOVLW B'000000'
SUBWF TEMP,0
BTFSS STATUS,Z
GOTO NEXT1
MOVLW B'10000000'
MOVWF DP
GOTO LOC
NEXT1
MOVLW B'000001'
SUBWF TEMP,0
BTFSS STATUS,Z
GOTO NEXT2
MOVLW B'01000000'
MOVWF DP
GOTO LOC
NEXT2
MOVLW B'000010'
SUBWF TEMP,0
BTFSS STATUS,Z
GOTO NEXT3
MOVLW B'00100000'
MOVWF DP
GOTO LOC
NEXT3
MOVLW B'000011'
SUBWF TEMP,0
BTFSS STATUS,Z
GOTO NEXT4
MOVLW B'00010000'
MOVWF DP
GOTO LOC
NEXT4
MOVLW B'000100'
SUBWF TEMP,0
BTFSS STATUS,Z
GOTO NEXT5
MOVLW B'00001000'
MOVWF DP
GOTO LOC
NEXT5
MOVLW B'000101'
SUBWF TEMP,0
BTFSS STATUS,Z
GOTO NEXT6
MOVLW B'00000100'
MOVWF DP
GOTO LOC
NEXT6
MOVLW B'000110'
SUBWF TEMP,0
BTFSS STATUS,Z
GOTO NEXT7
MOVLW B'00000010'
MOVWF DP
GOTO LOC
NEXT7
MOVLW B'000111'
SUBWF TEMP,0
BTFSS STATUS,Z
GOTO LOC
MOVLW B'00000001'
MOVWF DP
LOC
MOVF VALUE,0
ANDLW B'111000'
MOVWF TEMP
MOVLW B'001000'
SUBWF TEMP,0
BTFSC STATUS,Z
GOTO D6_WRITE
MOVLW B'010000'
SUBWF TEMP,0
BTFSC STATUS,Z
GOTO D5_WRITE
MOVLW B'011000'
SUBWF TEMP,0
BTFSC STATUS,Z
GOTO D4_WRITE
MOVLW B'100000'
SUBWF TEMP,0
BTFSC STATUS,Z
GOTO D3_WRITE
MOVLW B'101000'
SUBWF TEMP,0
BTFSC STATUS,Z
GOTO D2_WRITE
MOVLW B'110000'
SUBWF TEMP,0
BTFSC STATUS,Z
GOTO D1_WRITE
RETURN
D6_WRITE
MOVF DP,0
MOVWF D6
RETURN
D5_WRITE
MOVF DP,0
MOVWF D5
RETURN
D4_WRITE
MOVF DP,0
MOVWF D4
RETURN
D3_WRITE
MOVF DP,0
MOVWF D3
RETURN
D2_WRITE
MOVF DP,0
MOVWF D2
RETURN
D1_WRITE
MOVF DP,0
MOVWF D1
RETURN
;-------------------------LCD SEND ----------------------------
SERIAL_LCD
BCF GPIO,0
BTFSS DAT,7
BCF GPIO,2
BTFSC DAT,7
BSF GPIO,2
BSF GPIO,0
BCF GPIO,0
BTFSS DAT,6
BCF GPIO,2
BTFSC DAT,6
BSF GPIO,2
BSF GPIO,0
BCF GPIO,0
BTFSS DAT,5
BCF GPIO,2
BTFSC DAT,5
BSF GPIO,2
BSF GPIO,0
BCF GPIO,0
BTFSS DAT,4
BCF GPIO,2
BTFSC DAT,4
BSF GPIO,2
BSF GPIO,0
BCF GPIO,0
BTFSS DAT,3
BCF GPIO,2
BTFSC DAT,3
BSF GPIO,2
BSF GPIO,0
BCF GPIO,0
BTFSS DAT,2
BCF GPIO,2
BTFSC DAT,2
BSF GPIO,2
BSF GPIO,0
BCF GPIO,0
BTFSS DAT,1
BCF GPIO,2
BTFSC DAT,1
BSF GPIO,2
BSF GPIO,0
BCF GPIO,0
BTFSS DAT,0
BCF GPIO,2
BTFSC DAT,0
BSF GPIO,2
BSF GPIO,0
BCF GPIO,0
RETURN
END
|
-
原理图
评分
-
查看全部评分
|