找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2085|回复: 0
收起左侧

报警产生器电路与单片机源码

[复制链接]
ID:212343 发表于 2017-7-30 15:46 | 显示全部楼层 |阅读模式
用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。
2电路原理图

原理图

原理图

图4.6.1
3系统板上硬件连线
(1.      把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPK IN端口上;
(2.      在“音频放大模块”区域中的SPK OUT端口上接上一个8欧的或者是16欧的喇叭;
(3.      把“单片机系统”区域中的P1.7/RD端口用导线连接到“四路拨动开关”区域中的K1端口上;
4程序设计内容
(1.      信号产生的方法
500Hz信号周期为2ms,信号电平为每1ms变反1次,1KHz的信号周期为1ms,信号电平每500us变反1次;
  
5程序框图


6汇编源程序
FLAG     BIT 00H            ;伪指令: 给位地址00H取名为FLAG
         ORG 00H
START:   JB P1.7,START       ;P1.7为1时跳转
         JNB FLAG,NEXT       ;FLAG(00H)为0时跳转
         MOV R2,#200
DV:      CPL P1.0            ;P1.0取反   //500Hz信号响200ms=200*2*2*250us
         LCALL DELY500       ;跳转到DELY500延时
         LCALL DELY500
         DJNZ R2,DV          ;R2减1,不为0时转移到DV
         CPL FLAG            ;FLAG 取反
NEXT:    MOV R2,#200
DV1:     CPL P1.0             ;         //1KHz信号响100ms=200*2*250us
         LCALL DELY500
         DJNZ R2,DV1
         CPL FLAG
         SJMP START
DELY500: MOV R7,#250        ;延迟2*250us
LOOP:    NOP                       ;空操作,占1个机器周期
         DJNZ R7,LOOP
         RET
         END
7C语言源程序
#include<AT89X51.H>
#include<INTRINS.H>
bit flag;
unsigned charcount;
void dely500(void)
{
  unsigned char i;
  for(i=250;i>0;i--)
    {
      _nop_();   /*空操作8051 NOP 指令------ c51中的intrins.h库函数*/
    }
}

void main(void)
{
  while(1)
    {
      if(P1_7==0)
        {
          for(count=200;count>0;count--)
            {
              P1_0=~P1_0;
              dely500();
            }
          for(count=200;count>0;count--)
            {
              P1_0=~P1_0;
              dely500();
              dely500();
            }
        }
    }
}


评分

参与人数 1黑币 +5 收起 理由
wuli韬韬 + 5 绝世好帖!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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