主函数
#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;
P0DIR &= ~0X02;
P0INP |= 0x02;
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;
unsigned char __clkconcmd,__clkconsta;
if(source == RC_16MHz)
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){
SystemClockSourceSelect(RC_16MHz);
LED1=!LED1;
LED2=!LED2;
}
else {
SystemClockSourceSelect(XOSC_32MHz);
if(Keyvalue1==1){
LED1=!LED1;
}
else if(Keyvalue1==0){
m=!m;
if(m==1)
LED1=!LED1;
}
if(Keyvalue2==1){
LED2=!LED2;
}
else if(Keyvalue2==0){
n=!n;
if(n==1)
LED2=!LED2;
}
}
Delay(20000);
}
}
完整代码下载