基本信息
源码名称:​通过CC2530的通用IO口点亮LED1和LED2
源码大小:1.06M
文件格式:.rar
开发语言:C/C++
更新时间:2020-10-22
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

       基础开发是用来熟悉CC2530F256的资源组成和各接口控制使用,为后面进行基于协议栈应用开发,组网和数据传输时打下基础。通过CC2530的通用IO口点亮LED1LED2

【实例原理

1)先了解LED连接原理图,如下图所示,可以看到P1_0P1_1两个IOCC2530P1端口来控制LED灯亮灭,需要设置CC2530 P1[1:0]为通用IO口、输出模式,这样输出低电平时点亮,高电平时灭。

2)CC2530有三个端口P0[7:0]P1[7:0]P2[4:0]21个通用IO口,设置PXX02)端口时,主要配置三个寄存器,通过三个寄存器配置21个通用IO

PXSEL:0为默认通用IO1为功能接口(如UART串口、TIMER定时器等,后面再研究);

PXDIR:0为默认输入,1为输出;

PXINP:0默认为上拉/下拉,1为三态;在上拉和下拉选择中,在P2INP中进行设置,如下图P2INP[75]三位来设置,0默认为上拉,1为下拉。

通用IO配置详细参考CC2530 datasheet.pdf P78开始,上面总结可以看出P2INP[75]的设置是针对整个PX端口设置上拉或下拉,在设计作为输入IO时要注意整个端口所有IO电平匹配情况。

3)总结CC2530IO 口配置后,我们回到具体设计中来,点LED需要配置三个寄存器P1SELP1DIRP1INP

P1SEL &=~0x03; //00000011取反后与原P1SEL值相与,再赋值给P1SEL,确定最后两位为

//00,即P1_1P1_0作为通用IO口,其它6位保留原状态

P1DIR |= 0x03;  // 00000011与原P1DIR值相或,再赋值给P1DIR,确定最后两位为11

//即P1_1P1_0作为输出,其它6位保留原状态

P1INP &=~0X03; // 00000011取反后与原P1INP值相与,再赋值给P1INP,确定最后两位为

//00,即P1_1P1_0选择上拉/下拉,考虑作为输出,可以不关注上拉还是

//下拉的选择,所以不设置P2INP

在没有复杂的设计时,我们可以利用默认值简化设计,由于 CC2530 寄存器初始化时默认是: P1SEL =0x00; P1DIR =0x00;  P1INP =0X00;  P2INP =0X00;

所以 IO 口初始化我们可以简化初始化指令: P1DIR |= 0x03;

源程序代码

/**********************************************

             基础开发:点亮LED  

**********************************************/

#include <ioCC2530.h>

 

#define LED1 P1_0      //定义P1_0LED1控制端

#define LED2 P1_1      //定义P1_1LED2控制端

 

void IO_Init(void)

{

  P1DIR |=0x03;        //简化端口配置,P1_1P1_0为输出通用IO

}

 

void main(void)

{

   IO_Init();          //调用初始化程序配置IO

   while(1)

   {

     LED1=0;        //点亮LED1

     LED2=0;        //点亮LED2

   }

}

【源程序代码】

/*************************************************************************

按键KEY:S1依次控制LED1亮和灭,S2依次控制LED2亮和灭,有键按下时蜂鸣器鸣叫

**************************************************************************/

#include<ioCC2530.h>


#define uint unsigned int

#define uchar unsigned char

#define LED1 P1_0       //定义LED1P1_0

#define LED2 P1_1       //定义LED2P1_1

#define KEY1 P0_4       //定义KEY1P0_4

#define KEY2 P0_5       //定义KEY2P0_5

#define SP   P0_7       //定义SPP0_7


void Delay(uint);       //延时函数,单位为mS

void IO_Init();         //IO配置及初始化

uchar Keyscan();        //按键扫描


void Delay(uint m)

{

  uint i,j;

  for(i=m;i>0;i--)

    for(j=160;j>0;j--);  //大概时间为1mS

}


void IO_Init()

{

  P1DIR |=0x03;            //LED2、LED1P1_1P1_0为输出通用IO,默认不亮

  LED1=1;

  LED2=1;

  P0DIR |=0x80;           //蜂鸣器的P0.7为输出通用IO,默认不响

  SP=1;

}


uchar Keyscan()

{

  if(KEY1==0)           //扫描是否S1按下

  {Delay(100);          //按下,延迟100mS防抖动

   if(KEY1==0)          //确定S1按下,返回1

    return 1;          

   }

   if(KEY2==0)           //扫描是否S2按下

  {Delay(100);           //按下,延迟100mS防抖动

    if(KEY2==0)          //确定S2按下,返回2

      return 2;       

   } 

  return 0;             //无键按下,返回0

}


void main()

{

  IO_Init();            //调用初始化

  while(1)

   {

     if(Keyscan()==1)   //S1按下时改变LED1状态,并鸣叫1S

      {

       LED1=~LED1;

       SP=~SP;

       Delay(1000);

       SP=~SP;

      }   

     if(Keyscan()==2)   //S2按下时改变LED2状态,并鸣叫1S

      { 

       LED2=~LED2;

       SP=~SP;

       Delay(1000);

       SP=~SP;

      }

   }

}