当前位置: 首页 > news >正文

【51单片机编写占空比按秒渐亮与渐暗】2023-10-2

昨天刚在W10上安装CH340驱动,又下载到板子上LCD1602定时器时钟程序,为了调试,调用了一个LED观察控制蜂鸣器按秒响的变量,几经调试才发觉该开发板用的是有源蜂鸣器,不用IO取反操作,直接控制IO的高低电平即可,之前论述了用51单片机定时器做时钟不准产生的原因是由于采用了阻塞式延时引起的,其实使用定时器做时钟比时钟芯片精度高一个数量级,今经下载到板子上,通过一天的观察的确走时很准确,同电脑上时钟做对比,不过应注意的是电脑时钟开自动同步功能会产生几十秒的误差,但是从早上到晚上十几个小时每小时核对都是准确的,电脑自动同步造成的差异不算。

开发板上程序调试完成后,遂产生编写占空比按秒渐亮与渐暗的念头,因为论坛上有提问不少,遂编写了如下呼吸灯程序,按秒渐亮,按秒渐灭,对这段呼吸灯程序每句都加以详细论述,一应国庆发文,二为初学铺路,请看程序:

void fanbo()
{//占空比按秒渐亮与渐灭static unsigned char t=0;static bit k=1;led=k?(Js<t?0:1):(Js>t?0:1);if(++t==50)t=0;if(Js==0)k=!k;
}

占空比之前有篇博文也写比较详细,今天再次详细论述,作为前篇补充。实现占空比要素一是频率范围即多少时间内占空比从0到100或从100到0,这里由于定时器已经开启并设定了20毫秒,因此1秒的范围就是50即定时器计数50次为1秒,这样就确定了第一个参数;二要素是生成占空比的变量对比,如当比值大于或小于时是1还是0的比例多少就是占空比,比如当两个变量进行对比,当一个变量小于另一个变量时值为0否则为1,这样就能实现占空比的调节,这样讲好似很空洞的样子,没关系,我们把值代入代码进行分析就很具体了,如上程序种的Js和t两个变量就是用来对比并实现占空比输出的,设当Js=0且t=0时三目运算符输出1赋值给LED,20毫秒时间内当t变化1到50时都不会小与Js因此一直输出1;要说明的是fanbo()函数调用是在主函数主循环内,由于主函数主循环运行时间是微秒级别的,因此t的自增比Js的20毫秒要快一个数量级,因此当t从0到50是不停变化的,在t无数个变化周期内占空比都是一样的,只有当Js发生变化时占空比才发生变化,当Js从0到50变化过程种占空比就实现了100到0的对比变化,当Js=50时则t都小于Js从而实现了一直输出0的占空比;分析到这里或许有人要问那相同的占空比不是有很多个?的确如此,相同的占空比脉冲确实有很多个,如占空比为7的有很多个且频率很高送给LED然由于其占空比不变因此LED亮度也不变,从而实现了对LED亮度的占空比调节看起来就是渐亮和渐暗的表现,当然本荔枝对占空比脉冲的频率是不加控制的,其频率会随着程序不同而不同,如主循环内程序占用时间多则调用函数的时间就长频率就低,请注意当调用函数的频率低于20毫秒时按理推导是会发生问题的。由于5M大小的限制只能录制4秒左右的呼吸灯运行也就看个大概实物运行效果。

 

上面程序声明了静态变量两个,t是实现占空比的对比变量,k是切换渐亮与渐暗的布尔变量按秒转换不同三目运算式来实现,这里必须使用静态变量,勿谓言之不予。Js是定时器公共计数变量,在我博客中常见中断设置与中断计数简练代码中,我的定时器中断代码不多写多余的代码,就是Js计数和定时器赋值,只有这样才能保证计数准确用于时钟。博文仓促间仅凭思路一挥而就是有描述不到之处,讨论不妨,或可在讨论中不断完善。 

http://www.lryc.cn/news/180253.html

相关文章:

  • OCI 发布了容器运行时和镜像规范!
  • C++学习笔记一: 变量和基本类型
  • 探索ClickHouse——同时支持导入导出功能的文件格式
  • Scipy库提供了多种正态性检验和假设检验方法
  • 去雨去雪去雾算法之本地与服务器的TensorBoard使用教程
  • 【小沐学前端】Node.js实现基于Protobuf协议的WebSocket通信
  • MySQL学习笔记24
  • objective-c 基础学习
  • 【精彩回顾】 用sCrypt在Bitcoin上构建智能合约
  • Kotlin 使用泛型
  • 深度学习 二:COVID 19 Cases Prediction (Regression)
  • UG\NX二次开发 信息窗口的4种输出方式 NXOpen::ListingWindow::DeviceType
  • mavn打包时如何把外部依赖加进去?
  • 爬虫代理请求转换selenium添加带有账密的socks5代理
  • Redis 如何实现数据不丢失的?
  • [高等数学]同济版高等数学【第七版】上下册教材+习题全解PDF
  • 【面试题精讲】Java超过long类型的数据如何表示
  • Shapiro-Wilk正态性检验(Shapiro和Wilk于1965年提出)
  • debian设置允许ssh连接
  • 【C语言经典100例题-66】(用指针解决)输入3个数a,b,c,按大小顺序输出。
  • 【STM32 CubeMX】移植u8g2(一次成功)
  • 华为云智能化组装式交付方案 ——金融级PaaS业务洞察及Web3实践的卓越贡献
  • Halcon Image相关算子(二)
  • Rust 多线程编程
  • JavaScript高阶班之ES6 → ES11(八)
  • 网页中嵌套网页制作方法
  • 系统集成项目管理总结(笔记)
  • 如何给Nginx配置访问IP白名单
  • 【VIM】VIM配合使用的工具
  • git你学“废”了吗?——git本地仓库的创建