微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 做了个SOS的声光求救告警程序,蜂鸣器响SOS声音,数码管显示SOS字符。但是按K3按键,中断没反应,

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

时间:10-02 整理:3721RD 点击:
做了个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();
}
}

//把以下部分语句修改试试
//sbit K3=P3^2;    //多余
/*
void Int0Configuration()//多余
{
        //设置INT0
        IT0=1;//跳变沿出发方式(下降沿)
        EX0=1;//打开INT0的中断允许。
        EA=1;//打开总中断        
}*/
void Int0() interrupt 0                 
{        
//        if(K3==0)    //赘句,外部中断0请求源默认P3.2
               e=~e;  //e=0x01,取反e=0xfe
}
void main()
{
        IT0=1;//跳变沿出发方式(下降沿)   放在这里
        EX0=1;//打开INT0的中断允许。
        EA=1;//打开总中断        
        while(e)  //e用在这里似乎没有实际意义,是否要定义为bit e=1?
        {
                SOSaudio();
        }
}

主函数需调用 Int0Configuration(),后功能 正常了,感谢大家。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top