找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5848|回复: 3
打印 上一主题 下一主题
收起左侧

单片机门铃程序设计 按键按下触发蜂鸣器门铃“叮咚”响

[复制链接]
跳转到指定楼层
楼主
ID:487574 发表于 2019-3-9 23:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/* 下载程序后按键K1按下就会触发蜂鸣器门铃“叮咚”响  */

#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit beep=P1^5;
sbit k1=P3^1;
u8 ding,dong,flag,stop;
u16 n;
void delay(u16 i)
{
        while(i--);
}
void time0init()          //定时器0初始化
{
        TMOD=0X01;         //定时器0 方式1
        TH0=0Xff;
        TL0=0X06; //定时250us
//        TR0=1;
        EA=1;
        ET0=1;
}
void biaohaoinit()           //各个标号初始化
{
        ding=0;                //叮声音  计数标志
        dong=0;                //咚声音  计数标志
        n=0;                //定时0.5s标志
        flag=0;
        stop=0;           //结束标志
}
void main()
{
        time0init();
        biaohaoinit();
        while(1)
        {
                if(k1==0)           //判断按键是否按下
                {
                        delay(1000);  //消抖
                        if(k1==0)
                        {
                                TR0=1;        //打开定时器0
                                while(!stop);
                        }
                }        
        }        
}
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;
                }        
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:669870 发表于 2019-12-21 15:49 | 只看该作者
你好我想请问一下从这一步开始是什么意思啊  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;                 }                 } }
回复

使用道具 举报

板凳
ID:673747 发表于 2020-1-4 08:07 来自手机 | 只看该作者
标志位有点不明白。大神可以请教下吗
回复

使用道具 举报

地板
ID:758963 发表于 2020-5-23 10:48 | 只看该作者
你好,请问这个程序有proteus仿真图吗
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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