本帖最后由 Doe_cn 于 2012-2-8 23:12 编辑
说下感受吧,M0的寄存器配置挺多的,就目前来说我已经学到了不少东西。
总之感觉还是不错的,在此再次感谢大叔,李老师,九哥在我的学习过程中给予的支持与指导。
本例程的功能是当按下与GPB14相连的按键后,LED渐渐从暗到亮,达到最亮后再渐渐变暗,并不断循环,当按键松开后明亮程度不再变化。。。
/*---------------------------------------------------------------------------------------------------------*/
/* */
/* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved. */
/* */
/*---------------------------------------------------------------------------------------------------------*/
#include "NUC1xx.h"
#include "DrvGPIO.h"
/*延时函数*/
void delay_ms(uint32_t count)
{
uint32_t i,j;
for(i = count;i > 0;i--)
for(j = 2395;j > 0;j--);
}
/*必要端口初始化函数*/
void GPIO_Init()
{
/*将与按键相连的IO口设置为准双向口*/
DrvGPIO_Open(E_GPB,14,E_IO_QUASI);
}
/*按键扫描*/
int Key_Scan()
{
return DrvGPIO_GetBit(E_GPB,14);
}
/*PWM0初始化设置*/
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 = 0; //不进行分频
/*PWMA预分频寄存器设置*/
PWMA->R.CP01 = 1;
/*设置PWM0为自动重装模式*/
PWMA->CR.CH0MOD = 1;
/*设置PWM输出波形的占空比,占空比=(CNR+1)/(CMR+1)*/
PWMA->CNR0 = 100;
PWMA->CMR0 = 100;
/*输出反转设置为不反转*/
PWMA->CR.CH0INV = 0;
/*PWM定时器0使能*/
PWMA->CR.CH0EN = 1;
/*通道0输出使能*/
PWMA->OE.PWM0 = 1;
}
int main()
{
int temp = 100;
unsigned char flag = 0;
/*端口初始化*/
GPIO_Init();
/*PWM0初始化*/
PWM0_Init();
while(1)
{
while(!Key_Scan() == 1)
{
delay_ms(15);
if(!Key_Scan() == 1)
{
while(!Key_Scan())
{
delay_ms(35);
if(flag == 0)temp--;
else temp++;
if((temp == 0)||(temp == 100))
{
flag = ~flag;
}
/*对比较寄存器重新赋值*/
PWMA->CMR0 = temp;
}
}
}
}
}
|