标题:
新手51单片机设置红绿灯等问题,一个疑惑,跪求解答!
[打印本页]
作者:
haohaoxue51
时间:
2018-3-9 18:39
标题:
新手51单片机设置红绿灯等问题,一个疑惑,跪求解答!
我现在设计红绿灯程序,要设计一个按键,按一下三灯全亮,在按一下继续执行原来的读秒。 比如现在倒计时从20开始,到了10的时候我按下键在松开,红绿灯三灯一直亮,我再按一下,继续从10开始倒计时。 我现在遇到的的问题就是 再按一下,继续从10开始倒计时 这一步骤写不出来,不知道怎么利用中断写出来,求解答。不知道如何改,我的程序如下: 直接从main主函数往下看就行了,中断函数也在下面,纯新手,求解答,在线等
QQ图片20180309183636.png
(186.81 KB, 下载次数: 35)
下载附件
2018-3-9 18:38 上传
单片机源程序如下:
#include <reg52.h>
sbit red=P2^0;
sbit yellow=P2^1;
sbit green=P2^2;
sbit red1=P2^3;
sbit yellow1=P2^4;
sbit green1=P2^5;
#define DATA1 P0
#define DATA2 P1
void delay(long n)
{
while(n--);
}
void numb_test1()
{ char e;
for(e=5;e>=0;e--)
{
yellow1=0;
DATA1=((e/10)<<4)+e%10;
DATA2=((e/10)<<4)+e%10;
delay(7500) ;
yellow1=1;
delay(7500) ;
}
}
void numb_test2()
{char y;
for(y=5;y>=0;y--)
{ yellow=0;
DATA1=((y/10)<<4)+y%10;
DATA2=((y/10)<<4)+y%10;
delay(7500) ;
yellow=1;
delay(7500) ;
}
}
void numb_test()
{char x,q;
for(x=30,q=35;x>=0,q>=0;x--,q--)
{
if(x<0)
{
green=1;
numb_test2() ;
break;
}
DATA1=((x/10)<<4)+x%10;
DATA2=((q/10)<<4)+q%10;
delay(15000) ;
}
}
numb_test3 ()
{char z,w;
for(w=15,z=20;w>=0,z>=0;w--,z--)
{
if(w<0)
{
green1=1;
numb_test1();
break;
}
DATA1=((z/10)<<4)+z%10;
DATA2=((w/10)<<4)+w%10;
delay(15000) ;
}
}
char t=0;
void main()
{
EA=1;
EX0=1;
IT0=1;
while(1)
{
green=0;
red1=0;
numb_test();
green=1;
red1=1;
green1=0;
red=0;
numb_test3();
red=1;
red1=0;
}
}
void interrupt_0() interrupt 0
{ char r ;
while(1)
{ r=99;
red=1;
green=0 ;
yellow=1;
DATA1=((r/10)<<4)+r%10;
DATA2=((r/10)<<4)+r%10;
}
}
复制代码
作者:
笨笨兔
时间:
2018-3-10 08:59
中断保护现场,再次中断回复现场。。。。。。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1