|
學(xué)習(xí)單片機(jī)很久了,沒(méi)做過(guò)像樣的東西,對(duì)315M和433M無(wú)線遙控做過(guò)很多維修,也安裝過(guò)一些遙控開(kāi)關(guān),更遇到過(guò)配遙控的客戶無(wú)數(shù),研究了配遙控器的方法。
用單片機(jī)STC15W204S軟件解碼密碼,同步頭長(zhǎng)度,做過(guò)兩個(gè)版本的線路板,第一版這里不介紹了,這里說(shuō)一下第二版,看圖
圖上說(shuō)的清楚,接收模塊供電是單獨(dú)濾波后的,防止干擾單片機(jī),信號(hào)輸出經(jīng)一集成塊放大(貼片5腳的那個(gè)),隔離單片機(jī)與接收模塊干擾,是遠(yuǎn)距離解碼的關(guān)鍵。
上原理圖和PBC圖,省的你們樓層問(wèn)我要,呵呵!!
這是焊接好的線路板,這里沒(méi)用時(shí)鐘,所以沒(méi)焊接DS3231,
顯示屏是0.91寸的OLED屏,這玩意老貴了,用一個(gè)心疼半天。
寫(xiě)入程序,開(kāi)機(jī)嘍。。!只看屏幕,不算丑,
解碼一個(gè)遙控試試,4M是單片機(jī)震蕩頻率,燒寫(xiě)時(shí)需手動(dòng)填寫(xiě),選項(xiàng)里沒(méi)有4M
順便說(shuō)明一下意思啊,圖片介紹更清楚:
多解碼幾個(gè)不同震蕩電阻試試看效果:
發(fā)射按鍵就是P3.3腳,這里沒(méi)法演示發(fā)射,需要視頻才能演示,我不會(huì)發(fā)鏈接
發(fā)射也是很精準(zhǔn)的,接收設(shè)備很靈敏解碼,第一版不介紹就是因?yàn)榘l(fā)射不精準(zhǔn)
設(shè)備解碼很不靈,用的發(fā)射模塊是1000米的,這3.7V供電肯定達(dá)不到這距離,
要9V-12V才能600米左右,天線和障礙物因素眾多,沒(méi)詳細(xì)實(shí)驗(yàn)距離
接收普通遙控信號(hào)最遠(yuǎn)30米,接收遠(yuǎn)距離遙控100米成功解碼,
謝謝大家的閱讀, 此板已在某條魚(yú)出售
程序只起到拋磚引玉的功能,不能全部分享給大家,有人收獲多,有人收獲不到,
下面是發(fā)射程序和顯示程序,匯編寫(xiě)的大家輕噴!。。!
- ;=============================按鍵發(fā)射接收到的編碼==================================
- TTTT:
- CLR LED_F ;發(fā)射指示燈
- MOV R3,#8 ;每字節(jié)調(diào)用8次
- TTT_1:
- mov 20h,24h
- mov 21h,25h
- mov 22h,26h
- MOV R0,#20H
- TTT_2:
- LCALL FASE_T0
- TTT_3:
- CLR C
- MOV A,@R0
- RLC A
- MOV @R0,A
- JC TTT_4
- LCALL FASE_0 ;輸出0碼
- JMP TTT_5
- TTT_4:
- LCALL FASE_1 ;輸出1碼
- TTT_5:
- DJNZ R3,TTT_3 ;一字節(jié)是否發(fā)完
- MOV R3,#8
- INC R0
- CJNE R0,#23H,TTT_3 ;3字節(jié)是否發(fā)完
- MOV R3,#8 ;每字節(jié)調(diào)用8次
- MOV R0,#20H
- JNB K1,TTT_1
- CLR FAST
- SETB LED_F
- RET
- ;-------------同步碼----------------
- FASE_T0:
- SETB FAST
- LCALL DEL_FS
- MOV R5,#31
- FASE_T1:
- CLR FAST
- LCALL DEL_FS
- DJNZ R5,FASE_T1
- RET
- ;--------------0碼-----------------
- FASE_0: SETB FAST
- LCALL DEL_FS
- MOV R5,#3
- FASE_01:CLR FAST
- LCALL DEL_FS
- DJNZ R5,FASE_01
- RET
- ;--------------1碼-----------------
- FASE_1: MOV R5,#3 ;
- FASE_11:SETB FAST
- LCALL DEL_FS
- DJNZ R5,FASE_11
- CLR FAST
- LCALL DEL_FS
- RET
- ;-----------數(shù)據(jù)解碼顯示-----------------20H/21H/22H/2FH------
- ;顯示0/F/D/1
- DISP_JMB:
- MOV R0, #20H ;原數(shù)據(jù)地址
- MOV R1, #40H
- MOV R7, #0 ;左移次數(shù)計(jì)數(shù)
- MOV 2FH,#0 ;該位可以位操作(位操作地址是7FH--78H)
- DISP_JM:
- MOV A,@R0
- CLR C
- RLC A ;C→A0 A7→C 數(shù)據(jù)存入C
- MOV 79H,C ;移入2FH單元A1位
- CLR C
- RLC A ;C→A0 A7→C 數(shù)據(jù)存入C
- MOV 78H,C ;移入2FH單元A0位
- MOV @R0,A ;暫存@R0
- MOV A,2FH
- JNZ DISP_0F
- MOV @R1,#0 ;------00--0解碼顯示
- JMP DISP_01DF
- DISP_0F:
- CJNE A,#01,DISP_0D
- MOV @R1,#15 ;--------01--F解碼顯示
- JMP DISP_01DF
- DISP_0D:
- CJNE A,#02,DISP_0H
- MOV @R1,#13 ;--------10--D解碼顯示
- JMP DISP_01DF
- DISP_0H:
- CJNE A,#03,DISP_01DF
- MOV @R1,#1 ;--------11--1解碼顯示
- JMP DISP_01DF
- DISP_01DF:
- MOV 2FH,#0
- INC R1
- INC R7
- CJNE R7,#4,DISP_JM ;是否移動(dòng)了4次,夠4次說(shuō)明一字節(jié)輸出完成
- MOV R7,#0 ;左移次數(shù)清零
- INC R0
- CJNE R0,#23H,DISP_JM;3字節(jié)是否調(diào)取完成
- MOV 4CH,#36
- MOV 4DH,#36
- MOV 4EH,#4
- MOV 4FH,#22
- DISP_EN:
- RET
- ;===========================第一排顯示=====================================
- DISP_A:
- MOV R0,#40H
- MOV DIZHI_X,#00H ;列地址 1
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#08H ;列地址 2
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#10H ;列地址 3
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#18H ;列地址 4
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#20H ;列地址 5
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#28H ;列地址 6
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#30H ;列地址 7
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#38H ;列地址 8
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#40H ;列地址 9
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#48H ;列地址 10
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#50H ;列地址 11
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#58H ;列地址 12
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#60H ;列地址 13
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#68H ;列地址 14
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#70H ;列地址 15
- LCALL DISP_B0
- INC R0
- MOV DIZHI_X,#78H ;列地址 16
- LCALL DISP_B0
- RET
- ;=========================第二排顯示程序==============================
- DISP_B:
- MOV R0,#40H
- MOV DIZHI_X,#00H ;設(shè)置列地址 1
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#08H ;列地址 2
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#10H ;列地址 3
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#18H ;列地址 4
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#20H ;列地址 5
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#28H ;列地址 6
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#30H ;列地址 7
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#38H ;列地址 8
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#40H ;列地址 9
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#48H ;列地址 10
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#50H ;列地址 11
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#58H ;列地址 12
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#60H ;列地址 13
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#68H ;列地址 14
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#70H ;列地址 15
- LCALL DISP_B2
- INC R0
- MOV DIZHI_X,#78H ;列地址 16
- LCALL DISP_B2
- RET
- ;--數(shù)值第一排8*16顯示子程序---------
- DISP_B0:
- MOV DIZHI_Y,#0B0H ;設(shè)置頁(yè)起始地址(B0-B7)(第一排)
- LCALL TBT_0 ;根據(jù)值取表
- LCALL XIE_MLING ;寫(xiě)頁(yè)地址和列地址
- MOV R6,#8
- LCALL MAK_XZJ ;
- INC DIZHI_Y ;8*16下半部分頁(yè)地址加1
- LCALL XIE_MLING;寫(xiě)頁(yè)地址和列地址
- MOV R6,#8
- LCALL MAK_XZJ
- RET
- ;--數(shù)值第二排8*16顯示子程序---------
- DISP_B2:
- MOV DIZHI_Y,#0B2H ;設(shè)置頁(yè)起始地址(B0-B7)(第2排)
- LCALL TBT_0 ;根據(jù)值取表
- LCALL XIE_MLING ;寫(xiě)頁(yè)地址和列地址
- MOV R6,#8
- LCALL MAK_XZJ ;
- INC DIZHI_Y ;8*16下半部分頁(yè)地址加1
- LCALL XIE_MLING;寫(xiě)頁(yè)地址和列地址
- MOV R6,#8
- LCALL MAK_XZJ
- RET
- ;=========================數(shù)據(jù)區(qū)清零程序======================================
- QLCX:
- MOV A,#0 ;清零程序
- MOV R6,#40H
- MOV R0,#20H
- QQQQ:
- MOV @R0,A
- INC R0
- DJNZ R6,QQQQ
- RET
- ;============================初始化0.91寸OLED=================================
- RESET:
- MOV R7,#0AEH ;關(guān)閉顯示
- LCALL COMMAND
- MOV R7,#20H ;設(shè)置模式命令
- LCALL COMMAND
- MOV R7,#10H ;00水平地址,01垂直地址,10頁(yè)地址
- LCALL COMMAND
- MOV R7,#0B0H ;設(shè)置頁(yè)起始地址(B0-B7)
- LCALL COMMAND
- MOV R7,#0C8H ;設(shè)置COM輸出掃描方向(C8從上到下,C0反向)
- LCALL COMMAND
- MOV R7,#00H ;設(shè)置低列地址
- LCALL COMMAND
- MOV R7,#10H ;設(shè)置高列地址
- LCALL COMMAND
- MOV R7,#40H ;設(shè)置起始行地址
- LCALL COMMAND
- MOV R7,#81H ;設(shè)置對(duì)比度
- LCALL COMMAND
- MOV R7,#200 ;對(duì)比度值(00-255)
- LCALL COMMAND
- MOV R7,#0A1H ;設(shè)置egment re-map 0 to 127
- LCALL COMMAND
- MOV R7,#0A6H ;正常顯示(A6正常,A7反相顯示)
- LCALL COMMAND
- MOV R7,#0A8H ;設(shè)置驅(qū)動(dòng)路數(shù)
- LCALL COMMAND
- MOV R7,#31 ;路數(shù)(0-63)
- LCALL COMMAND
- MOV R7,#0A5H ;
- LCALL COMMAND
- MOV R7,#0A4H ;全部顯示開(kāi)啟
- LCALL COMMAND
- MOV R7,#0D3H ;設(shè)置顯示偏移
- LCALL COMMAND
- MOV R7,#0 ;偏移量
- LCALL COMMAND
- MOV R7,#0D5H ;設(shè)置震蕩頻率
- LCALL COMMAND
- MOV R7,#0F0H ;
- LCALL COMMAND
- MOV R7,#0D9H ;設(shè)置充電周期
- LCALL COMMAND
- MOV R7,#22H ;
- LCALL COMMAND
- MOV R7,#0DAH ;引腳硬件配置
- LCALL COMMAND
- MOV R7,#02H ;
- LCALL COMMAND
- MOV R7,#0DBH ;設(shè)置電壓倍率
- LCALL COMMAND
- MOV R7,#20H ;
- LCALL COMMAND
- MOV R7,#8DH ;設(shè)置
- LCALL COMMAND
- MOV R7,#14H
- LCALL COMMAND
- MOV R7,#0AFH ;打開(kāi)顯示
- LCALL COMMAND
- RET
- ;====================清屏程序=================================
- QPCX:
- MOV R7,#00H ;00水平地址,01垂直地址,10頁(yè)地址
- LCALL COMMAND
- MOV R6,#0
- MOV R4,#252
- MOV R7,#0B0H ;設(shè)置頁(yè)起始地址(B0-B7)
- LCALL COMMAND
- MOV R7,#00H ;設(shè)置低列地址
- LCALL COMMAND
- MOV R7,#10H ;設(shè)置高列地址
- LCALL COMMAND
- MAH:
- MOV A,20h
- MOV R7,A
- LCALL COMDADA
- INC R6
- CJNE R6,#0,MAH
- INC R4
- CJNE R4,#0,MAH
- RET
- ;==================================================================
- ;--------寫(xiě)命令程序----------
- COMMAND:
- MOV R3,#3
- COMMAND_1:
- DEC R3 ;######防止出現(xiàn)程序檢測(cè)不到I2C出現(xiàn)死循環(huán)
- lcall start ;啟動(dòng)總線
- mov a,#78h ;地址寫(xiě)入
- lcall send
- lcall ack
- MOV A, R3
- JZ COMMAND_EN
- jc command_1
- mov a,#00h
- lcall send
- lcall ack
- mov a,R7
- lcall send
- lcall ack
- lcall stop
- COMMAND_EN:
- ret
- ;--------寫(xiě)數(shù)據(jù)程序----------
- COMDADA:
- MOV R3,#3
- COMDADA_1:
- DEC R3 ;######防止出現(xiàn)程序檢測(cè)不到I2C出現(xiàn)死循環(huán)
- lcall start ;啟動(dòng)總線
- mov a,#78h
- lcall send
- lcall ack
- MOV A, R3
- JZ COMDADA_EN
- jc comdada_1
- mov a,#40h
- lcall send
- lcall ack
- mov a,R7
- lcall send
- lcall ack
- lcall stop
- COMDADA_EN:
- ret
- ;------寫(xiě)頁(yè)、列地址命令-----------
- XIE_MLING:
- MOV R7,DIZHI_Y ;設(shè)置頁(yè)起始地址(B0-B7)
- LCALL COMMAND
- MOV A,DIZHI_X
- ANL A,#0FH ;
- MOV R7,A ;設(shè)置低列地址
- LCALL COMMAND
- MOV A,DIZHI_X
- SWAP A
- ANL A,#0FH ;
- ORL A,#10H
- MOV R7,A ;設(shè)置高列地址
- LCALL COMMAND
- RET
- ;--------寫(xiě)一字節(jié)數(shù)據(jù)--------------
- MAK_XZJ:
- CLR A
- MOVC A,@A+DPTR
- MOV R7,A
- LCALL COMDADA
- INC DPTR
- DJNZ R6,MAK_XZJ
- RET
- ;============================IIC總線程序=================================
- ;-------總線啟動(dòng)程序---------
- start:
- setb scl
- setb sda
- nop
- nop
- clr sda
- nop
- nop
- clr scl
- ret
- ;-------總線停止程序---------
- stop:
- clr sda
- nop
- nop
- setb scl
- nop
- nop
- setb sda
- ret
- ;-----------應(yīng)答----------
- ack:
- setb sda
- nop
- nop
- setb scl
- jb sda, ack_0
- clr c
- sjmp ack_1
- ack_0:
- setb c
- ack_1:
- nop
- nop
- clr scl
- ret
- ;--------------發(fā)送8位數(shù)據(jù)---------
- send:
- mov b, #08h
- send_1:
- rlc a
- mov sda, c
- setb scl
- nop
- nop
- clr scl
- djnz b, send_1
- ret
- ;--------------接收8位數(shù)據(jù)-----------
- receive:
- mov b, #08h
- clr a
- setb sda
- receive_1:
- setb scl
- nop
- nop
- mov c,sda
- rlc a
- clr scl
- djnz b, receive_1
- ret
- ;----------10MS--------------
- DELAY10ms:
- MOV 6EH, #100
- DLY5: MOV 6FH, #100
- DJNZ 6FH, $
- DJNZ 6EH, DLY5
- RET
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|