Upload
others
View
8
Download
0
Embed Size (px)
Citation preview
+4.5V
B
C
E 10K
+1.5V
R4
黑線 左輪
紅線
+4.5V+4.5V
R1 R10
紅外
線發
射器
紅外
線接
收器
Vcc 17 16 15 14 13 12 11 10 37
Set 30 31 X2 X1 32 33 34 35 GNDRe
89C4051-12
+4.5V
+4.5V+4.5V
R1 R10
+4.5V
B
C
E 10K
+1.5V
R4
黑線 右輪
紅線
朝向右前方
朝向左前方
+4.5V
100μF
10KΩ
22PF
石英晶體
R1 150ΩR10 6.2MΩ
例題一 閃避前方的障礙物
假若右前方有障礙物, 則左馬達反轉, 左輪後退, 玩具車向左轉 .
假若左前方有障礙物, 則右馬達反轉, 右輪後退, 玩具車向右轉
電路說明:1 反相器的目的: 89C4051的輸入電壓在1.8V (0.2 * Vcc+0.9) 以上為1 , 而 CMOS 反相器在2.25V(0.5*Vcc) 以上為1 , 比較適合本教材的感測器電路.2 10KΩ電阻及100μF電容器目的: 在電源開啟時, 讓硬體電路穩定後, 再啟動軟體程式3 本電路在創意自走車所附的兩個小麵包板上做出來, 參考左頁圖片.4 如果要走地面黑色路線 , 請把紅外線感測器朝向地 面, 馬達電線的正負端子互換位置 , 程式不必改變. ,R1可試改用300Ω5 Keil公司網站提供免費下載的試用版編譯程式,
請上https://www.keil.com 下載
例題一 下列程式已燒錄在本套件附的89C4051單晶片中
#include<at894051.h> (設定暫存器對應的記憶位址)main(){ while (1) (讓程式反覆執行) { if (P1_2==1) (如果右前方有障礙物) P1_3=1; (左輪反轉) if (P1_2==0) (如果右前方無障礙物) P1_3=0; (左輪前進) if (P1_4==1) (如果左前方有障礙物) P1_5=1; (右輪反轉) if (P1_4==0) (如果左前方無障礙物) P1_5=0; (右輪前進) }}
89C4051-12的電源電壓是2.7V至6V之間,
89C4051-24電源電壓是4.5V至5.5V之間,
本自走車採用三顆電池, 4.5V, 因此建議
採用89C4051-12 , 以防電池電壓不足.
創意自走車套件所附的89C4051已燒錄
有例題1的範例程式.
反相器
單晶片範例--用Keil_C控制自走車 89c4051-12 或STC12C5204
1
第9課 單晶片程式控制
曹齊平 www. letry.com. tw
例題二 遇障礙物先後退再轉彎 (電路同例一)
假若右前方有障礙物, 則車子先後退, 再向左轉 .假若左前方有障礙物, 則向右轉 (不後退)
#include<at894051.h> (暫存器對應的記憶位址)void delay(unsigned int dly);main(){ while (1) (讓程式反覆執行) { if (P1_2==1) (如果右前方有障礙物) { P1_3=1; (左輪反轉) P1_5=1; (右輪反轉) delay(100); (讓車子後退一段時間) P1_5=0; (右輪前進,車子開始向左轉) delay(40); (讓車子轉彎一段時間) } if (P1_2==0) (如果右前方無障礙物) P1_3=0; (左輪前進) delay(1); (等一段時間, 讓干擾消失) if (P1_4==1) (如果左前方有障礙物) P1_5=1; (右輪反轉) delay(1); (等一段時間,讓干擾消失) if (P1_4==0) (如果左前方無障礙物) P1_5=0; (右輪前進) delay(1); (等一段時間,讓干擾消失) }}
void delay(unsigned int dly) (延遲時間副程式) { dly=dly*300; while (dly>0) dly--; }
例題三 遇障礙物搖擺五次(電路同例一) 若右前方有障礙物, 則車子左右搖擺五次,再轉彎前進.若左前方有障礙物, 則向右轉 (不搖擺)
#include<at894051.h>void delay(unsigned int dly);unsigned int aa;main(){ while (1) { if (P1_2==1) { P1_3=1; P1_5=1; delay(1); for (aa=1;aa<=5;aa=aa+1) { P1_3=1; P1_5=0; delay(40); P1_3=0; P1_5=1; delay(40); } P1_5=0; delay(100); } if (P1_2==0) P1_3=0; delay(1); if (P1_4==1) P1_5=1; delay(1); if (P1_4==0) P1_5=0; delay(1); }}
void delay(unsigned int dly) { dly=dly*300; while (dly>0) dly--; }
+4.5V
B
C
E 10K
+1.5V
R4
黑線 左輪
紅線
+4.5V+4.5V
R1 R10
紅外
線發
射器
紅外
線接
收器
Vcc 17 16 15 14 13 12 11 10 37
Set 30 31 X2 X1 32 33 34 35 GNDRe
89C4051-12
+4.5V
+4.5V+4.5V
R1 R10
+4.5V
B
C
E 10K
+1.5V
R4
黑線 右輪
紅線
朝向右前方
朝向左前方
+4.5V
100μF
10KΩ
22PF
石英晶體
R1 150ΩR10 6.2MΩ
反相器
2
Vcc 17 16 15 14 13 12 11 10 37
Set 30 31 X2 X1 32 33 34 35 GNDRe
89C4051-12
+4.5V
+4.5V
100μF10KΩ
22PF
石英晶體
+4.5V
例題 1LED亮2秒
P1.3 = 0Wait 2P1.3 = 1End
例題 2LED亮1秒, 滅1秒...不停的閃爍
Do P1.3 = 0 Wait 1 P1.3 = 1 Wait 1LoopEnd
例題 3 LED亮0.2秒, 滅0.2秒,….不停的閃爍
Do P1.3 = 0 Waitmse 200 P1.3 = 1 Waitmse 200 Loop End
例題 4 LED亮..滅..亮..滅.. (共5次)
Dim N As ByteFor N = 1 To 5 P1.3 = 0 Wait 1 P1.3 = 1 Wait 1 Next NEnd
例題 5 LED亮..滅..亮..滅.. (共5次), 第一次亮1秒, 第二次亮2秒, 第三次亮3秒
Dim N As ByteFor N = 1 To 5 P1.3 = 0 Wait N P1.3 = 1 Wait 1 Next NEnd
以下程式是根據Bascom的Basic語法所寫,
Bascom 是MCS-Electronic 公司所
開發的Basic 編譯軟體
MCS公司提供Demo試用版, 可免費下載,
試用版編譯後的機器碼大小限制在2K之內可搜尋下列關鍵字, 找到網站下載試用版及使用手冊bascom-8051 demo download
以下例題都可用Demo版編譯
用BASIC 語言寫程式控制89C4051 或STC12C5204
3
曹齊平 www. letry.com. tw
Vcc 17 16 15 14 13 12 11 10 37
Set 30 31 X2 X1 32 33 34 35 GNDRe
89C4051-12
+4.5V
+4.5V
100μF10KΩ
22PF
石英晶體
+4.5V
紅外
線發
射器
紅外
線接
收器
+4.5V+4.5V
R1 R10反相器
Vcc 17 16 15 14 13 12 11 10 37
Set 30 31 X2 X1 32 33 34 35 GNDRe
89C4051-12
+4.5V
+4.5V
100μF10KΩ
22PF
石英晶體
紅外
線發
射器
紅外
線接
收器
+4.5V+4.5V
R1 R10反相器
+4.5V
B
C
E
+1.5V
R4
Re
+4.5V
100μF
+4.5V+4.5V
R10反相器
+4.5V
B
C
E
+1.5V
R4
例題6 如果紅外線偵測到物體, LED就會亮Do If P1.5 = 1 Then P1.3 = 0 Else P1.3 = 1 End IfLoopEnd
例題8和例題6的程式一模一樣
例題8 如果紅外線偵測到物體, 馬達就會停
Do If P1.5 = 1 Then P1.3 = 0 Else P1.3 = 1 End IfLoopEnd
瞭解了這8個範例後, 你應該可以自己設計出更多更有創意的程式了
例題7 LED不停地閃爍, 直到紅外線 偵測到物體, 就不再閃爍了Do P1.3 = 0 Wait 1 P1.3 = 1 Wait 1 Loop Until P1.5 = 1 End
4
+4.5V
B
C
E 10K
+1.5V
R4
黑線 左輪
紅線
+4.5V+4.5V
R1 R10
紅外
線發
射器
紅外
線接
收器
Vcc 17 16 15 14 13 12 11 10 37
Set 30 31 X2 X1 32 33 34 35 GNDRe
89C4051-12
+4.5V
+4.5V+4.5V
R1 R10
+4.5V
B
C
E 10K
+1.5V
R4
黑線 右輪
紅線
朝向右前方
朝向左前方
+4.5V
100μF10KΩ
22PF
石英晶體
R1 150ΩR10 6.2MΩ
反相器
例題9 閃避前方的障礙物(搭配上圖電路)
如果右紅外線偵測到物體,左馬達就會反轉
如果左紅外線偵測到物體,右馬達就會反轉
Do
If P1.2 = 1 Then
P1.3 = 1 Else
P1.3 = 0 End If
If P1.4 = 1 Then
P1.5 = 1 Else
P1.5 = 0 End If
Loop
End
例題10 遇障礙物, 先後退再轉彎
(搭配上圖的電路) Do
If P1.2 = 1 Then
P1.3 = 1
P1.5 = 1
Wait 2
P1.5 = 0
Wait 1
P1.3 = 0
End If
If P1.4 = 1 Then
P1.3= 1
P1.5 = 1
Wait 2
P1.3 = 0
Wait 1
P1.5 = 0 End If
Loop
End
用BASIC語言控制自走車
5
+4.5V
B
C
E 10K
+1.5V
R4
+4.5V+4.5V
R1 R10
B7 B6 B5 B4
PIC16F628A
+4.5V
+4.5V+4.5V
R1 R10
+4.5V
10KΩ
22PF
R1 150ΩR10 6.2MΩ
MCLR
+4.5V
IR IR
+1.5V
define osc 4
trisb=%10010000
n var byte
aaa:
if portb.7=0 then
high portb.5
high portb.6
pause 1000
low portb.5
pause 500
else
low portb.6
endif
if portb.4=0 then
high portb.5
high portb.6
pause 1500
low portb.5
for n=1 to 5
toggle portb.5
toggle portb.6
pause 500
next n
else
low portb.5
low portb.6
endif
goto aaa
end
1 2
用 PIC16F628A 及 PICbasic 控制科學魔法車
www.letry.com.tw
crystal
6
如果 IR1偵測到物體就先後退一秒再轉彎
如果 IR2偵測到物體就先後退1.5秒然後搖擺五次再轉彎
曹齊平 www. letry.com. tw