版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 物聯(lián)網(wǎng)課程</b></p><p><b> 實(shí)驗(yàn)設(shè)計(jì)</b></p><p> 課題名稱: 超聲波控制LED </p><p><b> 一、實(shí)驗(yàn)?zāi)康模?lt;/b></p><p> 通過(guò)對(duì)本課程的設(shè)計(jì)
2、,加深對(duì)“物聯(lián)網(wǎng)”概念的理解,能夠明確其光明前景和未來(lái)對(duì)我們的生活的重大意義;并學(xué)習(xí)和掌握基本的物聯(lián)網(wǎng)技術(shù)和相關(guān)的概念知識(shí)。</p><p><b> 二、實(shí)驗(yàn)內(nèi)容:</b></p><p> 將超聲波和LED燈兩個(gè)獨(dú)立實(shí)驗(yàn)結(jié)合起來(lái),利用超聲波來(lái)控制?。蹋牛牡拈W亮與熄滅</p><p><b> 三、實(shí)驗(yàn)說(shuō)明:</b>
3、;</p><p> 將兩個(gè)實(shí)驗(yàn)的初始化代碼寫(xiě)在一起,如果重名則要做必要的改寫(xiě),然后把超聲波的控制標(biāo)記寫(xiě)在LED控制代碼中的相應(yīng)位置,從而達(dá)到控制LED的目的,再添加對(duì)超聲波操作的代碼,從而實(shí)現(xiàn)對(duì)LED的操作;相關(guān)問(wèn)題將在代碼中給于注釋。</p><p><b> 實(shí)驗(yàn)代碼:</b></p><p> #include <c8051
4、f120.h> // SFR declarations</p><p> #include <stdio.h> </p><p> #include <intrins.h></p><p> #define TIMER_TICKS_PER_MS SYSCLK
5、/TIMER_PRESCALER/1000</p><p> #define AUX1 TIMER_TICKS_PER_MS</p><p> #define AUX2 -AUX1</p><p> #define BAUDRATE 115200 // Baud rate of UART in bps</p&
6、gt;<p> #define SYSCLK 49000000 // Output of PLL derived from (INTCLK*2)</p><p> #define SAMPLE_DELAY 200 // Delay in ms before taking sample</p><p> #defi
7、ne TIMER_PRESCALER 500 // B</p><p> unsigned int count = 0;</p><p> unsigned int count_s = 0;</p><p> unsigned int num= 0; </p><p> float distan= 0;</
8、p><p> int x = 0;</p><p> #define LED_TOGGLE_RATE 1 /</p><p> #define TIMER0_RELOAD_HIGH AUX2 // Reload value for Timer0 high byte</p><p> sfr16 RCAP
9、2 = 0xca; // Timer2 capture/reload</p><p> sfr16 RCAP3 = 0xca; // Timer3 capture/reload</p><p> sfr16 RCAP4 = 0xca; </p><p> sfr16 TMR2
10、 = 0xcc; // Timer2</p><p> sfr16 TMR3 = 0xcc; // Timer3</p><p> sfr16 TMR4 = 0xcc; </p><p> sbit LED = P0^3; // L
11、ED='1' means ONsbit SW1 = P3^7; // SW1='0' means switch pressed</p><p> sbit LED1 = P0^2; // LED1 ='1' means ON</p><p> sbit LED2
12、 = P0^4; // LED1 ='1' means ON</p><p> sbit SW2 = P0^5; </p><p> sbit uts_tx=P2^3;</p><p> sbit ctrl1 = P1^2;</p><p> sbit ctrl2
13、 = P1^3;</p><p> sbit ctrl3 = P1^4;</p><p> sbit ctrl4 = P1^5;</p><p> void Ext_Interrupt_Init (void); </p><p> void OSCILLATOR_Init (void); </
14、p><p> void PORT_Init (void);</p><p> void Comparator_Init(void);</p><p> void UART1_Init (void);</p><p> void Timer3_Init(void) ;</p><p> void Timer4_In
15、it(void) ;</p><p> void Wait_MS (unsigned int ms);</p><p> void Port_Init (void); // Port initialization routine</p><p> void Timer0_Init (void); </p><
16、;p> unsigned char result;</p><p> void main (void)</p><p><b> {</b></p><p> WDTCN = 0xde; // Disable watchdog timer 關(guān)閉看門(mén)狗</p><p&
17、gt; WDTCN = 0xad;</p><p> Timer0_Init (); // Initialize the Timer0</p><p> Port_Init (); // Init Ports</p><p> OSCILLATOR_Init ();
18、 // Initialize oscillator</p><p> PORT_Init ();</p><p> Comparator_Init(); // Initialize crossbar and GPIO</p><p> UART1_Init ();
19、 // Initialize UART1</p><p> Timer3_Init();</p><p> Timer4_Init();</p><p> EA = 1; // Enable global interrupts</p><p> EIE1 = 0x10;
20、</p><p> while (1) </p><p><b> {</b></p><p> EIE1 = 0x00; </p><p> SFRPAGE = TMR3_PAGE; </p><p> TMR3
21、CN = 0x04;</p><p> SFRPAGE = TMR4_PAGE;</p><p> TMR4CN = 0x04;</p><p> while(count_s !=32);</p><p> SFRPAGE = TMR3_PAGE; </p><p> T
22、MR3CN = 0x00;</p><p> count_s = 0;</p><p> EIE1 = 0x10; </p><p> Wait_MS(10);</p><p> if(x == 1) </p><p><b> {</b></p><p>
23、 SFRPAGE = UART1_PAGE;</p><p> printf("distan: %f cm\n",distan);</p><p> if(distan<30) //設(shè)置30cm為超聲波控制led燈閃亮與熄滅的條件,但 距離小于30時(shí),led1和led2都亮,大于30時(shí),都不亮 </p><p>&
24、lt;b> {</b></p><p><b> LED1 = 1;</b></p><p><b> LED2 = 1;</b></p><p><b> } </b></p><p><b> }</b><
25、/p><p> Wait_MS(SAMPLE_DELAY); // Wait 500 milliseconds before taking </p><p><b> x = 0;</b></p><p> count = 0; // another sam
26、ple </p><p><b> } </b></p><p><b> }</b></p><p> void Port_Init (void)</p><p><b> {</b></p><p> char SFRPAGE_SA
27、VE = SFRPAGE; // Save Current SFR page</p><p> SFRPAGE = CONFIG_PAGE; // Set SFR page</p><p> XBR2 = 0x40; // Enable crossbar</p><p> P
28、0MDOUT = 0x2C; // Set P1.6(LED) to push-pull</p><p> P2MDOUT &=~0x1;</p><p><b> result=1;</b></p><p> P2MDOUT |=0x2;</p><p> SFR
29、PAGE = SFRPAGE_SAVE; // Restore SFR page</p><p><b> }</b></p><p> //-----------------------------------------------------------------------------</p><p>
30、// Timer0_Init</p><p> //-----------------------------------------------------------------------------</p><p><b> //</b></p><p> // Return Value : None</p><
31、;p> // Parameters : None</p><p><b> //</b></p><p> // This function configures the Timer0 as a 8-bit timer with reload, interrupt</p><p> // enabled.</p>
32、<p> // Using the internal osc. at 24.5MHz with a prescaler of 1:8 and reloading</p><p> // TL0 register with TH0.</p><p><b> //</b></p><p> // Note: The Timer
33、0 uses a 1:48 prescaler. If this setting changes, the</p><p> // TIMER_PRESCALER constant must also be changed.</p><p> //---------------------------------------------------------------------
34、--------</p><p> void Timer0_Init(void)</p><p><b> {</b></p><p> char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page</p><p> SFRPAGE = TIMER01_
35、PAGE; // Set SFR page</p><p> TH0 = TIMER0_RELOAD_HIGH; // Init Timer0 High register</p><p> TL0 = TH0; // Set the intial Timer0 value</p>
36、<p> TMOD = 0x02; // Timer0 in 8-bit reload mode</p><p> CKCON = 0x02; // Timer0 uses a 1:48 prescaler</p><p> ET0=1;
37、 // Timer0 interrupt enabled</p><p> TCON = 0x10; // Timer0 ON</p><p> SFRPAGE = SFRPAGE_SAVE; // Restore SFR page</p><p><b> }<
38、/b></p><p> void OSCILLATOR_Init (void)</p><p><b> {</b></p><p> int loop; // Software timer</p><p> char SFRPAGE_SAVE = SF
39、RPAGE; // Save Current SFR page</p><p> SFRPAGE = CONFIG_PAGE; // Set SFR page</p><p> OSCICN = 0x83; // Set internal oscillator to run 使用內(nèi)部晶振不分頻<
40、/p><p> // at its maximum frequency</p><p> CLKSEL = 0x00; // Select the internal osc. as</p><p> // the SYSCLK source</p><p> //Turn on the PLL a
41、nd increase the system clock by a factor of M/N = 2</p><p> SFRPAGE = CONFIG_PAGE;</p><p> PLL0CN = 0x00; // Set internal osc. as PLL source</p><p> SFRPAGE
42、= LEGACY_PAGE;</p><p> FLSCL = 0x10; // Set FLASH read time for 50MHz clk</p><p> // or less</p><p> SFRPAGE = CONFIG_PAGE;</p><p> PLL0CN |=
43、0x01; // Enable Power to PLL</p><p> PLL0DIV = 0x01; // Set Pre-divide value to N (N = 1)</p><p> PLL0FLT = 0x01; // Set the PLL fil
44、ter register for</p><p> // a reference clock from 19 - 30 MHz</p><p> // and an output clock from 45 - 80 MHz</p><p> PLL0MUL = 0x02; // Multiply SYSCLK by M
45、 (M = 2)</p><p> for (loop=0; loop < 256; loop++); // Wait at least 5us</p><p> PLL0CN |= 0x02; // Enable the PLL</p><p> while(!(PLL0CN & 0x10));
46、 // Wait until PLL frequency is locked</p><p> CLKSEL = 0x02; // Select PLL as SYSCLK source</p><p> SFRPAGE = SFRPAGE_SAVE; // Restore SFR page</p&
47、gt;<p><b> }</b></p><p> void PORT_Init (void)</p><p><b> {</b></p><p> char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page</p>&l
48、t;p> SFRPAGE = CONFIG_PAGE; // set SFR page</p><p> P1MDIN = 0x03;</p><p> XBR0 = 0x17;</p><p> XBR1 = 0x04;</p><p> XBR2 = 0x44;
49、 </p><p> P0MDOUT |= 0x01; // Set TX1 pin to push-pull</p><p> P1MDOUT |= 0x40; </p><p> P2MDOUT |= 0x08; </p><p>
50、 SFRPAGE = SFRPAGE_SAVE; // Restore SFR page</p><p><b> }</b></p><p> void Comparator_Init()</p><p><b> {</b></p><p> int i = 0;
51、</p><p> char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page</p><p> SFRPAGE = CPT0_PAGE;</p><p> CPT0CN = 0x80;</p><p> for (i = 0; i < 60; i++); //
52、Wait 20us for initialization</p><p> CPT0CN &= ~0x30;</p><p> CPT0MD = 0x12;</p><p> SFRPAGE = SFRPAGE_SAVE; // Restore SFR page</p><p><b> }&
53、lt;/b></p><p> void UART1_Init (void)</p><p><b> {</b></p><p> char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page</p><p> SFRPAGE = UART1_P
54、AGE;</p><p> SCON1 = 0x10; // SCON1: mode 0, 8-bit UART, enable RX</p><p> SFRPAGE = TIMER01_PAGE;</p><p> TMOD &= ~0xF0;</p><p> TMOD
55、 |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload</p><p> if (SYSCLK/BAUDRATE/2/256 < 1) </p><p><b> {</b></p><p> TH1 = -(SYSCLK/BAUDRATE/2);&l
56、t;/p><p> CKCON |= 0x10; // T1M = 1; SCA1:0 = xx</p><p><b> } </b></p><p> else if (SYSCLK/BAUDRATE/2/256 < 4) </p><p><b> {<
57、/b></p><p> TH1 = -(SYSCLK/BAUDRATE/2/4);</p><p> CKCON &= ~0x13; // Clear all T1 related bits</p><p> CKCON |= 0x01; // T1M = 0; SCA1:0
58、 = 01</p><p><b> } </b></p><p> else if (SYSCLK/BAUDRATE/2/256 < 12) </p><p><b> {</b></p><p> TH1 = -(SYSCLK/BAUDRATE/2/12);</p>
59、<p> CKCON &= ~0x13; // T1M = 0; SCA1:0 = 00</p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p><
60、p> TH1 = -(SYSCLK/BAUDRATE/2/48);</p><p> CKCON &= ~0x13; // Clear all T1 related bits</p><p> CKCON |= 0x02; // T1M = 0; SCA1:0 = 10</p><
61、p><b> }</b></p><p> TL1 = TH1; // Initialize Timer1</p><p> TR1 = 1; // Start Timer1</p><p> SFRPAGE = UART1_P
62、AGE;</p><p> TI1 = 1; // Indicate TX1 ready</p><p> SFRPAGE = SFRPAGE_SAVE; // Restore SFR page</p><p><b> }</b></p><
63、;p> void Timer3_Init(void)</p><p><b> {</b></p><p> char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page</p><p> SFRPAGE = TMR3_PAGE; // Se
64、t SFR page</p><p> TMR3CN = 0x00;</p><p> TMR3CF = 0x08;</p><p> RCAP3L = 0x9C;</p><p> RCAP3H = 0xFD; </p><p&g
65、t; TMR3 = RCAP3; </p><p> SFRPAGE = 0xe7; </p><p> EIE2 |= 0x01;</p><p> SFRPAGE = SFRPAGE_SAVE; </p><p>&l
66、t;b> }</b></p><p> void Timer4_Init(void)</p><p><b> {</b></p><p> char SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page</p><p> SFRPAG
67、E = TMR4_PAGE;</p><p> TMR4CN = 0x00;</p><p> TMR4CF = 0x0A;</p><p> RCAP4L = 0x37;</p><p> RCAP4H = 0xFB; </p><
68、;p> TMR4 = RCAP4; </p><p> SFRPAGE = 0xe7; </p><p> EIE2 |= 0x04;</p><p> SFRPAGE = SFRPAGE_SAVE; </p><p&g
69、t;<b> }</b></p><p> void Timer3_ISR (void) interrupt 14</p><p><b> {</b></p><p> uts_tx = ~uts_tx ; </p><p> count_s++;</p><p>
70、;<b> TF3 = 0; </b></p><p><b> } </b></p><p> void Timer4_ISR (void) interrupt 16</p><p><b> {</b></p><p><b> count++;<
71、/b></p><p><b> TF4 = 0;</b></p><p><b> } </b></p><p> void CPT0_ISR (void) interrupt 10</p><p><b> {</b></p><p>
72、 SFRPAGE = CPT0_PAGE; </p><p> CP0FIF = 0;</p><p> SFRPAGE = TMR4_PAGE;</p><p> TMR4CN = 0x00; </p><p><b> x = 1;</b></p><p> dist
73、an = 0.85*count/2; //計(jì)算距離</p><p> if((distan>200)||(distan<5))</p><p><b> {</b></p><p><b> x = 0; </b></p><p> count = 0;
74、 </p><p><b> }</b></p><p><b> }</b></p><p> void Wait_MS(unsigned int ms)</p><p><b> {</b></p><p> char
75、SFRPAGE_SAVE = SFRPAGE; // Save Current SFR page</p><p> SFRPAGE = TMR2_PAGE;</p><p> TMR2CN = 0x00; // Stop Timer3; Clear TF3;</p><p> TMR2CF = 0x00;
76、 // use SYSCLK/12 as timebase</p><p> RCAP2 = -(SYSCLK/1000/12); // Timer 2 overflows at 1 kHz</p><p> TMR2 = RCAP2;</p><p> ET2 = 0;
77、 // Disable Timer 2 interrupts</p><p> TR2 = 1; // Start Timer 2</p><p><b> while(ms)</b></p><p><b> {</b></p>
78、;<p> TF2 = 0; // Clear flag to initialize</p><p> while(!TF2); // Wait until timer overflows</p><p> ms--; // De
79、crement ms</p><p><b> }</b></p><p> TR2 = 0; // Stop Timer 2</p><p> SFRPAGE = SFRPAGE_SAVE; // Restore SFRPAGE</p><
80、p><b> }</b></p><p> //-----------------------------------------------------------------------------</p><p> // End Of File</p><p> //-----------------------------
81、------------------------------------------------</p><p><b> 實(shí)驗(yàn)現(xiàn)象</b></p><p><b> 總結(jié):</b></p><p> 通過(guò)這次實(shí)驗(yàn)我們更加理解了超聲波和LED燈實(shí)驗(yàn)原理,提升了我們自主動(dòng)手實(shí)驗(yàn)的能力及自主思考的能力,更好的把理論轉(zhuǎn)化為
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 超聲波測(cè)距課程設(shè)計(jì)
- 超聲波測(cè)距課程設(shè)計(jì)
- 超聲波測(cè)距課程設(shè)計(jì)
- 超聲波測(cè)距課程設(shè)計(jì) (2)
- 【課程設(shè)計(jì)】超聲波測(cè)距系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)--超聲波倒車?yán)走_(dá)測(cè)距
- 超聲波測(cè)距儀課程設(shè)計(jì)
- 超聲波測(cè)距儀課程設(shè)計(jì)
- 超聲波測(cè)距器課程設(shè)計(jì)
- 機(jī)電控制課程設(shè)計(jì)--超聲波清洗機(jī)
- 單片機(jī)課程設(shè)計(jì)--超聲波測(cè)距
- 超聲波測(cè)距儀課程設(shè)計(jì) (2)
- 單片機(jī)課程設(shè)計(jì)-超聲波測(cè)距
- 單片機(jī)課程設(shè)計(jì)-超聲波測(cè)距
- 超聲波測(cè)距課程設(shè)計(jì)說(shuō)明書(shū)
- 模電課程設(shè)計(jì)-超聲波測(cè)距儀
- 單片機(jī)課程設(shè)計(jì)--超聲波測(cè)距系統(tǒng)設(shè)計(jì)
- 課程設(shè)計(jì)報(bào)告--超聲波測(cè)距離器的設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)--超聲波測(cè)距儀
- 單片機(jī)課程設(shè)計(jì)——超聲波避障小車
評(píng)論
0/150
提交評(píng)論