STC15W104 掉电唤醒弄不了 请教大佬帮忙看看
[复制链接]
#include <STC15.H>
#define const_voice_short 20 //蜂鸣器短叫的持续时间
#define const_voice_long 140 //蜂鸣器长叫的持续时间
/* 注释一:
* 调整抖动时间阀值的大小,可以更改按键的触发灵敏度。
* 去抖动的时间本质上等于累计定时中断次数的时间。
*/
#define const_key_time1 50 //短按的按键去抖动延时的时间
void initial_myself();
void initial_peripheral();
void delay_long(unsigned int uiDelaylong);
void T0_time(); //定时中断函数
void key_service(); //按键服务的应用程序
void key_scan(); //按键扫描函数 放在定时中断里
void power_low();
sbit key_sr1=P3^2; // S1 键
sbit k00=P3^3; //MOS管输出控制引脚
unsigned char ucKeySec=0; //被触发的按键编号
unsigned int uiKeyTimeCnt1=0; //按键去抖动延时计数器
unsigned char ucKeyLock1=0; //按键触发后自锁的变量标志
unsigned int uiVoiceCnt=0; //蜂鸣器鸣叫的持续时间计数器
unsigned int uiCountK00=0; //继电器输出持续时间计数器
void main()
{
unsigned int i=0;
P3M0 = 0x08; // 端口P3.3 推挽 其余双向
P3M1 = 0x00;
k00=0; //
initial_myself();
delay_long(100);
initial_peripheral();
while(1)
{
key_service(); //按键服务的应用程序
power_low();
}
}
void key_scan()//按键扫描函数 放在定时中断里
{
if(key_sr1==1)//IO口高电平 说明按键没有按下 及时清零一些标志
{ ucKeyLock1=0;
uiKeyTimeCnt1=0;
}
else if(key_sr1==0)
{
uiKeyTimeCnt1++;
if(uiKeyTimeCnt1>const_key_time1)
{
uiKeyTimeCnt1=0;
ucKeyLock1=1;
ucKeySec=1; // 触发1号按键
}
}
}
void key_service() //第三区 按键服务的应用程序
{
switch(ucKeySec) //按键服务状态切换
{
case 1:// 1 号键的短按 对应朱兆祺学习板的 S1 键
ucKeySec=0; //响应按键服务处理程序后,按键编号清零,避免一致触发
uiCountK00=0;
k00=!k00; //亮灯高电平
break;
}
}
void T0_time() interrupt 0
{
TF0=0; //清除中断标志
TR0=0; //关中断
key_scan(); //按键扫描函数
TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f
TL0=0x2f;
TR0=1; //开中断
}
void delay_long(unsigned int uiDelayLong)
{
unsigned int i;
unsigned int j;
for(i=0;i<uiDelayLong;i++)
{
for(j=0;j<500;j++) //内嵌循环的空指令数量
{
; //一个分号相当于执行一条空语句
}
}
}
void initial_myself() //第一区 初始化单片机
{
PCON =0x02;
TMOD=0x01; //设置定时器 0 为工作方式 1
TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f
TL0=0x2f;
}
void initial_peripheral() //第二区 初始化外围
{
EA=1; //开总中断
ET0=1; //允许定时中断
TR0=1; //启动定时中断
}
void power_low() //掉电唤醒
{
if(k00==0&&key_sr1==1)
{
IT0=1;
ET0=0; //
EX0=1; //
EA=1;
PCON=0x02; //
delay_long(100);
}
}
void ex_int0()interrupt 2 //INT0_P32
{
key_scan();
PCON=0;
ET0=1;
}
|