一、本文通過紅外發射接收對管,來達到簡單計數的小玩意,下圖就是原型,白色是發射管,和普通的LED一樣,黑色的是接收管,通電以後也不發亮,反正就是不亮,檢測方法後續發。
1、紅外線接收管
功能與光敏接收管相似隻是不受可見光的幹擾,感光面積大,靈敏度高,屬于光敏二極管,一般隻對紅外線有反應。它是一個具有光敏特征的PN結,具有單向導電性,因此工作時需加上反向電壓(看好了,很重要,反向電壓)。無光照時,有很小的飽和反向漏電流,此時光敏管不導通。當光照時,飽和反向漏電流馬上增加,形成光電流,在一定的範圍内它随入射光強度的變化而增大。------百度抄寫
2、紅外線發射管
紅外發射管是由紅外發光二極管矩組成發光體,用紅外輻射效率高的材料(常用砷化镓)制成PN結,正向偏壓向PN結注入電流激發紅外光,其光譜功率分布為中心波長830~950nm。LED是英文Light Emitting Diode的簡稱,表現是正溫度系數,電流越大溫度越高,溫度越高電流越大,LED紅外燈的功率和電流大小有關,但正向電流超過最大額定值時,紅外燈發射功率反而下降。------百度抄寫
二、程序達到目的是把紅外發射對管擺放好了(D1和D2),中間沒有物體過時,什麼事情都不會發生,當有物體過去以後,就記1次數,點亮1個LED(D3到D7)燈,記滿5次就讓蜂鳴器(BUZ1)響1聲。
硬件
分解看清楚點1
分解看清楚點2
需要硬件清單:1、電池1.5V的4節搞個電池盒,能輸出5V左右,不要太大,可以使用充電電池,那個一節才1.3V,電壓太大就串二極管降下來
2、22PF瓷片電容2個
3、12MHZ晶振1個
4、10μF電解電容1個
5、AT89C51單片機1塊
6、面包闆(插杜邦線或者0.5平方電線)或者萬用闆(需焊接)
7、單片機程序下載器(淘寶買)
8、220歐姆電阻6個,1M歐姆電阻1個,1K歐姆電阻1個,S8050三極管2個,4.7K歐姆電阻3個,普通發光二極管5個,5V有源蜂鳴器1個
蜂鳴器有2種:分有源的和無源的,有源的給電平就能響,無源的要給脈沖才能響。本例使用有源蜂鳴器。
9、5mm 940nm紅外對管1對
原理:D1和D2之間沒東西時,D1發射紅外光被D2接收,D2導通,三極管Q1的基極B得到偏置電壓而導通,所以Q1的集電極C就會為低電平,導緻P1.0口被拉低,内部程序檢測不到異樣不會下一步動作。而當有東西經過紅外管的時候,紅外線被擋住,D2沒有接到紅外光,D2截止,導緻三極管基極B沒有電流過去,直接讓Q1截止,其集電極C一下就高電平了,随即P1.0拉成高電平,那麼内部程序就讓外設LED燈D3到D7點亮一盞。上面的事循環直到5盞燈全部點亮,蜂鳴器叫一聲,本次循環結束,全部燈滅,等待一下次紅外管被觸發。
注意:單片機40角VCC要接 5V,GND20角要接地
三、源碼程序
ORG 00H ;設置起始地址
Apple EQU P1.0 ;把Apple指向P1.0口,随便叫的,你起蔔娜娜也行
BUZZER EQU P2.7 ;把BUZZER指向P2.7口,容易理解
START:
CLR BUZZER ;清P2.7口,清零,為的是讓從R10下來的5V電直接進P2.7口,不去偏置激活Q2三極管,那麼蜂鳴器就不會響,這很好理解,仔細琢磨一下,電流總是流向比較順利的地方
CLR C ;進位C清零,這裡一會說
MOV A,#0FFH ;累加器ACC=FFH
CHECK: ;檢測有沒有物體過紅外對射管
JNB Apple, $ ;一直看P1.0口的狀态,原理中說過,P1.0口為高電平的話,證明有東西經過,那麼就可以執行下一句,如果P1.0口一直為低電平,就一直執行本語句
JB Apple, $ ;這句話就是确定東西過去了,确定P1.0為低電平的話,就執行下一句,如果擋住中間不過,P1.0為高電平,就一直執行本行
CLR C ;和下一句一塊說
RRC A ;這裡面的指令RRC有說法,看後面備注
MOV P0,A ;讓剛才解釋的A中的0在P0口跑動,低電平了。燈就被點亮,進位C循環回來本來是1,我把C清零在帶進A,那麼0000 0排過去了,造成燈一直亮
MOV R1,A ;存進R1進行比對
CJNE R1,#07H,CHECK ;5個燈都點亮就是0000 0111=07H,A第一次運行是01111111,第二次是0011 1111,第三次是0001 1111 第四次是0000 1111
CALL BEEP ;調蜂鳴器子程序,執行5次就來激活蜂鳴器
MOV P0,#0FFH ;滅燈
JMP START ;跳回循環
BEEP: ;發音程序段
SETB BUZZER ;開蜂鳴器
MOV R3, #20 ;這裡是延時不說了
D1:
MOV R4, #200
D2:
MOV R5, #248
DJNZ R5, $
DJNZ R4, D2
DJNZ R3, D1
RET
END ;結束
備注:指令RRC和進位标志位C、還有累加器A進行講解,先說進位标志位C,單片機裡面有個程序狀态字的特殊功能寄存器,叫PSW,1個字節,裡面有8位。
依次是最高位進位标志位C|輔助标志位AC|标志位F0|RS1|RS0|溢出标志位OV|不用位|奇偶标志位P,這個進位标志位C就是單片機執行加法時,如果有進位或借位,就C就被硬件置1,沒進位就是0。
累加器A是一個有8位的特殊功能寄存器,以後用到的地方很多,很重要,他與程序運行狀态無關,可以賦值,運算好多操作,相當于一個變量。
現在說下RRC A,它的意思是讓進位标志位C在8位A中向右移動一位,例如現在A中為11111111,是8個1,這時剛好C為0,那麼執行一次RRC A,就是C=0進入A的最左邊的最高位,原來的最高位1被0擠到次高位上去了,11111111→01111111。而原次高位的1又向右邊被擠一次,一個挨着一個被擠向右邊,最低位的1被擠出8人隊列,賦值給了C。就是這麼一個很無聊的過程。然後可以在執行一次RRC A,做這個幹什麼,就是讓0在A裡面跑動,實現挨個點LED燈,跳回程序看。
下次上C51程序。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!