微控制器MCU通常被认为是数字器件。在缺省情况下,其输出电压电平要么是高,要么就是低,不会是一个不高不低值。为了实现LED亮度控制这一要求,首先浮现在脑海中的方法就是使用一个标准的数模转换器或者设计一个受控的电阻网络。值得庆幸的是,大多数现代MCU都具有内置的脉冲宽度调制(PWM)单元,这是解决该问题的最容易和成本最低的方法。
根据我们的项目要求,两个LED的亮度必须在几秒钟的时间内以相反的顺序逐渐从最暗调整到最亮,再从最亮逐渐调整到最暗。在"匀变1"时间内,针对LED 1的PWM信号的脉冲宽度逐渐增大,而针对LED 2的PWM信号的脉冲宽度逐渐减小。例如,假设匀变时间等于2秒并由128个向上/向下步长组成。因此,每个步长持续大约16ms。请注意,脉冲宽度应当在一个PWM周期内仅改变一次。因此,PWM周期也应该等于16ms。
我们使用了低端8位摩托罗拉MC68HC908-QT2 Flash MCU,该器件内嵌有振荡器。其振荡频率为12.8MHz,并且预分频器的分频比在程序中设定为1:64,定时器时钟周期为0.02 ms。那么,为了生成周期为16ms的PWM,要载入定时器/计数器方式寄存器(Tmod)的时钟数应等于16/0.02 = 800(等于十六进制的$0320)。
最大脉冲宽度(PWmax)可以小于或等于PWM周期。考虑PWmax大约等于15ms的情况。对于128个步长的情况,要从零获得此最大值,每个步长值应为15/128 = 0.117ms,舍入之后为0.12ms。由此我们可以得出PWmax = 15.36 ms,相当于PWM周期的96%。因此在每一步长中,PW应以0.12ms(等于0.12/0.02 = 6个定时器时钟)的增量向上/向下匀变。
任何一种带有PWM的MCU和任何一种定时考虑方法可用来实现这一技术。应根据使用的LED来选择电阻R1 和 R2。管脚pA2 =1时用来激活亮度控制,管脚pA2 =0时用来关闭亮度控制。
关键字:微控制器 MCU处理
编辑:探路者 引用地址:微控制器MCU处理LED亮度控制
推荐阅读最新更新时间:2023-10-12 22:53
基于AT89C51和DS18B20的最简温度测量系统
l引 言
温度的测量和控制在激光器、光纤光栅的使用及其他的工农业生产和科学研究中应用广泛。温度检测的传统方法是使用诸如热电偶、热电阻、半导体PN结之类的模拟温度传感器。信号经取样、放大后通过模数转换,再交自单片机处理。被测温度信号从温敏元件到单片机,经过众多器件,易受干扰、不易控制且精度不高。因此,本文介绍一种新型的可编程温度传感器DS18B20,他能代替模拟温度传感器和信号处理电路,直接与单片机沟通,完成温度采集和数据处理。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。
2温度测量系统硬件
系统结构图如图1所示 。这里通
[应用]
ARM7单片机(学习ing)—(一)、输入/输出端口GPIO编程—02
一、输入/输出端口GPIO编程 一—(02)、控制LCD1602显示~~ 废话不多说了~~直接上图~~ 然后是程序~~ MDK1_2.c //------------------------------------------------------------------------------ //这个当然是主函数了 #include lpc210x.h #include macroandconst.h #include delay.h #include lcdinit.h //----------------------------------------------------------------------
[单片机]
51单片机学习——1--点亮第一个LED
点亮LED 原理: 此单片机的LED灯就是个发光二极管,只能单向通行。图中LED阴极接IO口,阳极接VCC,也就是电源,为高电平,而正常情况下P2口默认输出高电平,所以只需令P2口输出低点平即可。 代码: #include reg52.h sbit led=P2^0;//通过位定义,令led代表P20口 void main() { while(1) { led=0;//令P20为低电平 } } 总结: 知识点: 设置管脚sbit name=Px^x(IO口) 令目标led灯对应的IO口输出低电平 拓展: 也可以直接对P2的所有IO口进行赋值输出。即1111 1111从高位到低位分别对应从左到右
[单片机]
keil软件的使用及工程的建立
keil软件是常用的编译软件,keil工程的建立过程如下: 建立一个新工程单击{【project】菜单中的【new project……】选项。 选择工程保存路径,输入工程名,单击保存。 在弹出的对话框内选择自己正在使用的单片机品牌和型号。在选择相应的单片机型号后,还可以在右边的【deion】栏查看该品牌型号单片机的基本说明。最后单击确定选择好单片机型号。 完成以上步骤只是建立了工程,但这不是一个完整的工程。我们必须添加文件以及代码使之完善。 单击【file】菜单中的【new】菜单项新建文件。然后单击保存,输入要保存的文件名,同时需要注意的是必须输入正确的扩展名。如果我们用C语言编写程序扩展名必须是.C,如果使用的是汇编语言扩展名则
[单片机]
对于51单片机和arm9开发板串口通信问题的分析
距离毕设的时间还剩20天左右,这几天一直忙着做毕设,今天终于将51单片机和串口通信的问题解决了,抽出点时间,写一下遇到的问题。不然,过几天又忘了,记录下来也给后续学习的技术宅能提供一点帮助。 我的串口实验是:ARM9 控制板通过串口发送一个指令,51接受到这个指令后,根据这个指令控制小车的运行方式。(为什么不用arm9直接控制小车而采用51控制小车呢? 答:我的想法是电机驱动这一块直接交付给下一级控制器,程序简单,容易实现,况且通过串口,只需解析一个指令就可以实现)。 1、做此类串口通信一定要记得共地,我采用的方法是直接用5v直流输出引出了两个接口,分别为两个控制板供电,这样的话串口通讯的电压没有一点问题。 2、做串口通讯的
[单片机]
基于ARM7 TDMI核的MCU ADuC7020的单电源心电检测系统设计
本文给出的设计采用单电源供电,可以解决上述问题并降低产品成本,同时该设计还在基于ARM核的嵌入式系统中采用了简单实用的算法,能快速准确定位QRS复波(即计算人的心率)。该设计面向广大家庭用户而设计,体积较小,只需要一台个人电脑与之连接,便可实时地操作、观测心电信号。 心电信号采集系统的基本架构如图1所示。人体的心电信号经电极和专用导联线从人体送至系统。通过滤波和放大调节电路,微弱的心电信号被放大到合适的幅值,并处于A/D转换范围之内。 系统的控制和数据的处理由ADI公司基于ARM7 TDMI核的MCU ADuC7020来完成。这款芯片有丰富的片内外围电路,处理速度高达40MIPS,A/D转换速度可达1MSPS,具有很
[单片机]
单片机模拟I2C总线及24C02读写实例
单片机模拟I2C总线及24C02(I2C EEP ROM )读写实例(c源代码) /* 51系列单片机在使用时,有时需要模拟I2C总线, */ /* 这里举出一个实例(读写串行EEPROM 芯片 at2402) */ /************************************************************************/ /* Name:AT24C02存储器的读写程序,用到I2C总线,含相对独立的I2C总线读写函数 */ /* Language: C 51单片机 编程 语言 */ /* Platf or m: Win98, Intel Celeron 433 Processor,伟
[单片机]
杰发科技发布首款符合功能安全ASIL-D多核高主频车规MCU芯片AC7870x 布局高端MCU市场
10月10日,“智进新途·匠芯而生”2023四维图新用户大会 汽车电子 芯片 主题 论坛 在上海成功举办。会上,四维图新旗下杰发科技宣布推出首款符合功能安全ASIL-D基于 Arm Cortex R52内核的多核高主频 MCU — AC 7870x。AC7870x的发布将正式开启杰发科技在高端车规级MCU领域的布局,并有力推动 智能 汽车电子 电气 架构的创新与发展,提升自主汽车芯片在全球汽车电子市场的竞争力。 AC7870x系列芯片采用多核Arm C or tex R52内核,主频高达350MHz,可支持锁步核和Hypervisor,提高系统的冗余度和容错能力,减少故障影响,确保系统稳定运行。在功能安全方面,AC7870x
[汽车电子]