原创 manymany-2440裸机篇之5 PWM控制蜂鸣器

2009-6-8 00:35 3742 5 8 分类: MCU/ 嵌入式

//***************************************************
//manymany-2440裸机篇之5 PWM控制蜂鸣器
//***************************************************

//目的:掌握PWM的使用,更好的利用PWM
//***************************************************
//功能:PWM控制蜂鸣器
//接口:GPG0 -> KEY1
//          GPG3 -> KEY2
//          GPG5 -> KEY3
//          GPB0 -> 蜂鸣器
//********************************************************

//PWM工作原理:
//1,启动PWM定时器:
//       启动完毕后,TCNTn开始倒计数,当TCNTn具有与TCMPn相
//       同值时,TOUTn的逻辑电平有低到高,当TCNTn到达0时,
//       将产生定时器中断请求 ,通知CPU定时器操作以完成,此
//       时自动重载控制位使能,TCNTBn的值会自动载入到TCNTn
//       寄存器中,并开始下一轮的操作周期
//2,调制PWM:
//       系统中PWM脉冲频率由TCNTBn决定,PWM脉冲宽度则
//       由TCMPBn的值来决定,而占空比即为TCMPn/TCNTn。
//********************************************************
//Designed by: http://blog.ednchina.com/Manymany/
//2009-05-19
//********************************************************

#include "2440addr.h"
#include "2440lib.h"
#include "def.h"


void Freq_Set( U32 freq );
void Stop( void );
void PWM_Test( void );


void xmain(void)       //主函数
{
     ChangeClockDivider(3,1);       //1:3:6
     ChangeMPllValue(127,2,1);     //405MHZ
     Port_Init();          //端口初始化
     Isr_Init();            //中断初始化
 
     PWM_Test();    //PWM测试函数
 
}
//*******************************************************
//一般PWM定时器的启动步骤如下:
//1,将初始值写入到TCNTBn和TCMPBn中。
//2,设置对应定时器的自动重载位。
//3,设置对应定时器的手动更新位,反向器设置为off状态。
//4,设置对应定时器的启动位来启动定时器,同时清除手动更新位。
//*******************************************************

           //定时器0频率设置函数 
void Freq_Set( U32 freq )
{
     rGPBCON &= ~3;     //GPBCON0为10,为特殊功能,设置为定时器0
     rGPBCON |= 2;         //注意不是普通输出!!
  
     rTCFG0 &= ~0xff;     //TCFG0定时器配置寄存器0  
     rTCFG0 |= 15;           //设置定时器0的预分频值为15 
 
           //TCFG1定时器配置寄存器1 //设置定时器0的MUX输入为1/8
     rTCFG1 &= ~0xf; 
     rTCFG1 |= 2;   
 
     rTCNTB0 = (PCLK>>7)/freq;     // 将初始值写入到TCNTBn和TCMPBn中
     rTCMPB0 = rTCNTB0>>1;        // 50%
 
     rTCON &= ~0x1f;              //TCON定时器控制寄存器,0b11101011,


                                            //定时器死区操作停止,
     rTCON |= 0xb;         //定时器0自动加载开,定时器0输出反向器关,手动更新
 
     rTCON &= ~2;    //启动定时器0,同时清除手动更新位。
}
//************************************************************   
        //关闭定时器1中断函数
void Stop( void )
{
     rGPBCON &= ~3;       //设置GPB0为01,普通输出
     rGPBCON |= 1;
     rGPBDAT &= ~1;
}


           //PWM测试函数
void PWM_Test( void )
{
     U16 freq = 1000 ;
     Freq_Set( freq ) ;         //频率设置函数 
  
    while( 1 )
    {
         U8 key;  
         key="rGPGDAT";     //读取按键
  
        if(!(key & (1<<0)))       //判断是否是按键1
        {
            if( freq < 20000 )         //假如是则频率加
            freq += 30 ;  
            Freq_Set( freq ) ;
         }


         if(!(key & (1<<3)))       //判断是否是按键2
         {
            if( freq > 150 )             //假如是则频率减
            freq -= 30 ;  
            Freq_Set( freq ) ;
         }
  
  
         if(!(key & (1<<5)))       //判断是否是按键3
          {
             Stop() ;         //停止
           }


     }


}


/*这里是整个工程文件压缩包rariconicon考虑到很多场合要用到直流电机,而且直流电机更能清晰的表现PWM的功能,manymany会迟点推出manymany-2440裸机篇之 PWM控制直流电机,对PWM补充完整点吧请大家多多关注iconicon。*/



 

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1445499 2011-7-22 17:11

很好,很强大

用户1614106 2010-9-10 20:42

谢谢分享

用户578360 2009-9-1 16:25

怎么烧进去没反应呢?
相关推荐阅读
用户188963 2009-08-28 16:56
我来猜09年全国电赛小车的题目
我来猜09年全国电赛小车的题目 小车+无线收发模块+2米卷尺+光电传感器+继电器 1.无线模块用来设置小车的行驶轨迹,圆的,方的,任意轨迹的。2.2米卷尺和光电传感器:小车行驶速度,距离。3.壁障4....
用户188963 2009-07-20 09:39
manymany-2440裸机篇之8 ADC模数转换
//manymany-2440裸机篇之8 ADC模数转换//***************************************************//为了对温度,压力,流量,速度,位移...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之开篇
                              manymany-2440裸机篇之开篇          manymany前段时间买了块广州友善之臂的mini2440开发板,现在想学习AR...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之1 流水灯与蜂鸣器
//***************************************************//manymany-2440裸机篇之流水灯与蜂鸣器//*******************...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之2 下载与调试
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />玩裸机的时候,肯定要用到下载与调试,...
用户188963 2009-06-08 00:36
manymany-2440裸机篇之3 按键点亮LED
//***************************************************//manymany-2440裸机篇之3 按键点亮LED//*****************...
我要评论
3
5
关闭 站长推荐上一条 /3 下一条