/*main.c*/
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
//定義控制燈的端口
#define LED4 P1_1 //定義 LED2 為 P11 口控制
//Define key ports
#define S4 P0_6 //main button
#define S5 P0_4 //turn down
#define S6 P0_5 //turn up
//Define LED and key status
#define LED_ON 0
#define LED_OFF 1
#define KEY5 5
#define KEY6 6
#define KEY4 4
#define KEY_UP 1
#define KEY_DOWN 0
#define ON 1
#define OFF 0
//Define Cycle time
uint Cycle_Time = 300;
uint LED_Time = 0;
uint flag = KEY_UP; //Record the last status of S4
uint on_off = OFF;
uchar key = 0;
uint temp = 0; //Record the value of LED_Time
//函數聲明
void Delay(uint); //延時函數
void LED_Init(void); //初始化 LED 控制 IO 口函數
void Key_Init(void); //Initialize Keys
uchar Key_Scan(void); //Monitor the status of Keys
void PWM_Control(void); //Adjust the brightness of LED
/****************************
//延時
*****************************/
void Delay(uint n)
{
uint i;
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
for(i = 0;i<n;i++);
}
/****************************
//初始化 IO 口程序
*****************************/
void LED_Init(void)
{
P1SEL &= ~0x02;
P1DIR |= 0x02; //P11、 定義為輸出LED1 = 1;
LED4 = LED_OFF;
}
void Key_Init(void)
{
P0SEL &= ~0x70;
P0DIR &= ~0x70;
}
uchar Key_Scan(void)
{
if(S5 == KEY_DOWN){
return KEY5;
}
else if (S6 == KEY_DOWN){
return KEY6;
}
else if (S4 == KEY_DOWN && flag == KEY_UP){ //用于判斷是否長按,flag表示上一次S4的狀態
flag = S4;
Delay(200); //Remove the influence of jitters
if(S4 == KEY_DOWN) on_off = !on_off; //Reverse the status
if(on_off == OFF){ //turn off the LED
LED4 = LED_OFF;
}
return KEY4;
}
flag = S4;
return 0;
}
void PWM_Control(void)
{
if(key == 5){
//turn down
if(LED_Time<Cycle_Time) LED_Time++;
}
else if(key == 6) {
//turn up
if(LED_Time>0) LED_Time--;
}
/* if(LED_Time == 0 || LED_Time == Cycle_Time) {
if(LED_Time == 0) {
LED4 = LED_ON;
return;
}else{
LED4 = LED_OFF;
return;
}
}*/
LED4 = LED_OFF;
Delay(LED_Time);
LED4 = LED_ON;
Delay(Cycle_Time - LED_Time);
}
/***************************
//主函數
***************************/
void main(void)
{
LED_Init(); //初始化 LED 燈控制 IO 口
Key_Init();
while(1) //死循環
{
key = Key_Scan();
if(on_off == ON){
PWM_Control();
}
}
}
|