搜索
bottom↓
回复: 34

PWM和电阻排控制LED亮度 (菜鸟制作)

[复制链接]

出0入0汤圆

发表于 2006-3-7 10:02:27 | 显示全部楼层 |阅读模式
//ICC-AVR application builder : 2006-3-5 20:09:53

// Target : M8

// Crystal: 4.0000Mhz



#include <iom8v.h>

#include <macros.h>

#define bitset(var, bitno) ((var) |= (1 << (bitno)))

#define bitclr(var, bitno) ((var) &= ~(1 << (bitno)))

#define uchar unsigned char

#define uint unsigned int

#define suchar static unsigned char

#define suint static unsigned int

suint pot_vol;

suchar uchsw;num;

suchar pwm;

void port_init(void)

{

PORTB = 0x00;

DDRB  = 0x02;

PORTC = 0x00; //m103 output only

DDRC  = 0x00;

PORTD = 0x00;

DDRD  = 0x00;

}



//TIMER1 initialisation - prescale:1

// WGM: 8) PWM phz freq correct, TOP=ICRn

void timer1_init(void)

{TCCR1B = 0x00; //stop

TCNT1H = 0x00; //setup

TCNT1L = 0x00;

OCR1AH = 0x00;

OCR1AL = 0x00;

OCR1BH = 0x00;

OCR1BL = 0x0A;

ICR1H  = 0x00;

ICR1L  = 0xCE;                                   //18KHZ

TCCR1A = 0x82;

TCCR1B = 0x19; //start Timer

}



//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

port_init();

timer1_init();



MCUCR = 0x00;

GICR  = 0x00;

TIMSK = 0x00; //timer interrupt sources

SEI(); //re-enable interrupts

//all peripherals are now initialized

}

void delay(void)

{

uchar i;

uchar j;

for(i=0;i<150;i++)

{

for(j=0;j<150;j++)

asm("nop");}



}

void pwmopen(uchar i)

{



//  TCCR1A = 0x82;

// TCCR1B = 0x19;

//pwm=OCR1AL;

//if(pwm==i) return;

// else if(pwm>i) pwm--;

//      else          pwm++;

OCR1AH=0;

OCR1AL=i;  

}

void clpwm()                                                               

{       

           TCCR1B=0x00;                                                       

        TCCR1A=0x00;

        bitclr(PORTB,1);

    TCNT1H=0;TCNT1L=0;

}

void auto_mode(void)

{

unsigned char i;

// bitset(PORTD,0);

//bitclr(PORTD,1);

// while(uchsw)

//{



for (i=0;255>i; i++)

  {

  if ((PINC&0x02)|(PINC&0x04))  break;

  pwmopen(i);

  delay();

  }

for (i=255;0<i; i--)

  {

  if ((PINC&0x02)|(PINC&0x04)) break;

  pwmopen(i);

  delay();

  }

}

static unsigned char pot_charge(void) //电位器AD转换。

{

//uchar i;

ADMUX=0;

ADCSR=6;                                        //1/64 prescaler

ADCSR|=(1<<ADEN);ADCSR|=(1<<ADSC);

WDR();

        do

        {

        ;

        }while(!(ADCSR&(1<<ADIF)));

//if(vol_avg!=2)

//{

pot_vol=ADCL;

pot_vol|=(uint)(ADCH<<8);

pot_vol=(uchar)(pot_vol/4);

//vol_avg++;

// vol_to=vol_to+(uint)pot_vol;

// return;

//}

// else

// {



// adc_l=(uchar)(vol_to/2);//high bit

// vol_to=0;

// }

return pot_vol;

}



void manu_mode(void)

{

//unsigned char i;

//bitset(PORTD,1);

//bitclr(PORTD,0);



//if((PINC&0x02))



pwmopen(pot_charge());



}

void sw_check(void)

{

if (!(PINC&0x02)){uchsw=1;auto_mode();}//自动模式

else {uchsw=0;manu_mode();}//手动模式

}





void vlr_v(void)

{

num=1;



pot_vol=0;

uchsw=0;

pwm=0;



}

void main(void)

{



init_devices();

vlr_v();

TCCR1B=0x00;        //停止PWM                                               

TCCR1A=0x00;

while(1)

{

if (!(PINC&0x04))

{

PORTD=0;

DDRD=0;

TCCR1A = 0x82; //打开PWM

  TCCR1B = 0x19;

  sw_check();

  }

else

{

clpwm();

bitclr(PORTB,1);

for(num=1;0x80>num;num=num*2) //由亮变暗

{

if (!(PINC&0x04)) break;

PORTD=num;

DDRD=num;

delay();

delay();

delay();

}

for(num=0x80;1<num;num=num/2)//由暗变亮

{

if (PINC&0x04) break;

PORTD=num;

DDRD=num;

delay();

delay();

delay();

}

}

}

}



在公司无法上传文件,晚上把仿真文件上传!

出0入0汤圆

 楼主| 发表于 2006-3-7 13:51:10 | 显示全部楼层
仿真文件点击此处下载armok01105906.rar

出0入0汤圆

发表于 2006-8-7 02:19:59 | 显示全部楼层
不错...支持一下..

出0入0汤圆

发表于 2008-5-14 10:59:27 | 显示全部楼层
支持,已下载,看不到明显现象。

出0入0汤圆

发表于 2008-5-14 11:24:34 | 显示全部楼层
老大又出新作了。哈哈顶一个。

出0入0汤圆

发表于 2008-5-15 11:02:57 | 显示全部楼层
这么好的东东,当然顶一下

出0入0汤圆

发表于 2008-5-25 23:51:46 | 显示全部楼层
ddddddddddddddddddddd

出0入0汤圆

发表于 2008-6-4 09:53:54 | 显示全部楼层
cool

出0入0汤圆

发表于 2008-6-4 23:21:32 | 显示全部楼层
占空比变化不明显啊,从0%到100%再从100%到0%会有比较好的效果哦,,
已经做的不错了,加油!

出0入0汤圆

发表于 2008-6-12 21:27:01 | 显示全部楼层
顶  顶  顶!!!

出0入0汤圆

发表于 2008-6-15 08:44:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-6-17 15:29:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-6-24 10:43:03 | 显示全部楼层
不错,

出0入0汤圆

发表于 2008-7-4 17:19:15 | 显示全部楼层
这个是好东西,最近正在学,感谢楼主了

出0入0汤圆

发表于 2008-7-4 18:08:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2008-8-4 15:08:34 | 显示全部楼层
谢谢楼主

出0入0汤圆

发表于 2009-1-16 13:14:27 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-3-9 21:08:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-3-25 12:33:03 | 显示全部楼层
不错 谢谢

出0入0汤圆

发表于 2009-4-25 16:44:05 | 显示全部楼层
VERY GOOD

出0入0汤圆

发表于 2009-9-16 01:11:16 | 显示全部楼层
记号

出0入0汤圆

发表于 2009-9-30 17:22:53 | 显示全部楼层
jh

出0入0汤圆

发表于 2010-1-22 10:25:35 | 显示全部楼层
留个爪子

出0入0汤圆

发表于 2010-7-22 19:45:49 | 显示全部楼层
学习!!

出0入0汤圆

发表于 2010-7-28 15:34:12 | 显示全部楼层
回复【楼主位】alisha  
-----------------------------------------------------------------------

mark

出0入0汤圆

发表于 2010-7-28 16:30:48 | 显示全部楼层
谢谢先知

出0入0汤圆

发表于 2010-7-28 17:08:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-17 18:19:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-21 07:07:54 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2011-7-19 19:23:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-3 18:54:25 | 显示全部楼层
好东西!!谢谢分享

出0入0汤圆

发表于 2011-12-6 22:00:28 | 显示全部楼层
mark!

出0入0汤圆

发表于 2012-2-13 18:53:21 | 显示全部楼层
有无rgb混色呢?

出0入0汤圆

发表于 2012-8-1 11:54:55 | 显示全部楼层
不错 谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 20:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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