找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

帖子
查看: 5842|回復(fù): 0
收起左側(cè)

CC2530紅外對(duì)管計(jì)數(shù)器驅(qū)動(dòng)程序與使用教程

[復(fù)制鏈接]
ID:244570 發(fā)表于 2017-11-1 22:45 | 顯示全部樓層 |閱讀模式
1.實(shí)驗(yàn)?zāi)康?br /> 28.紅外對(duì)管計(jì)數(shù)器

1) 通過(guò)實(shí)驗(yàn)掌握CC2530芯片 GPIO 的配置方法
2) 掌握紅外對(duì)管計(jì)數(shù)器的使用
2.實(shí)驗(yàn)設(shè)備
  硬件:PC 機(jī)        一臺(tái) EB2530(底板、核心板、仿真器、USB線(xiàn)) 一套 紅外對(duì)管一個(gè)  杜邦線(xiàn) 三條
  軟件:2000/XP/win7 系統(tǒng),IAR 8.10 集成開(kāi)發(fā)環(huán)境,串口助手


3.實(shí)驗(yàn)相關(guān)電路圖




其它型號(hào)也行的,只是講他的原理,自己購(gòu)買(mǎi)請(qǐng)注意電壓就行。
【名稱(chēng)】E18-D50NK

【描述】這是一種集發(fā)射與接收于一體的光電傳感器。檢測(cè)距離可以根據(jù)要求進(jìn)行調(diào)節(jié)。該傳感 器具有探測(cè)距離遠(yuǎn)、受可見(jiàn)光干擾小、價(jià)格便宜、易于裝配、使用方便等特點(diǎn),可以廣泛應(yīng)用于機(jī)器 人避障、流水線(xiàn)計(jì)件等眾多自動(dòng)化產(chǎn)品。

光電式傳感器(光電開(kāi)關(guān))NPN 常開(kāi) 型號(hào):E18-D50NK。




1、輸出電流 DC/SCR/繼電器 Control output:100mA/5V 供電
2、消耗電流 DC<25mA
3、響應(yīng)時(shí)間 <2ms
4、指向角:≤15°,有效距離 3-50CM 可調(diào)
5、檢測(cè)物體:透明或不透明體
6、工作環(huán)境溫度:-25℃~+55℃
7、標(biāo)準(zhǔn)檢測(cè)物體:太陽(yáng)光 10000LX 以下 白熾燈 3000LX 以下
8、外殼材料:塑料

電氣特性:              U:5VDC              I:100mA              Sn:3-50CM

尺寸:              直徑:17MM              傳感器長(zhǎng)度:45MM              引線(xiàn)長(zhǎng)度:45CM 應(yīng)用案例:

1、生產(chǎn)線(xiàn)貨物自動(dòng)計(jì)數(shù)設(shè)備              2、多功能提醒器              3、走迷宮機(jī)器人

【注意事項(xiàng)】為保護(hù)動(dòng)作的可靠和壽命長(zhǎng),請(qǐng)避免有關(guān)規(guī)定以外的溫度外界(戶(hù)外)條件下,接近傳感器 雖為耐水結(jié) 構(gòu),若裝上罩使用,勿使水和水容性切削油等淋到,則可更好地提高可靠性及壽命。還請(qǐng) 避免在有化學(xué)藥劑,特別是在強(qiáng)堿、酸、硝酸、銘酸、熱濃硫酸等氣候中使用。

紅色:接 4.5-5V 電源高電平 黃色:接單片機(jī),輸出 TTL 電平給單片機(jī) 綠色:接 GND 0V 電源低電平

前方無(wú)障礙輸出高電平,有障礙輸出口(黃色)電平會(huì)從高電平變成低電平,背面圖有一個(gè)電位器可 以調(diào)節(jié)障礙的檢測(cè)距離,一旦調(diào)節(jié)好電位器(如調(diào)節(jié)好的最大距離 50cm)則在有效距離內(nèi)(如 40cm


在電路設(shè)計(jì)中可以再輸出端黃線(xiàn)加上拉電阻 10K 到 5V,再接入單片機(jī)檢測(cè),會(huì)比較穩(wěn)定,單片機(jī)檢
測(cè)可以采用外部硬件中斷 INT0 INT1 等來(lái)實(shí)現(xiàn)。
4.實(shí)驗(yàn)相關(guān)寄存器

實(shí)驗(yàn)中使用 P0_4 作為檢測(cè)引腳, 擋住紅外對(duì)管時(shí)對(duì)管上的燈亮,拿開(kāi)就滅。發(fā)生一次 D1 也會(huì)改變。串口配置也 115200 8N1

5.源碼分析 請(qǐng)看相應(yīng)工程,有注釋前面講的太多,不重復(fù)講了。
6.實(shí)驗(yàn)步驟
1.用杜邦線(xiàn)連接好傳感器,注意引腳一定要接正確哦

2.編譯調(diào)試下載程序

3.打開(kāi)串口配置為 115200 8N1 ,D2 應(yīng)該長(zhǎng)亮。擋住紅外對(duì)管,對(duì)管上的燈亮,拿開(kāi)就滅。



CC2530源程序如下:
  1. /****************************************************************************
  2. * 文 件 名: main.c
  3. * 作    者: Andy
  4. * 修    訂: 2017-11-2
  5. * 版    本: 1.0
  6. * 描    述: 擋住紅外對(duì)管,對(duì)管上的燈亮,拿開(kāi)就滅。發(fā)生一次D1也會(huì)改變
  7. *           P0.4口為傳感器的輸入端 串口配置也115200 8N1
  8. ****************************************************************************/
  9. #include <ioCC2530.h>
  10. #include <stdio.h>
  11. #include <string.h>

  12. typedef unsigned char uchar;
  13. typedef unsigned int  uint;

  14. #define LED1 P1_0       //定義P1.0口為L(zhǎng)ED1控制端
  15. #define LED2 P1_1       //定義P1.1口為L(zhǎng)ED2控制端
  16. #define LED3 P1_4       //定義P1.4口為L(zhǎng)ED3控制端

  17. #define DATA_PIN P0_4   //定義P0.4口為傳感器的輸入端

  18. uint count;             //計(jì)數(shù)器

  19. /****************************************************************************
  20. * 名    稱(chēng): DelayMS()
  21. * 功    能: 以毫秒為單位延時(shí) 16M時(shí)約為535,系統(tǒng)時(shí)鐘不修改默認(rèn)為16M
  22. * 入口參數(shù): msec 延時(shí)參數(shù),值越大,延時(shí)越久
  23. * 出口參數(shù): 無(wú)
  24. ****************************************************************************/
  25. void DelayMS(uint msec)
  26. {
  27.     uint i,j;
  28.    
  29.     for (i=0; i<msec; i++)
  30.         for (j=0; j<535; j++);
  31. }

  32. /****************************************************************************
  33. * 名    稱(chēng): InitUart()
  34. * 功    能: 串口初始化函數(shù)
  35. * 入口參數(shù): 無(wú)
  36. * 出口參數(shù): 無(wú)
  37. ****************************************************************************/
  38. void InitUart(void)
  39. {
  40.     PERCFG = 0x00;           //外設(shè)控制寄存器 USART 0的IO位置:0為P0口位置1
  41.     P0SEL |= 0x0c;           //P0_2,P0_3用作串口(外設(shè)功能)
  42.     P2DIR &= ~0XC0;          //P0優(yōu)先作為UART0
  43.    
  44.     U0CSR |= 0x80;           //設(shè)置為UART方式
  45.     U0GCR |= 11;                                       
  46.     U0BAUD |= 216;           //波特率設(shè)為115200
  47.     UTX0IF = 0;              //UART0 TX中斷標(biāo)志初始置位0
  48. }

  49. /****************************************************************************
  50. * 名    稱(chēng): UartSendString()
  51. * 功    能: 串口發(fā)送函數(shù)
  52. * 入口參數(shù): Data:發(fā)送緩沖區(qū)   len:發(fā)送長(zhǎng)度
  53. * 出口參數(shù): 無(wú)
  54. ****************************************************************************/
  55. void UartSendString(char *Data, int len)
  56. {
  57.     uint i;
  58.    
  59.     for(i=0; i<len; i++)
  60.     {
  61.         U0DBUF = *Data++;
  62.         while(UTX0IF == 0);
  63.         UTX0IF = 0;
  64.     }
  65. }


  66. /****************************************************************************
  67. * 名    稱(chēng): InitGpio()
  68. * 功    能: 設(shè)置LED燈和P0.4相應(yīng)的IO口
  69. * 入口參數(shù): 無(wú)
  70. * 出口參數(shù): 無(wú)
  71. ****************************************************************************/
  72. void InitLed(void)
  73. {
  74.     P1DIR |= 0x13;           //P1.0、P1.1、P1.4定義為輸出
  75.     P0SEL &= ~0x10;
  76.     P0DIR &= ~0x10;          //P0.4定義為輸入口   
  77.     P2INP |= 0x20;
  78.    
  79.     LED2 = 0;                //點(diǎn)亮D2 提示程序已運(yùn)行
  80. }

  81. void main(void)
  82. {     
  83.     char buf[10];
  84.    
  85.     memset(buf, 0, 10);     
  86.     InitLed();                        //設(shè)置LED燈和P0.4相應(yīng)的IO口
  87.     InitUart();                       //調(diào)置串口相關(guān)寄存器

  88.     CLKCONCMD &= ~0x40;               //設(shè)置系統(tǒng)時(shí)鐘源為32MHZ晶振
  89.     while(CLKCONSTA & 0x40);          //等待晶振穩(wěn)定為32M
  90.     CLKCONCMD &= ~0x47;               //設(shè)置系統(tǒng)主時(shí)鐘頻率為32MHZ   
  91.       
  92.     InitUart();                       //調(diào)置串口相關(guān)寄存器
  93.   
  94.     while(1)                          //無(wú)限循環(huán)
  95.     {
  96.         if(DATA_PIN == 0)             //擋住紅外對(duì)管輸出低電平,平時(shí)為高電平
  97.         {                             //不同的型號(hào)可能不同,修改觸發(fā)電平就行        
  98.             LED1 = ~LED1;             //擋住紅外對(duì)管D1發(fā)生變化
  99.             while(!DATA_PIN);           
  100.             count++;
  101.             sprintf(buf, "%05d ", count);
  102.             UartSendString(buf, 6); //串口發(fā)送數(shù)據(jù),顯示當(dāng)前記數(shù)值
  103. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

0.png

所有資料51hei提供下載:
28.紅外對(duì)管計(jì)數(shù)器.rar (394.63 KB, 下載次數(shù): 39)


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表