电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
单片机如何让按键控制LED灯常亮30分钟后熄灭,下次按按键后
已解决
73482
个问题
已帮助
5993
位优秀工程师
单片机如何让按键控制LED灯常亮30分钟后熄灭,下次按按键后
ef9bfd512f14ac62
2020-07-27
浏览量:578
用定时器做的,但是LED灯只是第一次闪烁后常亮30分钟后熄灭,第二次按按键后就是一直亮了,不知道为什么,请一些高手解答下。
测试代码如下 最重要的就是第一次定时可以 第二次就不行了 STC15W100的芯片
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
typedef unsigned int u1;
typedef unsigned char u2; //
unsigned char d;
unsigned char n=0;
uchar min=1; sec=59; //
uchar flag;//
sbit led2=P3^0; //
sbit led1=P3^1; //
sbit cd=P3^2; //
sbit uv=P3^3; //
sbit k1=P3^4;
bit flash;//
bit key;
sfr IE2=0xAF;
sfr AUXR=0x8E;
sfr T2H=0xD6;
sfr T2L=0xD7;
void shijian(); //
/@@*************************************
*************************************/
void delay_1s()
{
int ab;
for(a=1000;a>0;a--)
for(b=150;b>0;b--);
}
/@@*************************************
*************************************/
void keypros()
{
if(k1==0)
{
delay_1s();
if(k1==0)
{
flash=~flash;
key=1;
}
}
while(!k1);
}
/@@*************************************
*************************************/
void ledflash()
{
if(flash==1&&key==1)
{
for(d=0;d<10;d++)
{
led1=0;
delay_1s();
led1=1;
delay_1s();
}
key=0;
led1=0;
uv=1;
}
if(flash==0)
{
led1=1;
uv=0;
}
}
/@@*************************************
*************************************/
void Int1Init() //
{
IT0=1;
EX0=1;
EA=1;
}
/@@*************************************
*************************************/
void Timer2Init() //
{
IE2|=0x04;
T2H=(65536-50000)/256;
T2L=(65536-50000)%256;
EA=1; //
AUXR|=0x10; //
}
/@@*************************************
*************************************/
void main()
{
led1=1;
uv=0;
led2=1;
flash=0;
Timer2Init();
while(1)
{
keypros();
ledflash();
Int1Init();
}
}
/@@*************************************
*************************************/
void Int0() interrupt 0 //
{
if(cd==0)
{
uv=0; //
led2=~led2; //
}
else
{
led2=1;
}
}
/@@*************************************
*************************************/
void Timer2() interrupt 12
{
T2H=(65536-50000)/256;
T2L=(65536-50000)%256;
flag++;
if(min==0&&sec==0)
{
uv=0;
}
if(flag>=20)
{
flag=0;
sec--;
if(sec<=0)
{
sec=59;
min--;
if(min<=0)
{
min=0;
sec=0;
AUXR|=0x00;
}
}
}
}
显示全部
单片机
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
莱克迷KW
这是51的单片机, 在使用时,定时器在每次计时完了后,要重新配置计数值,
51单片机没有重装载功能
发布于
2020-08-06
举报
评论 0
0
0
其他答案
数量:
1
yhj416606438
主主循环里定时器2也要重新初始化一下
发布于
2020-07-31
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
单片机如何让按键控制LED灯常亮30分钟后熄灭,下次按按键后
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: