标题: 13行的单片机呼吸灯程序 [打印本页]

作者: axiongzhang    时间: 2020-5-5 19:10
标题: 13行的单片机呼吸灯程序
/*******最简单的延时呼吸灯**********/
/****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--);
}

作者: axiongzhang    时间: 2020-5-5 19:18
用延时是最简单的,仅供误乐,我是菜鸟,用定时加中断,程序比较复杂,想到这个程序,亲测很有用,晶振12MHZ
作者: wfqxgw    时间: 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份之中,高低电平所占的份数多少就是占空比数。
}


作者: axiongzhang    时间: 2020-11-13 14:27
wfqxgw 发表于 2020-5-10 22:11
我也有一个简单原创的。
可以调任意频率周期与占空比,工作原理就是一个周期的方波,将其分割成若干份,再 ...

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1