如何用按键调整单片机的延时时间
发布网友
发布时间:2022-04-24 16:33
我来回答
共2个回答
热心网友
时间:2023-10-22 20:18
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar key1,key2,key3;//定义三个按键的代号
uchar a,i,temp,temp1;//定义主体函数所用变量
uint x,y,z;//定义延时函数所用三个变量
void delay1(uint);//定义延时函数1
void delay2(uint);//定义流水灯大间隔所用延时函数
void keyscan();//定义键盘扫描函数
void main()
{TMOD=0x01;//为了保证及时扫描到键盘变动,只好开启中断了
TH0=(65536-500)/256;//中断0.5ms开启一次
TL0=(65536-500)%256;
EA=1;
ET0=1;
a=0xfe;
i=0;
temp1=1;
while(1)
{
P1=a;
temp=a<<1;
a=a>>7;
a=temp|a;
i=i+1;
delay1(100);
if(i==8)
{
i=0;
delay2(temp1);
}
}
}
void delay1(uint z)
{
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay2(uint temp1)
{
for(x=temp1;x>0;x--)
for(y=1100;y>0;y--);
}
void keyscan()
{
if(key1==0)
{
delay1(10); //键盘消抖
if(key1==0)
{
temp1=10;
while(!key1);//等待按键释放
}
}
if(key2==0)
{
delay1(10); //键盘消抖
if(key1==0)
{
temp1=20;
while(!key2);//等待按键释放
}
}
if(key3==0)
{
delay1(10); //键盘消抖
if(key3==0)
{
temp1=30;
while(!key3);//等待按键释放
}
}
}
void T0_time() interrupt 1
{
TH0=(65536-500)/256;//重装初值
TL0=(65536-500)%256;
keyscan();
}
我的proteus坏了,不能模拟,现手写的,如果有问题可以再告诉我,我的QQ378773957,用的ATMEL51单片机
三个按所在的IO口我没有进行位定义,你在开头位定义一下应该就可以可以了追问按上面的程序,灯的间隔能否在0-60秒键调整,大间隔可否在0-30分钟间调整?三个按键如何使用?谢谢 恭候解答
热心网友
时间:2023-10-22 20:19
延时函数的时间用按键调节就行了 这个好说