?? main.c
字號:
/****************************************************
*名 稱: PWM測試文件 *
*功 能: 測試PWM輸出,測試5050LED *
*備 注: 2011.1.18 *
貞明電子:http://shop58972409.taobao.com *
*****************************************************/
/**************** 頭文件調用&&宏定義 ****************/
#include "LPC11xx.h"
#include "GPIO.H"
/******************* 全局變量定義 *******************/
uint8_t state=0;
uint32_t pwmvalue=1000;
uint8_t valueflag=0;
/********************** 函數聲明 ********************/
__inline void delay_ms(uint32_t a);
void UserIO(void);
void PWM_Init(void);
void IO_Init(void);
void LED1(void);
void LED2(void);
void LED3(void);
/********************** 主函數 **********************/
int main(void)
{
SystemInit(); //系統初始化,包括使能時鐘
UserIO();
IO_Init();
PWM_Init();
delay_ms(500);
//直接使用寄存器
LPC_GPIO2->DATA|=(((1<<8)|(1<<9))); //P2.8,P2.9輸出1,LED1,LED2滅
LPC_GPIO3->DATA|=(1<<4); //LED3滅
delay_ms(500);
while(1)
{
switch (state)
{
case 1:
LED3();
break;
case 2:
LED2();
break;
case 3:
LED1();
break;
default:
break;
}
switch(valueflag)
{
case 1:
if(pwmvalue<9900)
pwmvalue+=100;
LPC_TMR32B1->MR0=pwmvalue;
valueflag=0;
break;
case 2:
if(pwmvalue>100)
pwmvalue-=100;
LPC_TMR32B1->MR0=pwmvalue;
valueflag=0;
break;
default:
break;
}
}
}
/********************** 函數定義 ********************/
/****************************************************
*名 稱: 延時函數 *
*參 數: 延時時間 *
*備 注: 內聯函數 *
*****************************************************/
__inline void delay_ms(uint32_t a) //1ms延時函數
{
uint32_t i;
while( --a != 0)
{
for(i = 0; i<5500; i++);
}
}
/****************************************************
*名 稱: UserIO *
*參 數: 無 *
*備 注: 用戶IO配置,初始化函數 *
*****************************************************/
void UserIO(void)
{
GPIOInit(); //GPIO初始化,使能GPIO模塊時鐘
GPIOSetDir(2,8,1); //設置P2.8為輸出,LED1
GPIOSetDir(2,9,1); //設置P2.9為輸出,LED2
GPIOSetDir(3,4,1); //設置P3.4為輸出,LED3
//調用頭文件中函數輸出方法
GPIOSetValue(PORT2,8,0); //設置P2.8輸出0,點亮LED1
GPIOSetValue(PORT2,9,0); //設置P2.9輸出0,點亮LED2
GPIOSetValue(PORT3,4,0); //設置P3.4輸出0,點亮LED3
LPC_IOCON->JTAG_TDO_PIO1_1=0x0003; //設置PIO1_1為CT32B1_MAT0
GPIOSetDir(PORT1,1,1); //White out
GPIOSetValue(PORT1,1,0); //white 亮
}
/****************************************************
*名 稱: PWM_Init *
*參 數: 無 *
*備 注: PWM初始化函數 *
*****************************************************/
void PWM_Init(void) // CT32B0 MAT0:50%,50KHz,MAT1:70%,50KHz
{
LPC_TMR32B1->TCR=0;
LPC_SYSCON->SYSAHBCLKCTRL|=(1<<10); //打開定時器模塊
LPC_TMR32B1->TCR=0x02; //定時器復位
LPC_TMR32B1->MR0 =1000; //90%占空比
LPC_TMR32B1->PWMC =0x01; //設置 MA0,1為PWM輸出
LPC_TMR32B1->PR =2; //設置分頻系數
LPC_TMR32B1->MR3 =10000; //周期控制, 200us:5K
LPC_TMR32B1->EMR =0x00; //01=L,02=H,03=翻轉
LPC_TMR32B1->MCR = (1<<10); //設置如果MR0和TC匹配,TC復位:[2]=1
LPC_TMR32B1->TCR =0x01; //定時器打開
}
/****************************************************
*名 稱: IO_Init() *
*參 數: 無 *
*備 注: 用戶IO初始化 *
*****************************************************/
void IO_Init(void)
{
LPC_IOCON->PIO0_2=0x00;
LPC_IOCON->PIO1_8=0x00;
GPIOSetDir(PORT0,2,0); //Set PIO0_2 Input
GPIOSetDir(PORT1,8,0); //Set PIO1_8 Input
GPIOSetInterrupt(PORT0,2,0,0,1);//端口號, 位地址, sense, single/doube, 上升/下降沿
GPIOSetInterrupt(PORT1,8,0,0,0); //上升沿觸發中斷
GPIOIntEnable(PORT0,2); //使能該端口中斷
GPIOIntEnable(PORT1,8); //使能該端口中斷
GPIOSetDir(2,8,1); //設置P2.8為輸出,LED1
GPIOSetDir(2,9,1); //設置P2.9為輸出,LED2
GPIOSetDir(3,4,1); //設置P3.4為輸出,LED3
//調用頭文件中函數輸出方法
GPIOSetValue(PORT2,8,1); //設置P2.8輸出0,點亮LED1
GPIOSetValue(PORT2,9,1); //設置P2.9輸出0,點亮LED2
GPIOSetValue(PORT3,4,1); //設置P3.4輸出0,點亮LED3
}
void PIOINT1_IRQHandler(void)
{
uint32_t regVal;
regVal= GPIOIntStatus(PORT1, 8); //得到P1_8的中斷狀態
if(regVal)
{
if((LPC_GPIO0->DATA&0x04)!=0x04)
{
valueflag=1;
if(state<4)
state++;
if(state==4)
state=1;
}
GPIOIntClear( PORT1, 8);
}
return;
}
void PIOINT0_IRQHandler(void)
{
uint32_t regVal;
regVal= GPIOIntStatus(PORT0, 2); //得到P0_2的中斷狀態
if(regVal)
{
if((LPC_GPIO1->DATA&0x100)==0x100)
{
valueflag=2;
if(state>0)
state--;
if(state==0)
state=3;
}
GPIOIntClear( PORT0, 2);
}
return;
}
void LED1(void)
{
GPIOSetValue(PORT2,8,0); //設置P2.8輸出0,LED1亮
GPIOSetValue(PORT2,9,1); //設置P2.9輸出1,LED2滅
GPIOSetValue(PORT3,4,1); //設置P3.4輸出1,LED3滅
}
void LED2(void)
{
GPIOSetValue(PORT2,8,1); //設置P2.8輸出1,LED1滅
GPIOSetValue(PORT2,9,1); //設置P2.9輸出1,LED2滅
GPIOSetValue(PORT3,4,0); //設置P3.4輸出0,LED3亮
}
void LED3(void)
{
GPIOSetValue(PORT2,8,1); //設置P2.8輸出1,LED1滅
GPIOSetValue(PORT2,9,0); //設置P2.9輸出0,LED2亮
GPIOSetValue(PORT3,4,1); //設置P3.4輸出1,LED3滅
}
/****************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -