找回密码
 立即注册

QQ登录

只需一步,快速开始

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

做了个SOS的声光求救告警程序,蜂鸣器响SOS声音,数码管显示SOS字符。但是按K3按键...

[复制链接]
跳转到指定楼层
楼主
做了个SOS的声光求救告警程序,蜂鸣器响SOS声音,数码管显示SOS字符。下载进单片机后,按K3,按键,中断没反应,

编译时:提示警告:
void Int0Configuration()
没有调用?

Build target 'Target 1'
compiling beep+key1.c...
linking...

*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?INT0CONFIGURATION?BEEP_KEY1

Program Size: data=15.0 xdata=0 code=383

creating hex file from "SOS"...

"SOS" - 0 Error(s), 1 Warning(s).


下面是我的程序,请大家给看看呗。

/*
说明:蜂鸣器占用P1^5。数码管占用P0口。
*/
#include<reg51.h>

sbit Beep=P1^5;                                         //蜂鸣器占用P1^5。
sbit K3=P3^2;                                                 //独立按键
sbit LSA=P2^2;                                         //位选信号
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char SOS[]={0x6d,0x3f,0x6d};        //SOS的显示码
unsigned int i;
unsigned char e=0x01;

void delay(unsigned int a)          //
{
unsigned char b;
for(a;a>0;a--)
for(b=155;b>0;b--);
}

void SOSdigital()
{
        unsigned char d,j;
        for(d=0;d<3;d++)
        {
                switch(d)         //位选,选择点亮的数码管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//显示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//显示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//显示第2位
                }
                P0=SOS[d];//发送段码
                j=10;                                                 //扫描间隔时间设定
                while(j--);        
                P0=0x00;//消隐
        }
}

void Beepf()
{
Beep=0;
SOSdigital();          //
delay(1);          //
Beep=1;
SOSdigital();
delay(1);
}

void Beep1()
{
i=150;
while(i--)
{
Beepf();
}
}

void Beep2()
{
i=450;
while(i--)
{
Beepf();
}
}

void SOSaudio()                                        //
{         
         unsigned char c;
         for(c=0;c<3;c++)
         {
                 Beep1();
                 delay(200);
         }
         delay(400);
         for(c=0;c<3;c++)
         {
                 Beep2();
                 delay(600);
         }
         for(c=0;c<3;c++)
         {
                 Beep1();
                 delay(200);
         }
         delay(2400);
}


void Int0Configuration()
{
        //设置INT0
        IT0=1;//跳变沿出发方式(下降沿)
        EX0=1;//打开INT0的中断允许。
        EA=1;//打开总中断        
}
/*******************************************************************************
* 函数名         : Int0()
* 函数功能                   : 外部中断0 中断函数
* 输入           : 无
* 输出                  : 无
*******************************************************************************/

void Int0() interrupt 0                 
{        
        if(K3==0)
        {
                e=~e;
        }
}


void main()
{
while(e)
{
        SOSaudio();
}
}


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

使用道具 举报

沙发
ID:148552 发表于 2017-4-9 13:39 | 只看该作者
void Int0Configuration(),你这个函数主函数里要调用啊,你开头给出的警告提示不就是这个?
回复

使用道具 举报

板凳
ID:151348 发表于 2017-4-9 14:24 | 只看该作者
对,你的main里面没有调用Int0Configuration
回复

使用道具 举报

地板
ID:161933 发表于 2017-4-9 15:07 | 只看该作者
哦,对了,差点忘了。
回复

使用道具 举报

5#
ID:187728 发表于 2017-4-9 15:28 | 只看该作者
主函数需调用void Int0Configuration(),希望有帮助
回复

使用道具 举报

6#
ID:111634 发表于 2017-4-9 17:42 | 只看该作者
本帖最后由 zl2168 于 2017-4-9 17:52 编辑

给你个参考案例,里面有警报程序,你可在proteus仿真中听听警报声,若满意,则下一步。


Proteus仿真一下,确认有效
电子密码锁1.rar (1.13 MB, 下载次数: 8)

以上摘自张志良编著《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于学习51单片机原理,程序(c和汇编)语句条条有注解,便于阅读理解,便于自学。
80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。
书中电路和程序设计有详细说明,程序语句条条有注解。









回复

使用道具 举报

7#
ID:187614 发表于 2017-4-10 12:46 来自手机 | 只看该作者
主程序中的e没定义呀,必须是全局的
回复

使用道具 举报

8#
ID:161933 发表于 2017-4-25 19:19 | 只看该作者
主函数需调用void Int0Configuration(),后, 功能 正常了。感谢大家。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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