www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]這是在上一個的基礎(chǔ)上通過按鍵發(fā)送4種不同命令來控制接收端的LED燈亮的改進版,這里俺把按鍵發(fā)命令給去掉,然后加入一個串口通信的功能,PC通過串口給發(fā)送端發(fā)送命令,然后發(fā)送端通過無線將命令發(fā)給接收端來實現(xiàn)控制,這里接收端和上一個例程中的一樣,只是在發(fā)送端的代碼里去除了按鍵控制,變成了串口控制。

這是在上一個的基礎(chǔ)上通過按鍵發(fā)送4種不同命令來控制接收端的LED燈亮的改進版,這里俺把按鍵發(fā)命令給去掉,然后加入一個串口通信的功能,PC通過串口給發(fā)送端發(fā)送命令,然后發(fā)送端通過無線將命令發(fā)給接收端來實現(xiàn)控制,這里接收端和上一個例程中的一樣,只是在發(fā)送端的代碼里去除了按鍵控制,變成了串口控制。

 

>_

 

>_

由于這里的接收端的代碼和上一個一樣,所以不做介紹(惜墨如金呀,哈哈~~),下面就發(fā)送端進行介紹:

1 /*------------------------------------------------

2 定義UART_Init函數(shù)

3 ------------------------------------------------*/

4 void UART_Init(void)

5 {

6 SCON = 0x50; // 設(shè)定串行口工作方式,8位數(shù)據(jù)位,允許接收

7 T2CON = 0x34; //設(shè)置定時器2,作為波特率發(fā)生器

8 RCAP2L = 0XDC; //9600波特率的低8位

9 RCAP2H = 0XFF; //9600波特率的高8位

10 ES = 1; //允許串口中斷

11 EA = 1; //允許總中斷

12 }

這里是串口初始化函數(shù),采用定時器2作為波特率發(fā)生器,允許串口中斷(我采用發(fā)送就是循環(huán)發(fā)送策略,而接受通過觸發(fā)中斷來改變標志符,在主函數(shù)里再判斷標志符來判斷是否收到數(shù)據(jù),預(yù)知更多詳情,請繼續(xù)瀏覽,哈哈)

1 /*------------------------------------------------

2 定義UART_Send_Byte函數(shù)

3 ------------------------------------------------*/

4 void UART_Send_Byte(uchar byte)

5 {

6 SBUF=byte; //緩沖區(qū)裝載要發(fā)送的字節(jié)數(shù)據(jù)

7 while(TI==0); //等待發(fā)送完畢,TI標志位會置1

8 TI=0; //清零發(fā)送完成標志位

9 }

這是我定義的一個發(fā)送一個字符的串口發(fā)送函數(shù),大致意思就是把待發(fā)送數(shù)據(jù)給SBUF,然后等待標志位TI為1,即發(fā)送完畢,最后別忘清0!

1 /*------------------------------------------------

2 串口接收中斷服務(wù)程序

3 ------------------------------------------------*/

4 void UART(void) interrupt 4

5 {

6 if(RI) //檢測接收完成標志位置1

7 {

8 RI=0; //清零接收完成標志位

9 a=SBUF; //讀取接收到的數(shù)據(jù)

10 uart_flag = 1; //中斷標志位置1

11 }

12 }

上一個函數(shù)負責發(fā)送,這一個是負責接收的函數(shù),對的,這里采用的是串口接收中斷,當觸發(fā)串口中斷時,判斷是否RI為1,即接收完成與否,如果接收完成就把緩沖SBUF中的數(shù)據(jù)給全局變量a,然后置接收標志uart_flag為1,并RI清0.

1 /*------------------------------------------------

2 main函數(shù)

3 ------------------------------------------------*/

4 void main()

5 {

6 LED6=1; //初始燈6熄滅

7 uart_flag=0; //串口標志初始為0

8 init_NRF24L01(); //初始化24L01

9 UART_Init(); //初始化串口

10

11 while(NRF24L01_Check()) //檢查不到24l01則報警

12 {

13 beep=0;

14 delay_ms(200);

15 beep=1;

16 delay_ms(200);

17 }

18 while(1)

19 {

20 RX_Mode(); //接收模式

21 while(!nRF24L01_RxPacket(Rx_Buf)) //等待接收數(shù)據(jù),返回1則接收到數(shù)據(jù),在等待接收數(shù)據(jù)期間,可以隨時變成發(fā)送模式

22 {

23 if(uart_flag==1) //當串口接受標志為1表示有數(shù)據(jù)過來

24 {

25 ES=0; //關(guān)串口中斷

26

27 TX_Mode(); //發(fā)送模式

28 Tx_Buf1[0]=a-'0'; //將串口數(shù)據(jù)給發(fā)送緩沖區(qū)

29 nRF24L01_TxPacket(Tx_Buf1); //發(fā)送命令數(shù)據(jù)24L01

30 UART_Send_Byte('O'); //向串口發(fā)送已經(jīng)傳送

31 UART_Send_Byte('K');

32 UART_Send_Byte(':');

33 UART_Send_Byte(a);

34 UART_Send_Byte('\n');

35 LED6=0;

36 delay_ms(300);

37 LED6=1;

38 delay_ms(300); //發(fā)送后LED1閃一下

39

40 ES=1; //允許串口中斷

41 uart_flag=0; //中斷標志位置0

42 break; //退出最近的循環(huán),從而變回接收模式,這句關(guān)鍵

43 }

44 }

45 if(Rx_Buf[0]==1) //若接收到對應(yīng)的數(shù)據(jù)則實現(xiàn)對應(yīng)功能

46 {

47 Rx_Buf[0]=0; //清空數(shù)據(jù)

48 LED6=0;

49 delay_ms(300);

50 LED6=1;

51 delay_ms(300); //接收到數(shù)據(jù) 后閃爍

52 }

53 }

54 }

主函數(shù)中先初始化串口和24L01,然后檢測24L01是否存在,若不存在就響鈴,接著進入主循環(huán),設(shè)置24L01為接收模式,循環(huán)檢測是否收到數(shù)據(jù),如果收到數(shù)據(jù)直接跳到第45行對信息處理作出相應(yīng)動作,如果沒有收到數(shù)據(jù)就一直執(zhí)行循環(huán)體內(nèi)的代碼,循環(huán)體內(nèi)不斷檢查uart_flag是否為1,即是否收到了數(shù)據(jù),當收到了數(shù)據(jù)就關(guān)閉串口中斷,將收到的數(shù)據(jù)發(fā)送出去,并回復(fù)PC端,并使LED6閃爍一次?!綪C端為1,2,3,4】

>_

l 如果24L01用reg51那么兩個設(shè)備都要用reg51,如果用reg52就都得用reg52!

l PC通過串口發(fā)送給單片機命令[相當于協(xié)調(diào)器],單片機把命令通過24L01無線發(fā)送給另一個單片機,另一個單片機控制燈LED1,LED2,LED3,LED4閃爍。

 

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉