数码相框项目模块【四】 TIMER

本文介绍了如何使用定时器4实现1ms中断,并结合定时器1进行音乐播放功能。详细讲解了定时器4的初始化、分频设定、中断处理以及音乐播放的原理和代码实现,包括蜂鸣器的控制、音调频率设定等。通过示例代码展示了如何集成这两个模块,便于在实际项目中应用。
摘要由CSDN通过智能技术生成

首先,要进行实现定时功能,选择没有输出管教的内部定时器 timer 4

timer 4 定时功能实现

一、首先由规格书可知,定时器4是需要先进行8位的 prescaler 和 4位的 clock divider 的分频设定,其相应的寄存器分别为TCFG0 和 TCFG1
二、根据之上分频器计算出的频率,因本模块取1ms产生一次中断,所以可求得总共所需的次数,赋值给TCNTB4
三、在启动定时器之前,要进行手动更新操作,设置寄存器 TCON,在启动时,要进行清除手动更新位,配置 TCON寄存器

注意点:当赋值给TCNTB4时,该值也将拷贝到 TCNT4中,TCNT4的值每次减1,当其值为0时,产生一次中断,另外在进行启动定时器之前,要进行中断的相应寄存器的设置


利用定时器功能实现音乐播放

一、选择定时器1进行操作,在开发板上找到蜂鸣器LS1,在电路板上找到其位置,然后在核心板上找到其端口GPB1,设置为时钟TCOUT1
二、在初始化操作时,根据参数传进的频率来进行设置 TCNTB1寄存器的值,TCMPB1的值可由自己手动设置,同样地,TCNTB1和TCMPB1的值会分别拷贝给TCNT1和TCMP1,当TCNT1的值减为0或TCNT1的值和TCMP1相等时,产生电平转换
三、定时器的启动步骤,和定时器4一样
四、利用函数的调用来实现时间调用的功能
五、根据传递进来音调的不同和持续时间的长短可以谱写出美妙的音乐


因定时器与音乐播放紧密相关,将代码合成一个模块,便于操作

TIMER.C

Code:
  1. #include "2440addr.h"   
  2. #include "uart.h"   
  3. #include "key.h"   
  4. #include "led.h"   
  5. #include "timer.h"   
  6. #include "song.h"   
  7.   
  8. static int div2ms, div10ms;   
  9. static volatile unsigned int timer1mscnt,timer10mscnt;   
  10.   
  11. /*  
  12. Function  name  :   Timer4_Handle  
  13. Description     :   deal with the interrruption of Timer 4  
  14. Input parameter :   none  
  15. Return          :   none          
  16. Others          :   none                                              
  17. */  
  18.   
  19. static void __irq Timer4_Handle()   
  20. {   
  21.     rSRCPND |= (1<<14);   
  22.     rINTPND |= (1<<14);   
  23.   
  24.     if(timer1mscnt)   
  25.     {   
  26.         timer1mscnt--;   
  27.     }   
  28.          
  29.     div2ms++;   
  30.     switch(div2ms&1)     // 2个事情隔1毫秒交替执行   
  31.     {   
  32.         case 0:   
  33.             {   
  34.                 //checkkey();  // 2 毫秒执行一次   
  35.                 break;   
  36.             }   
  37.         case 1:   
  38.             {   
  39.                 set10mstimer();  // 2 毫秒执行一次   
  40.                 break;   
  41.             }   
  42.         default:   
  43.             {   
  44.                 break;   
  45.             }   
  46.     }      
  47.   
  48. }   
  49.   
  50. /*  
  51. Function  name  :   delay1ms  
  52. Description     :   delay the time ,1ms  
  53. Input parameter :   one unsigned int vlaue --- waits  
  54. Return          :   none          
  55. Others          :   none                                              
  56. */  
  57.   
  58. void delay1ms(unsigned int waits)   
  59. {   
  60.     timer1mscnt = waits;     
  61.     while(1)   
  62.     {      
  63.         if(0==timer1mscnt)   
  64.         {      
  65.             //Uart_Printf("1s delay/n");   
  66.             break;   
  67.         }   
  68.     }   
  69. }   
  70.   
  71. /*  
  72. Function  name  :   delay10ms  
  73. Description     :   delay the time ,10ms  
  74. Input parameter :   one unsigned int vlaue --- wait1ms  
  75. Return          :   none          
  76. Others          :   none                                              
  77. */  
  78.   
  79. void delay10ms(unsigned int<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值