找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么把LED灯闪烁与蜂鸣器报警合到一起报警

[复制链接]
跳转到指定楼层
楼主
ID:119474 发表于 2016-5-9 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机的蜂鸣器报警

                ORG        0000H                        ;伪指令,指定程序从8000H开始存放
                AJMP        MAIN                        ;跳转指令,程序跳转到MAIN处

                ORG        0100H                        ;伪指令,指定以下程序从8100H开始存放
MAIN:
                MOV        SP,#60                        ;给堆栈指针赋初值
LOOP:                ACALL        MUSIC
                AJMP        LOOP


;***********************
;蜂鸣器输出声响子程序
;**********************
MUSIC:
                MOV        R5,#60H                        ;控制音长
MIC:
                CPL        P1.5
                ACALL        DELAY5MS                ;控制音调
                DJNZ        R5,MIC
                RET


;***************
;延时子程序
;***************
DELAY5MS:
                    MOV        R7,#3H
DELAY0:                MOV        R6,#40H
DELAY1:                DJNZ        R6,DELAY1
                     DJNZ        R7,DELAY0
                    RET
                ;
                END

LED灯闪烁
/*******************************************************************************
*                 
*                                        普中科技
--------------------------------------------------------------------------------
* 实 验 名                 : LED闪烁的简单试验
* 实验说明       : 得到8盏LED交替亮灭的实验效果
* 连接方式       : 见连接图
* 注    意                 :
*******************************************************************************/

//--包含你要使用的头文件--//
#include <reg51.h>           //此文件中定义了51的一些特殊功能寄存器

//--声明全局函数--//
void Delay10ms(unsigned int c);   //延时10ms

/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void main()
{
        while(1)
        {
                //--数字前面加0x表示该数是十六进制的数,0x00就是十六进制的00--//
                //--P0口一共有8个IO口,即从P0.0到P0.7,而0x00二进制就是0000 0000--//
                //--效果就是P0.0到P2.7都是0,即低电平。而如果你想给P0.1口赋高电平时--//
                //--二进制就是0000 0001,就是十六进制0x01.--//
                P0  = 0x00; //置P0口为低电平
               
                Delay10ms(50); //调用延时程序,修改括号里面的值可以调整延时时间
               
                P0  = 0xff; //置P0口为高电平
                               
                Delay10ms(50); // 调用延时程序
        }

}

/*******************************************************************************
* 函 数 名         : Delay10ms
* 函数功能                   : 延时函数,延时10ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a, b;

        //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }

        }

}

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

使用道具 举报

沙发
ID:111634 发表于 2016-5-10 21:40 | 只看该作者
全部用汇编或全部用C51,这么简单的程序没必要汇编和C51混用。
回复

使用道具 举报

板凳
ID:111634 发表于 2016-5-10 21:40 | 只看该作者
在闪烁的同时发出警报声。可用警报声程序充任闪烁延时,这样既发警报声又不耽搁闪烁。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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