#include<NUC1xx.h>
#include"DrvGPIO.h"
#include"DrvSYS.h"
#define jia DrvGPIO_GetBit(E_GPB,15)
#define jian DrvGPIO_GetBit(E_GPB,14)
uint32_t i;
int32_t data;
uint8_t flag;
void delay_ms( uint32_t data)
{
uint32_t i,j;
for(i=data;i>0;i--)
for(j=2395;j>0;j--);
}
void rcc_init()
{
DrvSYS_UnlockProtectedReg();
SYSCLK->PWRCON.XTL12M_EN = 1;
delay_ms(500);
DrvSYS_LockProtectedReg();
}
void GPIO_init()
{
DrvGPIO_Open(E_GPB,14,E_IO_INPUT);
DrvGPIO_Open(E_GPB,15,E_IO_INPUT);
DrvGPIO_Open(E_GPA, 2, E_IO_OUTPUT); // 设置GPA2端口为输出模式
DrvGPIO_Open(E_GPA, 3, E_IO_OUTPUT); //设置GPA3端口为输出模式
DrvGPIO_Open(E_GPA, 4, E_IO_OUTPUT);
DrvGPIO_Open(E_GPA, 5, E_IO_OUTPUT);
}
int keyscan()
{
if(!jia)
{
delay_ms(20);
if(!jia) flag=1;
if(flag==1)
{
data++;
flag=1;
}
}
else if(!jian)
{
delay_ms(20);
if(!jian) flag=1;
if(flag==1)
{
data--;
flag=0;
}
}
return data;
}
void PWM0_Init()
{
/*GPA12端口初始化为PWM输出端*/
SYS->GPAMFP.PWM0_AD13 = 1;
/*PWM0时钟使能*/
SYSCLK->APBCLK.PWM01_EN = 1;
/*时钟源选择为外部时钟*/
SYSCLK->CLKSEL1.PWM01_S = 3;
/*PWM0时钟选择寄存器设置*/
PWMA->CSR.CSR0 = 3; //进行16分频
/*PWMA预分频寄存器设置*/
PWMA->PPR.CP01 = 1;
/*设置PWM0为自动重装模式*/
PWMA->PCR.CH0MOD = 1;
/*设置PWM输出波形的占空比,占空比=(CNR+1)/(CMR+1)*/
PWMA->CNR0 = 1000;
PWMA->CMR0 = 1000;
/*输出反转设置为不反转*/
PWMA->PCR.CH0INV = 0;
/*PWM定时器0使能*/
PWMA->PCR.CH0EN = 1;
/*通道0输出使能*/
PWMA->POE.PWM0 = 1;
}
int main(void)
{
rcc_init();
DrvGPIO_ClrBit(E_GPA,2);
PWM0_Init();
GPIO_init();
data=5;
while(1)
{
PWMA->CMR0 =keyscan();
}
} |