简易呼吸灯c语言程序,呼吸灯 - 单片机教程 - C语言网

1.双定时器呼吸灯实现

呼吸灯的实现原理就是让小灯的IO端口在一段时间里PWM由大到小变化的占空比输出,接着又由小到大的占空比输出,小灯显示效果就是时亮时暗地交替闪烁。

首先我们用定时器0定时0.1ms,全局变量pwm在其中断函数里执行简单的从0到99的循环自加,这样周期就是10ms。

假如主函数里我们这样执行if(pwm<90)P0=0xFF;

else P0=0x00;

那么IO端口输出的一直是周期为10ms占空比为90%的波形,这样8盏小灯一直是处于较暗的显示状态不变,要想实现呼吸灯,就要不停改变PWM波形的占空比。

所以我们使用定时器1来做间隔10ms地改变占空比,我们再定义一个全局变量highval,这个变量每隔10ms就会在定时器1中断函数中实现加1或者减1,加到99时又从99减回到0,减回到0又从0开始加到99的这样循环过程,大家回去研究左右往复循环流水灯的代码就会明白都是一样的思路。

然后主函数这样执行if(pwm

else P0=0x00;

效果图如下

ed42c8ac010a69f84089947e88b0e7eb.png

······

2351fd67bc23e2d3f79b57ab282ce7cd.png

2.代码#include 

#include  //详见第六章第8讲

#include 

u8 pwm=0,highval=99;

void main()

{

LED_Init();          //初始化LED硬件模块

EA = 1;              //闭合总中断开关

TIM0_Init(100,9);    //定时0.1ms,9是微调使定时时间更精确

TIM1_Init(10000,10); //定时10ms,10是微调使定时时间更精确

while(1)

{

if(pwm

else P0=0x00;

}

}

void TIM0_IRQHandler() interrupt 1

{

TH0 = T0RH;        //重新加载重载值

TL0 = T0RL;

pwm++;

if(pwm>=100)pwm=0; //pwm在0~99之间间隔0.1ms变化,周期就为10ms

}

void TIM1_IRQHandler() interrupt 3

{

static u8 dir;

TH1 = T1RH;          //重新加载重载值

TL1 = T1RL;

if(dir==1)highval--; //占空比逐渐减少,小灯逐渐变亮

if(highval==0)dir=0;

if(dir==0)highval++; //占空比逐渐增加,小灯逐渐变暗

if(highval>=99)dir=1;

}

本章内容就告一段落了,定时器功能几乎是开发中必不可少的模块,灵活使用会使执行效率更加高效,大家有时想出的一些原创题目多使用定时器来训练,加强对这个工具的利用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python学习---面向对象的学习[深入]

类的深入学习 a. Python中一切事物都是对象 b. class Foo: pass obj Foo() # obj是对象&#xff0c;Foo类 # Foo类也是一个对象&#xff0c;type的对象 c. 类都是type类的对象 type(..) “对象”都是以类的对象 类() d. 类实际上是type类型的对象&#xff0c;所有的…

TCP/IP模型

应用层&#xff08;会话层&#xff0c;表示层&#xff0c;应用层&#xff09; HTTP FTP DNS 传输层&#xff08;传输层&#xff09; TCP UDP 网际层&#xff08;网络层&#xff09; IP 网络接口层(物理层…

c语言银行卡管理系统程序设计报告,《c语言程序设计》课程设计报告-职工信息管理系统.doc...

《c语言程序设计》课程设计报告-职工信息管理系统.doc还剩24页未读&#xff0c;继续阅读下载文档到电脑&#xff0c;马上远离加班熬夜&#xff01;亲&#xff0c;很抱歉&#xff0c;此页已超出免费预览范围啦&#xff01;如果喜欢就下载吧&#xff0c;价低环保&#xff01;内容…

今年,自动驾驶卡车将在无人驾驶的情况下上路

文章来源&#xff1a;IEEE电气电子工程师Photo: TuSimpleFirst in Freight: In 2021, San Diego–based startup TuSimple plans to deploy autonomous trucks that drive themselves from pickup to delivery without anybody on board.Tesla、Uber、Cruise和Waymo等公司承诺&…

Leetcode--102. 二叉树的层次遍历

给定一个二叉树&#xff0c;返回其按层次遍历的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果&#xff1a; [ [3], [9,20], [15…

C语言求一个数组中第k大的数,leetcode | Median of Two Sorted Arrays 寻找2个有序数组中第k大的值...

There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays.The overall run time complexity should be O(log(m n)).分析本题更经典通用的描述方式时&#xff1a;给定2个有序数组&#xff0c;找出2个数组中所有元素中第…

线上服务CPU100%问题快速定位实战

功能问题&#xff0c;通过日志&#xff0c;单步调试相对比较好定位。 性能问题&#xff0c;例如线上服务器CPU100%&#xff0c;如何找到相关服务&#xff0c;如何定位问题代码&#xff0c;更考验技术人的功底。 58到家架构部&#xff0c;运维部&#xff0c;58速运技术部联合进行…

最新研究:超级人工智能,从理论上就无法控制

文章来源&#xff1a;机器之心作者&#xff1a;Charles Q. Choi 编辑&#xff1a;泽南、杜伟近日&#xff0c;一项新的研究发现&#xff0c;从理论上来看&#xff0c;人类不可能控制超级人工智能。更为糟糕的是&#xff0c;这项研究也明确了人类无法在这种 AI 生成之时发现它…

Leetcode--5274. 停在原地的方案数

有一个长度为 arrLen 的数组&#xff0c;开始有一个指针在索引 0 处。 每一步操作中&#xff0c;你可以将指针向左或向右移动 1 步&#xff0c;或者停在原地&#xff08;指针不能被移动到数组范围外&#xff09;。 给你两个整数 steps 和 arrLen &#xff0c;请你计算并返回&…

c语言多个子函数声明,C函数在多个源文件中的声明和定义

这是src1.c的内容&#xff1a;#include extern int w;//int go(char); // no need to declare here. WHY????main(){char af;go(a);printf("%d\n", w);}这是src2.c的内容&#xff1a;#include int w 99;int go(char t){printf("%c\n%d\n",t,sizeof(t)…

Leetcode--200. 岛屿数量

给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;计算岛屿的数量。一个岛被水包围&#xff0c;并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010…

看懂2020年智能浪潮,我们从百度和谷歌的AI足迹出发

来源&#xff1a; 脑极体2020年已经过去&#xff0c;无论我们过得顺遂平安&#xff0c;还是过得无比艰难&#xff0c;我们应该都会记住这一年。回顾2020年&#xff0c;在这个不同寻常的疫情之年&#xff0c;科技成为人类抗击疫情的关键&#xff0c;而人工智能技术投入抗疫战争之…

公交换乘系统c语言,公交换乘的简单实现(源码)

最初是做2004年某期《程序员》杂志上的一道题&#xff0c;叫“洞穴探险”&#xff0c;结果写着写着就做到公交换乘的思路上去了。看来做GIS做久了&#xff0c;都成习惯了。后来工作忙&#xff0c;就扔下了。最近翻看以前自娱自乐时写的东东&#xff0c;看到了这段代码&#xff…

记使用talend从oracle抽取数据时,数字变为0的问题

数据源为oracle&#xff0c;字段类型为number。 发现通过mainline连接到一个logrow控件&#xff0c;输入的该字段的值为0 经过多次测试还是没发现有什么规律。 通过查看代码发现有这一句内容。 if (row2.ID ! null) { //strBuffer_tLogRow_1.append(row2.ID.setScale(-127,java…

Leetcode--494. 目标和

给定一个非负整数数组&#xff0c;a1, a2, ..., an, 和一个目标数&#xff0c;S。现在你有两个符号 和 -。对于数组中的任意一个整数&#xff0c;你都可以从 或 -中选择一个符号添加在前面。 返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例 1: 输入: nums…

C语言int r(int m),INT(M)表示什么意思?

根据官方文档描述&#xff0c;int(M)中的M表示数据显示的宽度&#xff0c;与实际存储的长度无关。1、也就是int(3)和int(11)能够存储的数据是一样的&#xff0c;都是从-2147483648到2147483647(或者0-4294967295)。2、int(M)只有联合zerofill参数才能有意义&#xff0c;否则int…

2021年值得关注的人工智能与机器学习的五大趋势

文章来源&#xff1a;科技心时代人工进行智能和机器可以学习是市场上的热门专业技术&#xff0c;其重要性在2020年达到顶峰&#xff0c;这两种信息技术发展已经到了广泛应用在各行业领域&#xff0c;其范围从电子商务到量子计算管理系统&#xff0c;从医疗诊断分析系统到消费电…

关于java子类继承以及final问题总结

(1)子类和父类如果在同一个包内&#xff0c;则子类可以继承父类的除private以外的所有成员变量和方法&#xff0c;并且权限不变&#xff1b; (2)子类和父类如果不在同一个包内&#xff0c;则子类可以继承父类的public和protected权限的成员变量和方法&#xff0c;不能继承友好型…

物理层基本概念

物理层解决如何在连接各种计算机的传输媒体上传输数据比特流 物理层定义了一些传输媒体接口的标准 定义了哪些标准&#xff1f; 1.机械特性 定义物理连接的特性&#xff0c;例如接口形状&#xff0c;引线数目&#xff0c;引脚数量等 2.电气特性 规定传输二进制位时&#…

qt android 应用程序图标大小,vs+qt 设置应用程序图标

LaTeX 学习记录4&#xff0d;字体设置LaTeX 学习记录4&#xff0d;字体设置 % 导言区\documentclass[10pt]{ctexart}%10pt为字体大小%使用ctexart后就可以不引用ctex宏包了\title{\heiti My LaTeX Document}%字体为黑体\author{\kaishu forever}%字体为楷书\date{\today}% 正文…