一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 10460|回复: 27
收起左侧

[其他综合] 自己写了一个PWM呼吸灯程序,请各位拍砖。

[复制链接]
发表于 2013-5-19 16:45 | 显示全部楼层 |阅读模式
#include <reg52.h>
#define LED_on P1=0x00
#define led_off P1=0xff
#define pwm_max 99
#define pwm_min 0
unsigned char timenum;
signed char ledpwm,ledpwm_temp,kk,ZhanKongBi=0;
bit leddirction=1,Head;
void delayms(int tt)
{
    int i;
    while(--tt>0)
{
      for(i=255;i>0;i--);
}
}
void main(void)
{
    TMOD=0x02; //BY HE 20130517
    TL0=156;   //0.1MS 12MHz
    TH0=156;
    EA=1;
    ET0=1;
    TR0=1;
    while(1)
{
     if(kk>120)
  {
      kk=0;
  }
  if(kk<ZhanKongBi)
  {
   P1=0;
   if(ZhanKongBi==0)
   {
       TR0=0;
    delayms(255);
    delayms(255);
    TR0=1;
   }
  }
  else
  {
      P1=0xff;
  }
}
}
void timer0(void) interrupt 1
{
    kk++;
    if((++timenum)>=250)         
    {
        timenum=0;
  if(leddirction)
  {
      if(++ZhanKongBi>99) leddirction=0;
      else                leddirction=1;
  }
  else
  {
      if(--ZhanKongBi<0)  leddirction=1;
      else                leddirction=0;
  }
}
}

发表于 2013-5-19 17:22 | 显示全部楼层
效果怎么样呢?
发表于 2013-5-19 19:06 | 显示全部楼层
额,发个视频吧
 楼主| 发表于 2013-5-19 19:13 | 显示全部楼层
暂无图片 发表于 2013-5-19 19:06 static/image/common/back.gif
额,发个视频吧

一破呼吸灯,渐亮渐灭,有啥视频好拍的呀。
发表于 2013-5-19 22:10 | 显示全部楼层
感觉用51好写代码少,高级蕊片寝化就一大堆代码
发表于 2013-5-22 21:09 | 显示全部楼层
原来是c啊  以为是汇编得得呢~~~还不错啦
发表于 2013-5-31 11:48 | 显示全部楼层
来个AVR TINY13A的嘛
发表于 2013-6-11 00:19 | 显示全部楼层
能不能写个可以控制多几个脚分别亮的呢?
发表于 2013-6-18 17:33 | 显示全部楼层
O4}0V68))UQ6IEM}LNAUK]W.jpg

我下面的呼吸灯程序是PB0/OC0A输出PWM,要怎么改成PB1/OC0B输出呢?


// Cpu ATTiny13
// 频率: 内部9.6000Mhz 不分频
#include <iot13v.h>
#include <macros.h>
unsigned char PWMVal;
//IO引脚初始化 
void port_init(void)
{
PORTB = 0x04; //PB2为输入
DDRB  = 0x3B; //PB0为PWM输出 上电置0
}
//Timer0初始化
//快速PWM模式 频率37.500KHz
void timer0_init(void)
{
OCR0A = 0x00;
OCR0B = 0x00;
TCNT0 = 0x01;  //设计数
TCCR0A = 0x03;  //设置Timer0为快速PWM模式3
TCCR0B = 0x01;  //启动Timer0
}
//延时N毫秒
void delay_ms(unsigned int n)
{
unsigned char a,b,c;
  for (a = 0; a<n; a++)
   for (b=0; b<10; b++)
    for (c=0; c<90; c++);
}
int main(void)
{
unsigned int tempval=0;
unsigned int keytime=0;
port_init();
timer0_init();
PWMVal = 0; //第一档
TCCR0A = 0x83; //开启PWM
while(1)
{
  OCR0A = PWMVal; //更改占空比
  PWMVal++;
  delay_ms(10);
  if(PWMVal==255)
   {
     while(1)
      {
    OCR0A = PWMVal; //更改占空比
    PWMVal--;
    delay_ms(10);
     if(PWMVal==1)    //最小值
     {
       break;    //跳出while
   }
     }
}
  }
}

发表于 2013-6-20 01:52 | 显示全部楼层
这个我之前做过!用的R G B三色做的全彩渐变呼吸灯!单色的没意思!改天发上来大家瞧瞧!

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-13 12:49 , Processed in 0.054728 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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