本帖最后由 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;
- }
- }
- }
- }
- }
|