众所周知最初由第三人称转第一人称飞穿越机极容易飞丢飞机,这玩意又小,掉在树林草堆里很难发现,有一次找了1个多小时才找到
为此做了一个遥控BB响。
电路非常简单,采用宏晶单片机STC15F102W,成本不超过3元钱
只需利用一个遥控器没用的通道来控制,最好是两档的拨杆
本人用的第七通道来控制
视频:
程序源代码:
;******************************************************************************
;程序功能:遥控器控制蜂鸣器鸣叫
;mcu STC15F102W;内部晶振11.0592M,1.38T
;******************************************************************************
;特殊功能寄存器定义
p3m1 equ 0b1h
p3m0 equ 0b2h
auxr equ 8eh
auxr1 equ 0a2h ;选择双指针
ie2 equ 0afh
wdtrst equ 0c1h
t2h equ 0d6h
t2l equ 0d7h
;******************************************************************************
;引脚定义
pin bit p3.3 ;标准IO
spout bit p3.4 ;推挽输出
;******************************************************************************
;所用的寄存器
;00h--0bh 工作寄存器
;0ch--13h 堆栈
;******************************************************************************
;位状态
alestatus bit 00h ;0为不报警,1为报警
;******************************************************************************
org 0000h
ljmp start
org 0003h
reti
org 000bh
ljmp t0_int
org 0013h
reti
org 001bh
reti
;******************************************************************************
;11.0592M晶震,延时25ms
dt25ms:
mov r6,#200
dt0:
mov r7,#125
dt1:
mov wdtrst,#00110001b ;清看门狗
nop
nop
nop
nop
djnz r7,dt1
djnz r6,dt0
ret
org 0043h
;******************************************************************************
start:
clr ea
mov sp,#0ch
mov wdtrst,#00110001b ;启动看门狗,看门狗溢出时间为142.2ms
lcall ioinit
lcall sysinit
;主程序开始
lcall go
mov r5,#32 ;蜂鸣器叫800ms
main:
lcall dt25ms
djnz r5,main
clr alestatus ;停止鸣叫
main5:
lcall pcl ;测量脉冲宽度
mov a,t2h
cjne a,#4bh,main6
mov a,t2l
cjne a,#0ach,main7
ljmp main9
main6:
jnc main8
ljmp main9
main7:
jnc main8
ljmp main9
main8:
setb alestatus ;报警
ljmp main5
main9:
clr alestatus ;停止报警
ljmp main5
;******************************************************************************
ioinit:
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
mov p3m1,#00000000b
mov p3m0,#00010000b
ret
;******************************************************************************
sysinit:
mov tmod,#11h ;t0,t1都为16位定时器方式
mov auxr,#04h ;先禁止t2工作,t2不需要12分频
mov th0,#0ffh ;200us定时,产生2.5KHz的信号驱动蜂鸣器
;实测2.5KHz频率能使蜂鸣器最响
mov tl0,#48h
clr psw.4 ;第一组工作寄存器
clr psw.3
clr c
clr ex1
clr tf0
clr tf1
clr tr1
setb alestatus ;上电先叫一下
ret
;******************************************************************************
go:
setb et0
setb ea
setb tr0
ret
;******************************************************************************
;测量输入脉冲宽度
pcl:
mov wdtrst,#00110001b ;清看门狗
jb pin,pcl ;如果是高电平需要等到变低
pcl1:
mov wdtrst,#00110001b ;清看门狗
jnb pin,pcl1 ;等待上升沿
mov t2h,#00h ;最大5.92ms
mov t2l,#00h
orl auxr,#10h ;启动T2
pcl2:
mov wdtrst,#00110001b ;清看门狗
jb pin,pcl2 ;等待脉冲结束
anl auxr,#0efh ;停止T2
ret
;******************************************************************************
t0_int:
jnb alestatus,t0_int1
cpl spout ;蜂鸣器响
ljmp t0_int2
t0_int1:
setb spout ;蜂鸣器停止响
t0_int2:
clr tf0
mov th0,#0ffh ;200us定时
mov tl0,#48h
reti
;******************************************************************************
end
|