普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 4824|回复: 3

关于定时器设计的门铃有点不解 ,求大神指导

 关闭 [复制链接]

2

主题

3

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2017-9-11 13:55:08 | 显示全部楼层 |阅读模式
在做用独立按键K1控制蜂鸣器设计门铃的实验中,按下K1,蜂鸣器一直响,并没有出现“叮咚”的声音啊,
中断函数我也有点看不懂,不知道flag这个变量有什么作用,求大神讲解一下
void time0() interrupt 1
{
        n++;
        TH0=0Xff;
        TL0=0X06; //250us
        if(n==2000)                //定时0.5s  叮响0.5秒,咚响0.5秒
        {
                n=0;
                if(flag==0)
                {
                        flag=~flag;
                }
                else
                {
                        flag=0;
                        stop=1;
                        TR0=0;          //关闭定时器0
                }
        }
        if(flag==0)
        {                                           //通过改变定时计数时间可以改变门铃的声音
                ding++;                          //叮
                if(ding==1)
                {
                        ding=0;
                        beep=~beep;
                }
        }
        else
        {
                dong++;
                if(dong==2)                  //咚
                {
                        dong=0;
                        beep=~beep;
                }       
        }
}

回复

使用道具 举报

15

主题

196

帖子

503

积分

高级会员

Rank: 4

积分
503
发表于 2017-9-11 16:38:56 | 显示全部楼层
1        假设你现在状态是flag=1;n=0;进入中断后n=1,所以if(n==2000) 与if(flag==0)条件不满足,执行else
        {
                dong++;
                if(dong==2)                  //咚
                {
                        dong=0;
                        beep=~beep;
                }        
        }
响咚声;

2        只要你n<2000,if(n==2000) 与if(flag==0)条件不满足,响咚声;
3        一旦n=2000,因为假定flag=1;此时执行else
                {
                        flag=0;
                        stop=1;
                        TR0=0;          //关闭定时器0
                }
此时,flag=0跳转执行
if(flag==0)
        {                                           //通过改变定时计数时间可以改变门铃的声音
                ding++;                          //叮
                if(ding==1)
                {
                        ding=0;
                        beep=~beep;
                }
        }
发出/叮声,因此flag是声音切换标志!至于其他的声音不正常,由于你的程序没有完整贴出,别人也不好帮你!
回复 支持 反对

使用道具 举报

2

主题

3

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2017-9-11 20:55:08 | 显示全部楼层
xzf586 发表于 2017-9-11 16:38
1        假设你现在状态是flag=1;n=0;进入中断后n=1,所以if(n==2000) 与if(flag==0)条件不满足,执行else
       ...

谢谢,已经解决
回复 支持 反对

使用道具 举报

0

主题

1

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2019-6-24 15:38:40 | 显示全部楼层
楼主你好,能不能把你的源程序发一下,我现在也在弄这个
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-26 15:24 , Processed in 0.091374 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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