cc2530设计性实验代码三

主函数

#include <ioCC2530.h>

#define uint unsigned int
#define uchar unsigned char

enum SYSCLK_SRC{XOSC_32MHz,RC_16MHz}; 
 
#define LED1 P1_0
#define LED2 P1_1 
#define K1 P1_3
#define K2 P0_1

#define ON 1
#define OFF 0

void Delay(uint);
void InitLed(void);
uchar Keyvalue1=1,Keyvalue2=1;
void Delay(uint n)
{
	uint t;
	for(t = 0;t<n;t++);
	for(t = 0;t<n;t++);
	for(t = 0;t<n;t++);
	for(t = 0;t<n;t++);
	for(t = 0;t<n;t++);
}

void InitKey(void)
{ 
  P0SEL &= ~0X02;//配置p0.1口为普通i/o口
  P0DIR &= ~0X02;//配置p0.1口为输入
  P0INP |= 0x02; //配置p0.1口为三态
  
  P1SEL &= ~0X08;
  P1DIR &= ~0X08;
  P1INP |= 0x08;  
}
void InitLed(void)
{
    P1SEL &= ~0x03;
    P1DIR |= 0x03;
	LED1 = OFF;
	LED2 = OFF;
}

void KeyScan(void)
{
  if(K1 == 0)
  {
    Delay(100); 
    if(K1 == 0)//去抖
    {
      Keyvalue1=!Keyvalue1; 
      while(!K1); 
    }
  }
  
  else if(K2 == 0)
  {
    Delay(100);
    if(K2 == 0)
    {
      Keyvalue2=!Keyvalue2;
      while(!K2); 
    }
  }
   
}
void BlinkLeds(uchar LEDx) 
{ 
     if(LEDx == 1)
     {
       LED1 = !LED1;
       Delay(20000);
     }
     else if(LEDx == 2)
     {
       LED2 = !LED2;
       Delay(20000);
     }  
} 

void SystemClockSourceSelect(enum SYSCLK_SRC source) //系统时钟源选择
{ 
  unsigned char osc32k_bm = CLKCONCMD & 0x80; //32kMHz时钟源选择晶体振荡器
  unsigned char __clkconcmd,__clkconsta; 
 
 if(source == RC_16MHz) //系统时钟源选择16MRC 定时器输出16M 时钟速度16M
	  CLKCONCMD = ((osc32k_bm) | \
      (0x01 << 6)|\
      (0x01 << 3)|\
      (0x01 << 0)); 
 else if(source == XOSC_32MHz) 
        { 
           CLKCONCMD = (osc32k_bm); 
        } 
 __clkconcmd = CLKCONCMD;
 do 
    { 
      __clkconsta = CLKCONSTA;
    }while(__clkconsta != __clkconcmd);//等待时钟
}

void main(void)
{
    unsigned char i,m=0,n=0; 
	InitLed();	

	while(1)
	{
          KeyScan();
          if(Keyvalue1==0&&Keyvalue2==0){//按键1和按键2都没按下
               SystemClockSourceSelect(RC_16MHz);//系统时钟源选用16MHZRC振荡器
              LED1=!LED1; //LED1闪烁
              LED2=!LED2; //LED2闪烁
          }
          else {
              SystemClockSourceSelect(XOSC_32MHz);//使用32MHZ晶体振荡器 
              
              if(Keyvalue1==1){ //按下键1 
                LED1=!LED1; //LED1闪烁变慢
	      }
              
              else if(Keyvalue1==0){ //若没按键1
                 m=!m;
                if(m==1)
                  LED1=!LED1; //闪烁频率不变
              } 
              
                if(Keyvalue2==1){  //按下键2 
                  LED2=!LED2; //LED闪烁变慢
	      }
                
                else if(Keyvalue2==0){ //若没按键2
                  n=!n;
                  if(n==1)
                    LED2=!LED2; //LED2闪烁频率不变
              } 
          }
          Delay(20000); 
        }
}

完整代码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天地神仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值