7
+ 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 GND Re 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 反相器的目的: 89C 4 051的輸入電壓在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 下載 例題一 下列程式已燒錄在本套件附的89C4 051單晶片中 #include<at89 4 051.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.7V6V之間, 89C4051-24電源電壓是4.5V5.5V之間, 本自走車採用三顆電池, 4.5V, 因此建議 採用89C4 051-12 , 以防電池電壓不足. 創意自走車套件所附的89C4 051已燒錄 有例題1的範例程式. 反相器 單晶片範例--用Keil _ C控制自走車 89 c4 051-12 或STC12C5204 1 第9課 單 晶 片 程 式 控 制 曹齊平 www. letry . com. tw

第9課 單晶片程式控制 - 洛奇科技有限公司 · 例題8和例題6的程式一模一樣 例題8 如果紅外線偵測到物體, 馬達就會停 Do If P1.5 = 1 Then P1.3

  • 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

Letry ISP 線上燒錄器,插上麵包板可直接把程式燒進

單晶片STC12C5204 或 ATmega328P之中.

STC12C5204和89C4051相容,可執行Keil_C 或 BAScom

Atmega328 可執行Arduino的程式

可以用HTC手機透過藍芽搖控 用紅外線遙控器搖控

7