"该资源主要涉及使用飞思卡尔单片机128调整呼吸灯的实现方法,通过不同的时钟设置和PWM控制来达到LED亮度的动态变化效果。" 在电子设计中,呼吸灯是一种常见的人机交互元素,通常通过改变LED亮度的渐变效果来模拟呼吸的过程,营造出独特的视觉体验。在这个案例中,使用的是飞思卡尔单片机128,它具有丰富的外设和强大的处理能力,适合于各种嵌入式应用,包括控制呼吸灯。 首先,为了设置单片机的运行时钟,我们需要进行时钟源的选择和配置。在代码中,可以看到`MCUInit()`函数用于初始化40MHz的时钟。这通常涉及到以下几个步骤: 1. 设置时钟选择位(CLKSEL):通过清零CLKSEL的第7位,选择PLL作为主时钟源。 2. 配置PLL控制寄存器(PLLCTL):清除第6位,使能PLL,并设置分频系数POSTDIV、合成器分频因子SYNR和参考电压分频因子REFDV。 3. 检查PLL是否锁定(CRGFLG_LOCK):当PLL稳定后,设置CLKSEL_PLLSEL,选择PLL作为系统时钟。 此外,还有一个名为`pll()`的函数,用于配置不同的时钟参数,如SYNR和REFDV,以适应不同的应用场景或优化性能。 在控制LED的亮度变化,即实现呼吸灯效果时,使用了PWM(脉宽调制)技术。PWM是一种通过调整周期内高电平时间占整个周期比例来模拟不同电压等级的技术。在代码中,`InitPWM()`函数用于开启PWM功能并进行初始化。具体操作可能包括: 1. 关闭所有PWM通道(PWME=0x00),以防止不必要的干扰。 2. 设置PWM寄存器,如PWM计数器初始值、比较值等,以控制LED亮度的逐渐变化。 3. 可能还需要配置PWM的输出极性、分频因子以及中断设置,以实现平滑的亮度变化和实时反馈。 在`keyscan()`函数中,可以看到用于读取按键输入的逻辑,这是用户与呼吸灯交互的一部分,通过检测特定按键组合来控制呼吸灯的开关或者模式。 最后,`#include`指令引入了`pll.h`和`anjian.h`两个头文件,分别包含有关PLL配置的函数声明和按键扫描的相关定义,这些是实现整个呼吸灯任务的关键支持文件。 这个资源提供了使用飞思卡尔单片机128实现呼吸灯的完整流程,涵盖了时钟配置、PWM控制以及用户输入处理等多个方面,对于学习嵌入式系统开发和理解呼吸灯原理非常有帮助。
void MCUInit() //锁相环初始化,倍频到40MHZ
{
CLKSEL&=0x7f; //CLKSEL的第7位(PLLSEL)置0,即外部晶振
PLLCTL&=0xbf; //PLLCTL的第6位决定PLL是否运作,0为关闭PLL
POSTDIV=0x00; //若POSTDIV=0X00,则F(PLL)=F(VCO)
SYNR=4; //计算得SYNDIV等于4
REFDV=4; //由fREF算出等于16,故最后两位为11
PLLCTL&=0xff; //打开PLL (PLLCTL |= (1<<6);)
while((CRGFLG&0x08)==0x00)//判断PLL是否已经稳定
CLKSEL_PLLSEL=1; //时钟源选择为锁相环 (CLKSEL |= (1<<7);)
}
或者
void MCUInit()
{
SYNR=4;
REFDV=4;
_asm(nop);
_asm(nop);
while(CRGFLG_LOCK==0)
CLKSEL_PLLSEL=1;
}
占空比法(用延迟)
void pll() //锁相环头文件#include "pll.h"
SYNR=3;
REFDV=10;
while(CRGFLG_LOCK==0)
CLKSEL_PLLSEL=1;
}
unsigned int keyscan(void)//按键头文件#include "anjian.h"
{
unsigned char num=0;
unsigned char temp=0;
DDRT=0xff; //列为输出
PTT=0x0e;;
DDRB=0x00; //行为输入
PORTB=0xff;
temp=PORTB&0xf0;
switch(temp)
{
case 0xe0:num=1;break; //第一列第一行
case 0xd0:num=2;break; //第一列第二行
case 0xb0:num=3;break; //第一列第三行
case 0x70:num=4;break; //第一列第四行
default:break;
}
return num;
}
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include "pll.h" //锁相环头文件
剩余10页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WebLogic集群配置与管理实战指南
- AIX5.3上安装Weblogic 9.2详细步骤
- 面向对象编程模拟试题详解与解析
- Flex+FMS2.0中文教程:开发流媒体应用的实践指南
- PID调节深入解析:从入门到精通
- 数字水印技术:保护版权的新防线
- 8位数码管显示24小时制数字电子钟程序设计
- Mhdd免费版详细使用教程:硬盘检测与坏道屏蔽
- 操作系统期末复习指南:进程、线程与系统调用详解
- Cognos8性能优化指南:软件参数与报表设计调优
- Cognos8开发入门:从Transformer到ReportStudio
- Cisco 6509交换机配置全面指南
- C#入门:XML基础教程与实例解析
- Matlab振动分析详解:从单自由度到6自由度模型
- Eclipse JDT中的ASTParser详解与核心类介绍
- Java程序员必备资源网站大全