单片机用一个按键随意切换控制三种状态,1、半小时后关灯;2、1小时后关灯;3、1小时后关灯,再1小时开灯

单片机用一个按键随意切换控制三种状态,1、半小时后关灯;2、1小时后关灯;3、1小时后关灯,再1小时开灯,第1张

#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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10126843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存