天嵌 ARM开发社区

 找回密码
 注册
查看: 2196|回复: 5

蜂鸣器问题

[复制链接]
hayvane 发表于 2010-7-15 22:41:11 | 显示全部楼层 |阅读模式
我看了裸奔的第一章,关于蜂鸣器的测试。我把'+'改成=号,蜂鸣器的确是可以加,也可以减了,也可以退出,都是正常的
我继续改了两个地方, freq+=10,和 freq_=10,  把这两处的10改为了20, 然后编译下载, 加减是每次加减20,但是当我减到底,按加没有反映了,按ESC也不能退出。 当我按加 按到顶2000后,按减 可以减,但是 按ESC 不能退出 ,请问是什么原因呢? 哪位能帮我解释下。谢谢
 楼主| hayvane 发表于 2010-7-17 09:00:33 | 显示全部楼层
1# hayvane


怎么没人回答哦
 楼主| hayvane 发表于 2010-7-17 11:13:01 | 显示全部楼层
我用的程序就是TQ2440开发板的 测试测试程序。 按照裸奔的第一章里面讲改蜂鸣器部分修改的。 + 号改为了=号, 只是我多改了一个部分 就是把 里面的10改为了20
/****************************************************************************
【功能说明】蜂鸣器PWM测试
****************************************************************************/
void BUZZER_PWM_Test( void )
{
        U16 freq =800;// lci  1000 ;
       
        Uart_Printf( "\nBUZZER TEST ( PWM Control )\n" );
           Uart_Printf( "Press +/- to increase/reduce the frequency of BUZZER !\n" ) ;
        Uart_Printf( "Press 'ESC' key to Exit this program !\n\n" );
       
        Buzzer_Freq_Set( freq ) ;

    while( 1 )
    {
                U8 key = Uart_Getch();

                if( key == '=' )                                      //此处改为了=号
                {
                        if( freq < 2000 )  //lci  20000
                                freq += 20 ;       //此处10 改为了20

                               
                        Buzzer_Freq_Set( freq ) ;
                }

                if( key == '-' )
                {
                        if( freq > 11 )
                                freq -= 20 ;      //此处10 改为了20
                               
                        Buzzer_Freq_Set( freq ) ;
                }
               
                Uart_Printf( "\tFreq = %d\n", freq ) ;
                if( key == ESC_KEY )
                {
                        Buzzer_Stop() ;
                        return ;
                }

        }
其他的没有变动  出现了我发帖描述的问题

}
droiing 发表于 2010-7-27 12:32:49 | 显示全部楼层
本帖最后由 droiing 于 2010-7-27 12:35 编辑

if( key == '-' )
                {
                        if( freq > 21 )
                                freq -= 20 ;                                
                        Buzzer_Freq_Set( freq ) ;
                }

u16是无符号整型
因此0-1=65535,65535+1=0
你在if判断的时候11-20=65505
然后再加时
if( freq < 2000 )  //lci  20000
           freq += 20 ;   
无法进行操作
xiaoya 发表于 2012-3-26 16:03:37 | 显示全部楼层
楼上正解!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-18 23:02 , Processed in 1.062506 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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