注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

quietheart

真正的幸福是来自内心的平定、安静、自在

 
 
 

日志

 
 

avr利用pwm控制led光暗及峰鳴器音量大小  

2008-04-15 11:20:55|  分类: 技术资料 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
avr利用pwm控制led光暗及峰鳴器音量大小
2007年08月14日 星期二 11:50

//ICC-AVR application builder // Target : M16  

// Crystal: 4.0000Mhz  

#include <iom16v.h>  

#include <macros.h>  

#define uchar unsigned char

#define uint unsigned int

void port_init(void);

void timer0_init(void);

void init_devices(void);

void delay_short(uint t);

uchar scan_key(void);

void port_init(void)  

{  

PORTA = 0x00;  

DDRA   = 0x00;  

PORTB = BIT(PB3);  

DDRB   = BIT(PB3);  

PORTC = 0x00; //m103 output only  

DDRC   = 0x00;  

PORTD = 0x00;  

DDRD   = 0x00;  

}  

// WGM: PWM Phase correct

// desired value: 1KHz

// actual value:   0.980KHz (-2.0%)

void timer0_init(void)  

{  

TCCR0 = 0x00; //stop  

TCNT0 = 0x01; //set count  

OCR0   = 0xFF;   //set compare  

TCCR0 = 0x62; //start timer ; 相位修正, 8分頻

}  

//call this routine to initialize all peripherals  

void init_devices(void)  

{  

//stop errant interrupts until set up  

CLI(); //disable all interrupts  

port_init();  

timer0_init();  

MCUCR = 0x00;  

GICR   = 0x00;  

TIMSK = 0x00; //timer interrupt sources  

SEI(); //re-enable interrupts  

//all peripherals are now initialized  

}

void delay_short(uint t) // 短延時

{

   uint i;

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

}

uchar scan_key(void)   // 按鍵掃瞄

{  

   uchar v;

   v = 0;      

   if ((PIND & 0x07) != 0x07)

   {

   if ((PIND & 0x01) == 0)  

   {

    v = 1;

     delay_short(1000);   

   }

   if ((PIND & 0x2) == 0)  

   {

     v = 2;

     delay_short(1000);   

   }

   if ((PIND & 0x4) == 0)  

   {

     v = 3;

     delay_short(1000);   

   }

   };

   while((PIND & 0x07) != 0x07);    // 判斷按鍵是不是放開    

   return v;   

}

void main(void)  

{   

uchar key, OCR0_V;

init_devices();  

OCR0_V = 0xff;

while(1)

{

    key = scan_key();

    if (key > 0)

    {

      if (key==1) // 減少佔空比

     {  

       OCR0_V -= 10;

       OCR0 = OCR0_V;

     };

      if (key==2) // 增加佔空比

     {  

       OCR0_V += 10;

       OCR0 = OCR0_V;

     };     

      if (key==3) // 全黑,佔空比為100%  

     {  

       OCR0_V = 0xff;

       OCR0 = OCR0_V;

     };       

    }

};  

}  

實驗板接線:

PB3 -----> JA.1 及 JM

PD0 -----> K1

PD1 -----> K2

PD2 -----> K3

TCNT0的初始值的计算和设置,

根据myhk007 提供的算法

最原始的方法:

以T0记到255溢出为例,如果AVR的主频是8M,T0为1024分频的话,那么T0每加1,需要的时间就是1024/8000000,加255次的总共延时就是1024/8000000*255,依次类推。


网友评论:
12008年03月16日 星期日 11:57
我是厦门丞隆电子是一家专业生产工字型电感的生产企业,如果你有需要欢迎与我联系.

联系电话:13205943033--13850220980
传真:0594--6238882
邮箱:ZHJINHUANG@126.COM


©2008 Baidu



引文来源  avr利用pwm控制led光暗及峰鳴器音量大小_hebut
  评论这张
 
阅读(294)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018