#include<reg51h>
#define uchar unsigned char
uchar times,hour,min,sec;
uchar hour1,min1,sec1;
sbit LAMP=P0^0;
sbit key=P1^0;
void delay()
{
uchar i,j;
for(i=0;i<30;i++)
for(j=0;j<120;j++);
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
times++;
if(times>=20)
{
times=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
if((hour==hour1)&&(min==min1)&&(sec==sec1)
{
TR0=0;
LAMP=0;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
LAMP=1;
while(1)
{
if(key==0)
{
delay();
if(key==0)
{
times++;
times%=0x04;
switch(times)
{
case 0:times=0;hour=0;min=30;sec=0;TR0=1;break;
case 1:times=0;hour=1;min=0;sec=0;TR0=1;break;
case 2:times=0;hour=1;min=30;sec=0;TR0=1;break;
case 3:LAMP=1;break;
default:break;
}
}
}
}
}
应该用一个标志位,如果你这种是普通的按键,即按下时是低电平,松开时是高电平的,大概这样写,在main声明一个变量,作为标志位
char Flag;
然后按键按下时,直到d起按键才改变Flag的状态。
if(!Key)
{
while(!Key);
Flag=~Flag;
}
if(Flag)
{
time = hour100 + min;
ShowTest(time);
delay();
}
else
{
gettempts();
display(t);
}
把这个放在while(1)中,就可以了。
希望我的回答对你有帮助,有什么问题欢迎一起探讨。
这是什么,是单片机电路吗,那起码画个仿真图,画出那数码管是怎么接的,几个数码管啊?
那S3,S4接在哪个脚了。是什么单片机?
什么也不说,就来要汇编语言实现,是要程序吗?没有办法写。
定义一个标志位 bit flag=0;
主各序结构:
while(1)
{
if(flag==0)
{
程序1
}
if(flag==1)
{
程序2
}
}
按键检测可用中断,中断程序中改变flag的值
以上就是关于单片机用一个按键随意切换控制三种状态,1、半小时后关灯;2、1小时后关灯;3、1小时后关灯,再1小时开灯全部的内容,包括:单片机用一个按键随意切换控制三种状态,1、半小时后关灯;2、1小时后关灯;3、1小时后关灯,再1小时开灯、单片机C语言编程问题。怎么实现按键切换两个子程序啊。。(时钟和温度)、汇编语言实现按键切换功能。接上电源,数码管全灭,按s3,进入时钟状态,再按s3进入关机状态。按s4等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)