📄 main.c
字号:
//cd wxl
#include <ioCC2430.h>
#define uint unsigned int
#define uchar unsigned char
#define DELAY 10000
//小灯控端口定义
#define RLED P1_0
#define YLED P1_1
/**************************************************************
* mode 0 1 2 3
* PM0 PM1 PM2 PM3
****************************************************************/
#define SET_POWER_MODE(mode) \
do { \
if(mode == 0) { SLEEP &= ~0x03; } \
else if (mode == 3) { SLEEP |= 0x03; } \
else { SLEEP &= ~0x03; SLEEP |= mode; } \
PCON |= 0x01; \
asm("NOP"); \
}while (0)
#define CRYSTAL 0x00
#define RC 0x01
#define XOSC_STABLE (SLEEP & 0x40)
#define HIGH_FREQUENCY_RC_OSC_STABLE (SLEEP & 0x20)
#define SET_MAIN_CLOCK_SOURCE(source) \
do { \
if(source) { \
CLKCON |= 0x40; \
while(!HIGH_FREQUENCY_RC_OSC_STABLE); \
if(TICKSPD == 0){ \
CLKCON |= 0x08; \
} \
SLEEP |= 0x04; \
} \
else { \
SLEEP &= ~0x04; \
while(!XOSC_STABLE); \
asm("NOP"); \
CLKCON &= ~0x47; \
SLEEP |= 0x04; \
} \
}while (0)
void Delay(void);
void Initial(void);
void PowerMode(uchar sel);
void Init_clocks(uchar para1,uchar para2,uchar para3,uchar para4);
/****************************************************************
*函数功能:延时
*入口参数:无
*返回值 :无
*说 明 :可在宏定义中改变延时长度
****************************************************************/
void Delay(void)
{
uint tt;
for(tt = 0;tt<DELAY;tt++);
for(tt = 0;tt<DELAY;tt++);
for(tt = 0;tt<DELAY;tt++);
for(tt = 0;tt<DELAY;tt++);
for(tt = 0;tt<DELAY;tt++);
}
#define TIMER_TICK_DIVIDE(divide) \
do{ \
CLKCON &= ~0X38; \
(divide==1)?(CLKCON |= 0X00): \
(divide==2)?(CLKCON |= 0X08): \
(divide==4)?(CLKCON |= 0X10): \
(divide==8)?(CLKCON |= 0x18): \
(divide==16)?(CLKCON |= 0x20): \
(divide==32)?(CLKCON |= 0x28): \
(divide==64)?(CLKCON |= 0x30): \
(CLKCON |= 0x38); \
}while(0);
/****************************************************************
* 函数功能:初始化I/O,控制LED
* 入口参数:无
* 返回值 :无
* 说 明 :初始化完成后关灯
****************************************************************/
void Initial(void)
{
//P1 out
P1DIR = 0x03; //定义P1_0,P1_1为输出
RLED = 1;
YLED = 1; //close led
}
/****************************************************************
* 函数功能:主函数
* 入口参数:
* 返回值 :无
* 说 明 :10次绿色LED闪烁后进入睡眠状态
****************************************************************/
void main()
{
uchar count = 0;
Initial();
RLED = 0; //开红色LED,系统工作指示
Delay(); //延时
Delay();
Delay();
Delay();
while(1)
{
YLED = !YLED;
count++;
if(count == 20)SET_POWER_MODE(3);
//10次闪烁后进入睡眠状态
//Delay();
Delay();
//延时函数无形参,只能通过改变系统时钟频率
//来改变小灯的闪烁频率
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -