找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2289|回复: 3
打印 上一主题 下一主题
收起左侧

13行的单片机呼吸灯程序

[复制链接]
跳转到指定楼层
楼主
ID:744744 发表于 2020-5-5 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*******最简单的延时呼吸灯**********/
/****2020-5-5******/

#include<reg51.h>
sbit LED = P3^0;
#define uint unsigned int
#define uchar unsigned char
uint j,n;
void delay_ms(uint n);
main()
{
while(1)
{      
  j++;
  LED = ~LED;       // 开机LED=1,取反后=0, j满一个循环后,再次取反后为1,
  delay_ms(300-j); //3ms
     LED = ~LED;    //取反,打开  第二个循环为关
  delay_ms(j);    //延时j,
  if(j == 300)
  {
   j = 0;
   LED = ~LED;
  }      
}  
}
void delay_ms(uint n)
{
uchar b,c; uint d;
for(c=1;c>0;c--)
        for(b=20;b>0;b--)
      for(d=n;d>0;d--);
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:744744 发表于 2020-5-5 19:18 | 只看该作者
用延时是最简单的,仅供误乐,我是菜鸟,用定时加中断,程序比较复杂,想到这个程序,亲测很有用,晶振12MHZ
回复

使用道具 举报

板凳
ID:419909 发表于 2020-5-10 22:11 | 只看该作者
我也有一个简单原创的。
可以调任意频率周期与占空比,工作原理就是一个周期的方波,将其分割成若干份,再根据高,低电平所占的份数来决定输出占空比。份数越多。占空比越精确。以下代码就是将一个周期内的方波分割成100份,用count累加,即count累加100次为一个周期,在这个周期内计数时,persent用于设置占空比。count数值小于persent时就输出高电平,不是就输出低电平,这个函数可以放在任意位置,要更精准,也可以放在定时器内执行。
主要代码:/***********************
count:用于计数。
persent: 设置占空比,值为1-100,这个可根据所设置的份数适当改变
PWM_OUT:用于输出PWM滤形的引脚。
***********************/
void Adj_PWM(unsigned int p)
{
static unsigned int count, persent;
persent=p;
if(count<100) count++;else count=0;  // 100以内累加。
if(count<=persent) PWM_OUT=1; else PWM_OUT=0; 设置占空比。即100份之中,高低电平所占的份数多少就是占空比数。
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:744744 发表于 2020-11-13 14:27 来自手机 | 只看该作者
wfqxgw 发表于 2020-5-10 22:11
我也有一个简单原创的。
可以调任意频率周期与占空比,工作原理就是一个周期的方波,将其分割成若干份,再 ...

师傅的这个思路更新颖,更简洁,不会在whil过程中占用资源。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表