89c51 发表于 2009-12-11 21:02



28里面差不多20块钱卖的是调光程序,比盗版光盘贵很多。
xiewg 发表于 2009-12-11 20:55 http://www.shoudian.org/images/common/back.gif调光程序没多少行,主要看点是控制策略...

lxq 发表于 2009-12-11 21:25

#include "P12F683.INC"

__CONFIG _BOD_OFF&_CPD_ON&_CP_ON&_MCLRE_OFF&_PWRTE_OFF&_WDT_OFF&_INTOSCIO&_FCMEN_OFF&_IESO_OFF

EEADDRA EQU 20H                ;定义EEPROM A地址
EEADDRB EQU 21H                ;定义EEPROM B地址
TEMP EQU 22H                ;定义临时变量
EEREADA EQU 23H                ;定义EEPROM A预写
EEREADB EQU 24H                ;定义EEPROM B预写
DELY1 EQU 25H                ;定义延时变量1
DELY2 EQU 26H                ;定义延时变量2
DELY3 EQU 27H                ;定义延时变量3
TEMP1 EQU 28H                ;定义临时变量1
AA EQU 29H                ;定义PWM低电平时间常数
BB EQU 2AH                ;定义PWM低电平时间常数
COUNT0 EQU 2BH                ;定义定时器延时常数
COUNT1 EQU 2CH
EEADDRC EQU 2DH
EEADDRG EQU 2EH
EEREADC EQU 2FH
EEREADG EQU 30H
GL        EQU 31H
DF        EQU 32H
EEADDRH EQU 33H
EEREADH EQU 34H
EEADDRCC EQU 35H
EEREADCC EQU 36H
EEADDRI        EQU 37H
EEREADI        EQU 38H
SETFLAG        EQU 39H
WTEMP EQU 3AH
STATUSTMP EQU 3BH
;----------------------------------------------------------
        ORG 00H                ;复位向量地址
        CLRWDT
        GOTO STAR        ;转向主程序
;----------------------------------------------------------
        ORG 04H                ;中断向量地址
        GOTO GPINT
;----------------------------------------------------------
        ORG 05H                ;主程序起始地址
STAR       
        BCF STATUS,RP0                ;体选择BANK0
        MOVLW 00H
        MOVWF EEADDRA                ;初始化EEPROM A地址
        MOVLW 01H
        MOVWF EEADDRB                ;初始化EEPROM B地址
        MOVLW 02H
        MOVWF EEADDRC
        MOVLW 03H
        MOVWF EEADDRG
        MOVLW 04H
        MOVWF EEADDRH
        MOVLW 05H
        MOVWF EEADDRCC
        MOVLW 06H
        MOVWF EEADDRI
        MOVLW 3BH
        MOVWF COUNT0
        CLRF EEREADA
;----------------------------------------------------------
        BSF STATUS,RP0
        ;BSF OSCCON,IRCF0        ;设置频率为8MHz
        MOVLW 07H
        MOVWF OPTION_REG        ;允许上拉
;----------------------------------------------------------
        MOVLW 38H
        MOVWF TRISIO
        MOVLW 30H
        MOVWF WPU                ;设置GP4、GP5弱上拉
        MOVWF IOC                ;设置GP4、GP5允许端口电平变化中断
;----------------------------------------------------------
        CLRF ANSEL                ;清除模拟选择寄存器********************
;----------------------------------------------------------
        BCF STATUS,RP0
        MOVLW 07H
        MOVWF CMCON0                ;关闭比较器
;----------------------------------------------------------
        MOVLW 0A8H
        MOVWF INTCON
;----------------------------------------------------------
        CLRF GPIO
;----------------------------------------------------------
MAINLOOP
        BCF STATUS,RP0
        MOVF EEREADA,W
        XORLW 01H
        BTFSC STATUS,Z
        GOTO SET01
       
ML02        MOVF EEREADA,W
        XORLW 02H
        BTFSC STATUS,Z
        GOTO SET02

ML03        MOVF EEREADA,W
        XORLW 03H
        BTFSC STATUS,Z
        GOTO SET03

        CLRF EEREADA
;----------------------------------------------------------
        CLRF T2CON
;----------------------------------------------------------
        CLRF GPIO
        SLEEP
        GOTO MAINLOOP
;----------------------------------------------------------
SET01
        MOVF SETFLAG,F
        BTFSS STATUS,Z
        GOTO MAINLOOP

        MOVLW 04H
        MOVWF T2CON                ;使能T2CON,预分频比1
;----------------------------------------------------------
        BSF STATUS,RP0
        MOVLW 0FFH
        MOVWF PR2                ;设置PR2,PWM周期,默认4M振荡输出PWM频率约15.6KHz
;----------------------------------------------------------
        BCF STATUS,RP0
        MOVLW 0CBH
        MOVWF CCPR1L                ;20%

        MOVLW 0FH
        MOVWF CCP1CON

        MOVWF SETFLAG
        GOTO MAINLOOP
;----------------------------------------------------------
SET02
        MOVLW 04H
        MOVWF T2CON                ;使能T2CON,预分频比1
;----------------------------------------------------------
        BSF STATUS,RP0
        MOVLW 0FFH
        MOVWF PR2                ;设置PR2,PWM周期,默认4M振荡输出PWM频率约15.6KHz
;----------------------------------------------------------
        BCF STATUS,RP0
        CLRF CCPR1L

        MOVLW 0FH
        MOVWF CCP1CON

        MOVWF SETFLAG
        GOTO MAINLOOP
;----------------------------------------------------------
SET03
        MOVLW 04H
        MOVWF T2CON                ;使能T2CON,预分频比1
;----------------------------------------------------------
        BSF STATUS,RP0
        MOVLW 0FFH
        MOVWF PR2                ;设置PR2,PWM周期,默认4M振荡输出PWM频率约15.6KHz
;----------------------------------------------------------
        BCF STATUS,RP0
        CLRF CCPR1L
        MOVLW 0FH
        MOVWF CCP1CON
        CALL DELAY30MS
        MOVLW 0FFH
        MOVWF CCPR1L
        MOVLW 3FH
        MOVWF CCP1CON
        CALL DELAY30MS
        GOTO MAINLOOP
;**********************************************************************
GPINT
        BCF STATUS,RP0
        MOVWF WTEMP
        SWAPF STATUS,W
        MOVWF STATUSTMP                ;现场保护
;----------------------------------------------------------
        BTFSC GPIO,04H
        GOTO LOWBAT
        CALL DELAY10MS
        BTFSC GPIO,04H
        GOTO LOWBAT

        MOVF EEREADA,W
        XORLW 03H
        BTFSS STATUS,Z
        GOTO RB4
        MOVLW 0FFH
        MOVWF CCPR1L
        MOVLW 3FH
        MOVWF CCP1CON

RB4        BTFSS GPIO,04H
        GOTO $-1       

        INCF EEREADA,F

        CLRF INTCON

        CLRF SETFLAG
;----------------------------------------------------------
RETIE
        BCF STATUS,RP0
        MOVLW 28H
        MOVWF INTCON

        MOVLW 3BH
        MOVWF COUNT0

RETE
        CLRF TMR0

        SWAPF STATUSTMP,W
        MOVWF STATUS
        SWAPF WTEMP,F
        SWAPF WTEMP,W

        RETFIE
;----------------------------------------------------------
LOWBAT
        BTFSC GPIO,05H
        GOTO RETIE

        MOVF COUNT0,F
        BTFSS STATUS,Z
        GOTO DECFCOUNT0
        GOTO GPBAT
;----------------------------------------------------------
DECFCOUNT0
        DECF COUNT0,F
        GOTO RETE
;----------------------------------------------------------
GPBAT
        BCF STATUS,RP0
;----------------------------------------------------------
GPBAT01
        INCF CCPR1L,F
        CALL DELAY10MS
        MOVF CCPR1L,W
        XORLW 0F2H
        BTFSS STATUS,Z
        GOTO GPBAT01
;----------------------------------------------------------
LBATLOOP
        CALL DELAY500MS
        CALL DELAY500MS
        CALL DELAY500MS
        CALL DELAY500MS
        MOVLW 0FBH
        MOVWF CCPR1L
        CALL DELAY166MS
        MOVLW 0F2H
        MOVWF CCPR1L
        DECFSZ COUNT1,F
        GOTO LBATLOOP
        CLRF EEREADA
        GOTO RETIE
;**********************************************************************

;**********************************************************************
EEREAD_A                ;读取EEPROM A
        BCF STATUS,RP0
        MOVF EEADDRA,W
        BSF STATUS,RP0
        MOVWF EEADR
        BSF EECON1,RD
        MOVF EEDATA,W
        BCF STATUS,RP0
        MOVWF EEREADA
        RETURN
;----------------------------------------------------------
EEREAD_B                ;读取EEPROM B
        BCF STATUS,RP0
        MOVF EEADDRB,W
        BSF STATUS,RP0
        MOVWF EEADR
        BSF EECON1,RD
        MOVF EEDATA,W
        BCF STATUS,RP0
        MOVWF EEREADB
        RETURN
;----------------------------------------------------------
EEREAD_CC                ;读取EEPROM CCPR1L寄存值
        BCF STATUS,RP0
        MOVF EEADDRCC,W
        BSF STATUS,RP0
        MOVWF EEADR
        BSF EECON1,RD
        MOVF EEDATA,W
        BCF STATUS,RP0
        MOVWF CCPR1L
        RETURN
;----------------------------------------------------------
EEREAD_H                ;读取EEPROM H
        BCF STATUS,RP0
        MOVF EEADDRH,W
        BSF STATUS,RP0
        MOVWF EEADR
        BSF EECON1,RD
        MOVF EEDATA,W
        BCF STATUS,RP0
        MOVWF EEREADH
        RETURN
;----------------------------------------------------------
EEREAD_I                ;读取EEPROM I
        BCF STATUS,RP0
        MOVF EEADDRI,W
        BSF STATUS,RP0
        MOVWF EEADR
        BSF EECON1,RD
        MOVF EEDATA,W
        BCF STATUS,RP0
        MOVWF EEREADI
        RETURN
;----------------------------------------------------------
EEREAD                        ;读取EEPROM A、B、C、G
        BCF STATUS,RP0
        MOVF EEADDRA,W
        BSF STATUS,RP0
        MOVWF EEADR
        BSF EECON1,RD
        MOVF EEDATA,W
        BCF STATUS,RP0
        MOVWF EEREADA        ;取得A
        MOVF EEADDRB,W
        BSF STATUS,RP0
        MOVWF EEADR
        BSF EECON1,RD
        MOVF EEDATA,W
        BCF STATUS,RP0
        MOVWF EEREADB        ;取得B
        MOVF EEADDRC,W
        BSF STATUS,RP0
        MOVWF EEADR
        BSF EECON1,RD
        MOVF EEDATA,W
        BCF STATUS,RP0
        MOVWF EEREADC        ;取得C
        MOVF EEADDRG,W
        BSF STATUS,RP0
        MOVWF EEADR
        BSF EECON1,RD
        MOVF EEDATA,W
        BCF STATUS,RP0
        MOVWF EEREADG        ;取得G
        RETURN
;----------------------------------------------------------

lxq 发表于 2009-12-11 21:26

WREEA                                ;写EEPROM A,TEMP传送写入数据
        BCF STATUS,RP0                ;取BANK0
        MOVF EEADDRA,W                ;取A地址
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEADR                ;A地址进入EEADR
        BCF STATUS,RP0                ;取BANK0
        MOVF TEMP,W                ;取写入数据
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEDATA                ;待写数据进入EEDATA
        BSF EECON1,WREN
        BCF INTCON,GIE
        MOVLW 55H
        MOVWF EECON2
        MOVLW 0AAH
        MOVWF EECON2
        BSF EECON1,WR
        BSF INTCON,GIE
        BCF STATUS,RP0
WWRA        BTFSS PIR1,EEIF
        GOTO WWRA
        CLRF PIR1
        RETURN
;----------------------------------------------------------
WREEB                                ;写EEPROM B,TEMP传送写入数据
        BCF STATUS,RP0                ;取BANK0
        MOVF EEADDRB,W                ;取B地址
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEADR                ;B地址进入EEADR
        BCF STATUS,RP0                ;取BANK0
        MOVF TEMP,W                ;取写入数据
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEDATA                ;待写数据进入EEDATA
        BSF EECON1,WREN
        BCF INTCON,GIE
        MOVLW 55H
        MOVWF EECON2
        MOVLW 0AAH
        MOVWF EECON2
        BSF EECON1,WR
        BSF INTCON,GIE
        BCF STATUS,RP0
WWRB        BTFSS PIR1,EEIF
        GOTO WWRB
        CLRF PIR1
        RETURN
;----------------------------------------------------------
WREEC                                ;写EEPROM C,TEMP传送写入数据
        BCF STATUS,RP0                ;取BANK0
        MOVF EEADDRC,W                ;取C地址
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEADR                ;B地址进入EEADR
        BCF STATUS,RP0                ;取BANK0
        MOVF TEMP,W                ;取写入数据
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEDATA                ;待写数据进入EEDATA
        BSF EECON1,WREN
        BCF INTCON,GIE
        MOVLW 55H
        MOVWF EECON2
        MOVLW 0AAH
        MOVWF EECON2
        BSF EECON1,WR
        BSF INTCON,GIE
        BCF STATUS,RP0
WWRC        BTFSS PIR1,EEIF
        GOTO WWRC
        CLRF PIR1
        RETURN
;----------------------------------------------------------
WREEG                                ;写EEPROM B,TEMP传送写入数据
        BCF STATUS,RP0                ;取BANK0
        MOVF EEADDRG,W                ;取B地址
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEADR                ;B地址进入EEADR
        BCF STATUS,RP0                ;取BANK0
        MOVF TEMP,W                ;取写入数据
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEDATA                ;待写数据进入EEDATA
        BSF EECON1,WREN
        BCF INTCON,GIE
        MOVLW 55H
        MOVWF EECON2
        MOVLW 0AAH
        MOVWF EECON2
        BSF EECON1,WR
        BSF INTCON,GIE
        BCF STATUS,RP0
WWRG        BTFSS PIR1,EEIF
        GOTO WWRG
        CLRF PIR1
        RETURN
;----------------------------------------------------------
WREECC                                ;写EEPROM CC,TEMP传送写入数据
        BCF STATUS,RP0                ;取BANK0
        MOVF EEADDRCC,W                ;取CC地址
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEADR                ;CC地址进入EEADR
        BCF STATUS,RP0                ;取BANK0
        MOVF TEMP,W                ;取写入数据
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEDATA                ;待写数据进入EEDATA
        BSF EECON1,WREN
        BCF INTCON,GIE
        MOVLW 55H
        MOVWF EECON2
        MOVLW 0AAH
        MOVWF EECON2
        BSF EECON1,WR
        BSF INTCON,GIE
        BCF STATUS,RP0
WWRCC        BTFSS PIR1,EEIF
        GOTO WWRCC
        CLRF PIR1
        RETURN
;----------------------------------------------------------
WREEH                                ;写EEPROM H,TEMP传送写入数据
        BCF STATUS,RP0                ;取BANK0
        MOVF EEADDRH,W                ;取H地址
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEADR                ;H地址进入EEADR
        BCF STATUS,RP0                ;取BANK0
        MOVF TEMP,W                ;取写入数据
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEDATA                ;待写数据进入EEDATA
        BSF EECON1,WREN
        BCF INTCON,GIE
        MOVLW 55H
        MOVWF EECON2
        MOVLW 0AAH
        MOVWF EECON2
        BSF EECON1,WR
        BSF INTCON,GIE
        BCF STATUS,RP0
WWRH        BTFSS PIR1,EEIF
        GOTO WWRH
        CLRF PIR1
        RETURN
;----------------------------------------------------------
WREEI                                ;写EEPROM I,TEMP传送写入数据
        BCF STATUS,RP0                ;取BANK0
        MOVF EEADDRI,W                ;取I地址
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEADR                ;I地址进入EEADR
        BCF STATUS,RP0                ;取BANK0
        MOVF TEMP,W                ;取写入数据
        BSF STATUS,RP0                ;取BANK1
        MOVWF EEDATA                ;待写数据进入EEDATA
        BSF EECON1,WREN
        BCF INTCON,GIE
        MOVLW 55H
        MOVWF EECON2
        MOVLW 0AAH
        MOVWF EECON2
        BSF EECON1,WR
        BSF INTCON,GIE
        BCF STATUS,RP0
WWRI        BTFSS PIR1,EEIF
        GOTO WWRI
        CLRF PIR1
        RETURN
;----------------------------------------------------------
SOSDEYMOVLW         0D8H                                        ;外循环常数
        MOVWF         DELY1                                        ;外循环寄存器
SOSDE0        MOVLW         0FFH                                        ;中循环常数
        MOVWF         DELY2                                        ;中循环寄存器
SOSDE1        DECFSZ         DELY2,F                                        ;中循环寄存器递减
        GOTO         SOSDE1                                        ;继续中循环
        DECFSZ         DELY1,F                                        ;外循环寄存器递减
        GOTO         SOSDE0                                        ;继续外循环
        RETURN
;----------------------------------------------------------
DELAY10US
        NOP
        NOP
        NOP
        NOP
        RETURN
;----------------------------------------------------------
DELAY500MS       
        MOVLW 03H        ;外循环常数
        MOVWF DELY1        ;外循环寄存器
LP110
        MOVLW 0EBH        ;中循环常数
        MOVWF DELY2        ;中循环寄存器
LP210
        MOVLW 0EBH        ;内循环常数
        MOVWF DELY3        ;内循环寄存器
LP310
        DECFSZ DELY3        ;内循环寄存器递减
        GOTO LP310        ;继续内循环
        DECFSZ DELY2        ;中循环寄存器递减
        GOTO LP210        ;继续中循环
        DECFSZ DELY1        ;外循环寄存器递减
        GOTO LP110        ;继续外循环
        RETURN
;----------------------------------------------------------
DELAY166MS       
        MOVLW 01H        ;外循环常数
        MOVWF DELY1        ;外循环寄存器
LP330
        MOVLW 0EFH        ;中循环常数
        MOVWF DELY2        ;中循环寄存器
LP331
        MOVLW 0FCH        ;内循环常数
        MOVWF DELY3        ;内循环寄存器
LP332        CLRWDT
        DECFSZ DELY3        ;内循环寄存器递减
        GOTO LP332        ;继续内循环
        DECFSZ DELY2        ;中循环寄存器递减
        GOTO LP331        ;继续中循环
        DECFSZ DELY1        ;外循环寄存器递减
        GOTO LP330        ;继续外循环
        RETURN
;----------------------------------------------------------
DELAY100MS       
        MOVLW 90H
        MOVWF DELY1
L100MS2
        MOVLW 0E6H
        MOVWF DELY2
L100MS1
        DECFSZ DELY2,F
        GOTO L100MS1
        DECFSZ DELY1,F
        GOTO L100MS2
        RETURN
;----------------------------------------------------------
DELAY10MS       
        MOVLW 0BH
        MOVWF DELY1
L33MS2
        MOVLW 0E6H
        MOVWF DELY2
L33MS1        CLRWDT
        DECFSZ DELY2,F
        GOTO L33MS1
        DECFSZ DELY1,F
        GOTO L33MS2
        RETURN
;----------------------------------------------------------
MIDLIGHT
        MOVLW 40H
        MOVWF DELY1
DL0        MOVLW 0FFH
        MOVWF DELY2
        CLRF TEMP1
DL1        DECFSZ DELY2
        GOTO DL1
        MOVF TEMP1
        BTFSS STATUS,Z
        GOTO DS1
        BCF GPIO,00H
        COMF TEMP1
DS0        DECFSZ DELY1       
        GOTO DL0
        BCF GPIO,00H
        RETURN

DS1        BSF GPIO,00H
        CLRF TEMP1
        GOTO DS0
;----------------------------------------------------------
DELAY50MS       
        MOVLW 48H
        MOVWF DELY1
L50MS2
        MOVLW 0E6H
        MOVWF DELY2
L50MS1
        DECFSZ DELY2,F
        GOTO L50MS1
        DECFSZ DELY1,F
        GOTO L50MS2
        RETURN
;----------------------------------------------------------
DELAY30MS       
        MOVLW 30H
        MOVWF DELY1
L30MS2
        MOVLW 0E6H
        MOVWF DELY2
L30MS1
        DECFSZ DELY2,F
        GOTO L30MS1
        DECFSZ DELY1,F
        GOTO L30MS2
        RETURN
;----------------------------------------------------------

END

twoperson 发表于 2009-12-11 21:26

tiny2313可不是8pin的。。。

lxq 发表于 2009-12-11 21:27

本帖最后由 lxq 于 2009-12-11 21:30 编辑

轻触开关控制小程序





应网友要求搞了个轻触开关控制的小程序,按一下开机,中亮;再按,高亮;再按,暴闪;再按关闭,关闭休眠待机电流很小。按键用GP04端口,GP05外接MAX809S做欠压警示,欠压后由当前亮度无级变化到微亮,然后微亮慢闪。
   可以将现有7135板改造,变成轻触开关控制。



 程序很简单,懂编程的看过就会笑了,原来东成编程这么小儿科。不过小儿科归小儿科,开放、共享却是不容易做到的,很多人懂却不说,我虽然不是很懂,但希望更多人参与进来,到这里畅所欲言,或许哪天高手多了,大家会看到更多优秀的设计。

twoperson 发表于 2009-12-11 21:37

懂编程从来就知道手电里的调光程序很简单。。。不懂程序的还要知道怎么编译和烧录~不如30楼开贴教一下PIC和AVR的编译器以及如何下载程序吧

lxq 发表于 2009-12-11 21:41

31# twoperson





看来 兄弟 不认识 东成     {:1_217:}

adm 发表于 2009-12-11 21:47

看看

89c51 发表于 2009-12-11 22:37

小程序来说ASM比C强不是一般的多....

twoperson 发表于 2009-12-11 22:55

但是手电这种对于程序效率要求不是特别高的地方没必要用汇编啊,相信编译器就行

mioa 发表于 2009-12-11 22:57

顶诚实,公开的东成兄!

别的就酸了.

xmdzshz 发表于 2009-12-12 00:43

顶诚实,公开的东成兄!

别的就酸了.
mioa 发表于 2009-12-11 22:57 http://www.shoudian.org/images/common/back.gif

东成老大的高度目前在坛子里面无人能够企及{:1_268:}
页: 1 [2]
查看完整版本: 测了下猎人2803在2AA时候输出