高手进来帮忙看看,这段程序有什么错误,谢谢了
我想实现功能:按一下按键led点亮,在按一下led熄灭,如果按一下后led点亮,1分钟没有在按第二下则自动熄灭led我是个纯新手搞了好几天了怎么也不行,各位高手能帮我看看嘛,谢谢了先
#include<STC12C2052AD.H>
#define uchar unsigned char
#define uint unsigned int
sbit led= P3^5;//LED
sbit key= P3^4;//按键
uchar id;
uint tt;
void delay (uint a)
{
uint i;
while( --a != 0)
{
for(i = 0; i < 600; i++);
}
}
void qhcx ()
{
key=1;//key初始化
led=1;//key初始化
id=0;//id初始化
if(key==0)//判断key是否被按下
{
delay(20);//延时去抖
if(key==0)//在判断key是否被按下
{
id++;//如果key被按下id自加1
if(id==1)//判断id是否为1
{
led=0;//如果id为1点亮led
delay(600);
while(id)
{
if(key==0)
{
delay(20);
if(key==0)
{
id++;
if(id==2)
{
led=1;
delay(600);
id=0;
}
}
}
}
}
}
}
}
void main ()
{
P3=0xff;
EA=1;
ET0=1;
TMOD=0X01;
TH0=-50000/256;
TL0=-50000%256;
TR0=1;
qhcx();
if(tt==1200)
{
led=1;
}
}
****************************************************************************************************/
void intserv1 (void) interrupt 1 using 1
{
TH0=-50000/256;
TL0=-50000%256;
tt++;
}
/***************************************************************************************************/
你的程序执行一次就没有了。。。
main函数应该弄成以下结构。
int main(void)
{
//系统初始化。。
while(1)
{
//按键判断、点灯、计时。。。
}
} 楼主,tt是不是没清0呀。 程序都飞了啊。。。 gracialee 发表于 2012-9-9 07:40 static/image/common/back.gif
程序都飞了啊。。。
能不能说的具体点呢
2楼 已经给了你准确的回答。最后的时候,总要有一条停机指令,如SJIMP $,或者是while(1); gracialee 发表于 2012-9-9 15:04 static/image/common/back.gif
2楼 已经给了你准确的回答。最后的时候,总要有一条停机指令,如SJIMP $,或者是while(1); ...
根据楼上的提示将程序改了一下,但是还是不行啊!!!问题出在哪里了呢
#include<STC12C2052AD.H>
#define uchar unsigned char
#define uint unsigned int
sbit led= P3^5;//LED
sbit key= P3^4;//按键
sbit jdq= P3^3;//继电器
uchar id;
uint tt;
void delay (uint a)// 1ms延时程序(12MHz 10倍于51单片机速度时)
{
uint i;
while( --a != 0)
{
for(i = 0; i < 600; i++);
}
}
void qhcx ()
{
key=1;//key初始化
led=1;//key初始化
id=0;//id初始化
if(key==0)//判断key是否被按下
{
delay(20);//延时去抖
if(key==0)//在判断key是否被按下
{
id++;//如果key被按下id自加1
if(id==1)//判断id是否为1
{
led=0;//如果id为1点亮led
jdq=0;
delay(600);
while(id)
{
if(key==0)
{
delay(20);
if(key==0)
{
id++;
if(id==2)
{
led=1;
jdq=1;
delay(600);
id=0;
}
}
}
}
}
}
}
}
void main ()
{
key=1;
led=1;
tt=0;
P3=0xff;
EA=1;
ET0=1;
TMOD=0X01;
TH0=-50000/256;
TL0=-50000%256;
TR0=1;
while(1)
{
qhcx();
if(tt==20)
{
tt=0;
led=1;
jdq=1;
}
}
}
void intserv1 (void) interrupt 1 using 1
{
TH0=-50000/256;
TL0=-50000%256;
tt++;
}
/***************************************************************************************************/ 本帖最后由 gracialee 于 2012-9-9 20:54 编辑
貌似这是一个路灯管理程序?按一下亮1分钟, 如何没有再按的话,1分钟后熄灯。
有个问题是
while(1)
{
qhcx();
if(tt==20)
{
tt=0;
led=1;
jdq=1;
}
}
1、要是TT出现》20的时候了,这是不是永远也不可能清零的了。。。。
2、去抖动是不是太过于麻烦了些?
3、您说不行,怎么一个不行法?您没有进一步说明。。。 我有一段控制led,按一下LED亮;再按一下LED灭,但是没有一分钟后熄灭。楼主参考下。
void lcd_light(void) //LCD背光控制
{
static unsigned char num = 0;
if(lcd_key == 0)
{
delayms(20);
if(lcd_key == 0)
{
num++;
while(!lcd_key)
{
if(num == 1)
{
lcd_blacK = 0;
}
else if(num == 2)
{
lcd_blacK = 1;
num = 0;
}
}
}
}
} lisingch 发表于 2012-9-9 21:29 static/image/common/back.gif
我有一段控制led,按一下LED亮;再按一下LED灭,但是没有一分钟后熄灭。楼主参考下。
void lcd_light(void) ...
非常感谢楼上的led程序,感谢大家的帮忙,问题解决了{:lol:}
#include<STC12C2052AD.H>
#define uchar unsigned char
#define uint unsigned int
sbit led= P3^5;//LED
sbit key= P3^4;//按键
uint tt;
void delay (uint a)
{
uint i;
while( --a != 0)
{
for(i = 0; i < 600; i++);
}
}
void qhcx ()
{
static unsigned char num =0;
if(key == 0)
{
delay(20);
if(key == 0)
{
num++;
while(!key)
{
if(num == 1)
{
led = 0;
}
else if(num == 2)
{
led = 1;
num = 0;
}
}
}
}
}
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x15;
TL0 = 0x0A0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main(void)
{
key = 1;//端口初始化
led = 1;
jdq = 1;
tt=0;
AUXR = AUXR|0x80;// T0, 1T Mode
InitTimer0();
while(1)
{
qhcx ();
}
}
void Timer0Interrupt() interrupt 1
{
TH0 = 0x15;
TL0 = 0x0A0;
tt++;
if(tt >=12000 )
{
tt = 0;
led = 1;
}
}
页:
[1]