標(biāo)題: CC2530的GPIO輸出控制教程-Led閃爍、流水燈程序分析 [打印本頁(yè)]

作者: ZSS1753936255    時(shí)間: 2017-11-1 22:47
標(biāo)題: CC2530的GPIO輸出控制教程-Led閃爍、流水燈程序分析
1.實(shí)驗(yàn)?zāi)康?/font>
2.GPIO輸出控制實(shí)驗(yàn)-Led閃爍、流水燈

1) 通過(guò)實(shí)驗(yàn)掌握 CC2530 芯片 GPIO 的配置方法
2) 掌握 Led 驅(qū)動(dòng)電路及開(kāi)關(guān) Led 的原理
3) 操作 IO 口控制 3 盞 LED 燈的全亮和全滅、閃爍、流水燈
2.實(shí)驗(yàn)設(shè)備
             硬件:PC 機(jī)              一臺(tái) EB2530(底板、核心板、仿真器、USB線)   一套
             軟件:2000/XP/win7 系統(tǒng),IAR 8.10 集成開(kāi)發(fā)環(huán)境
3.實(shí)驗(yàn)相關(guān)電路圖

由于發(fā)光二級(jí)管單向?qū)щ娞匦,即只有在正向電壓(二極管的正極接正,負(fù)極接負(fù))下才 能導(dǎo)通發(fā)光。P1.0 引腳接發(fā)光二極管(D1)的負(fù)極,所以 P1.0 引腳輸出低電平 D1 亮,P1.0 引腳輸出亮電平 D1 熄滅,P1.1 和 P1.4 原理相同。

4.實(shí)驗(yàn)相關(guān)寄存器 操作P1.0我們需要掌握相關(guān)寄存器的作用和配置方法。如下表所示(更詳細(xì)的介紹請(qǐng)參考 “EB2530\相關(guān)資料與軟件\cc2530-datasheet.pdf,英文不好的可參考CC2530中文數(shù)據(jù)手 冊(cè)完全版.pdf,翻譯有250頁(yè)并非官方中文,有個(gè)別地方有錯(cuò),請(qǐng)以英文為主哦”):


寄存器
作用
描述
P1 (0x90)
端口 1
端口 1。通用 I / O 端口。可以從 SFR 位尋址。


P1SEL(0xF4)


端口 1 功能選擇
P1.7 到 P0.0 功能選擇
0: 通用 I / O
1: 外設(shè)功能


P1DIR(0xFE)


端口 1 方向
P1.7 到 P1.0 的 I/O 方向
0: 輸入
1: 輸出

P1INP(0xF6)

端口 1 輸入模式
P1.7 到 P1.2 的 I/O 輸入模式。由于 P1.0 和 P1.1 沒(méi)有
上拉/下拉功能, P1INP 暫時(shí)不需要配置

0: 上拉/下拉(見(jiàn) P2INP (0xF7)–端口 2 輸入模式)

1: 三態(tài) 按照表格寄存器的內(nèi)容,對(duì)P1.0、P1.1、P1.4進(jìn)行配置,當(dāng)IO口輸出低電平時(shí)Led被點(diǎn)亮。


所以配置如下:

P1SEL &=~0x13; //配置P1.0、P1.1、P1.4為通用IO口 P1DIR |= 0x13; //配置P1.0、P1.1、P1.4為輸出
由于CC2530寄存器初始化時(shí)默認(rèn)值為(詳細(xì)說(shuō)明請(qǐng)參考CC2530數(shù)據(jù)手冊(cè)(中文).pdf): P1SEL = 0x00;P1DIR = 0x00; P1INP = 0x00;
所以 IO 口配置可簡(jiǎn)化為:P1DIR |= 0x13; //配置 P1.0、P1.1、P1.4 為輸出
5.源碼分析

6.實(shí)驗(yàn)步驟 連接硬件如下(后面的實(shí)驗(yàn)將省略硬件連接與編譯了,別重復(fù)講了,只講不同的實(shí)驗(yàn)):


如果編譯有錯(cuò)誤,請(qǐng)參考最后一頁(yè)圖片說(shuō)明。沒(méi)有錯(cuò)誤請(qǐng)繼續(xù)
點(diǎn)下載調(diào)試程序,再點(diǎn)運(yùn)行,即可看到“3 盞 LED 燈的全亮



和全滅、閃爍、流水燈”,由于 P1.4 與仿真器共用,必須拔掉仿真器的插頭才能看到 LED3

的變化。單擊調(diào)試按鍵后程序已經(jīng)下載到芯片中并保存,斷電也不會(huì)掉失的,此時(shí)可以停 止調(diào)試并斷開(kāi)仿真器的排線,通過(guò)底板 USB 供電再看看效果吧。


cc2530源程序如下:
  1. /****************************************************************************
  2. * 文 件 名: main.c
  3. * 作    者: Andy
  4. * 修    訂: 2017-11-2
  5. * 版    本: 1.0
  6. * 描    述: 操作IO口控制3盞LED燈的全亮和全滅、閃爍、流水燈
  7. ****************************************************************************/
  8. #include <ioCC2530.h>

  9. typedef unsigned char uchar;
  10. typedef unsigned int  uint;

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


  14. /****************************************************************************
  15. * 名    稱: DelayMS()
  16. * 功    能: 以毫秒為單位延時(shí),系統(tǒng)時(shí)鐘不配置時(shí)默認(rèn)為16M(用示波器測(cè)量相當(dāng)精確)
  17. * 入口參數(shù): msec 延時(shí)參數(shù),值越大,延時(shí)越久
  18. * 出口參數(shù): 無(wú)
  19. ****************************************************************************/
  20. void DelayMS(uint msec)
  21. {
  22.     uint i,j;
  23.    
  24.     for (i=0; i<msec; i++)
  25.         for (j=0; j<535; j++);
  26. }

  27. /****************************************************************************
  28. * 名    稱: LedOnOrOff()
  29. * 功    能: 點(diǎn)亮或熄滅所有LED燈   
  30. * 入口參數(shù): mode為0時(shí)LED燈亮  mode為1時(shí)LED燈滅
  31. * 出口參數(shù): 無(wú)
  32. ****************************************************************************/
  33. void LedOnOrOff(uchar mode)
  34. {
  35.     LED1 = mode;
  36.     LED2 = mode;
  37.     LED3 = mode; //由于P1.4與仿真器共用,必須拔掉仿真器的插頭才能看到LED3的變化
  38. }

  39. /****************************************************************************
  40. * 名    稱: InitLed()
  41. * 功    能: 設(shè)置LED燈相應(yīng)的IO口
  42. * 入口參數(shù): 無(wú)
  43. * 出口參數(shù): 無(wú)
  44. ****************************************************************************/
  45. void InitLed(void)
  46. {
  47.     P1DIR |= 0x13;      //P1.0、P1.1、P1.4定義為輸出
  48.     LedOnOrOff(1);      //使所有LED燈默認(rèn)為熄滅狀態(tài)
  49. }

  50. /****************************************************************************
  51. * 程序入口函數(shù)
  52. ****************************************************************************/
  53. void main(void)
  54. {
  55.     uchar i;
  56.    
  57.     InitLed();               //設(shè)置LED燈相關(guān)IO口
  58.    
  59.     while(1)                 //死循環(huán)
  60.     {  
  61.         LED1 = !LED1;         //流水燈,初始化時(shí)LED為熄滅執(zhí)行后則點(diǎn)亮
  62.         DelayMS(200);         
  63.         LED2 = !LED2;         
  64.         DelayMS(200);            
  65.         LED3 = !LED3;        
  66.         DelayMS(200);     
  67.         
  68.         for (i=0; i<2; i++)  //所有燈閃爍2次
  69.         {
  70.            LedOnOrOff(1);    //關(guān)閉所有LED燈
  71.            DelayMS(200);
  72.            LedOnOrOff(0);    //打開(kāi)所有LED燈
  73.            DelayMS(200);
  74.         }
  75.         
  76.         LedOnOrOff(1);       //使所有LED燈熄滅狀態(tài)
  77.         DelayMS(500);

  78. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼



所有資料51hei提供下載:
2.Led閃爍_流水燈.rar (330.03 KB, 下載次數(shù): 11)







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1