如何用按键调整单片机的延时时间
答案:1 悬赏:0
解决时间 2021-01-25 07:57
- 提问者网友:雾里闻花香
- 2021-01-24 10:29
如何用按键调整单片机的延时时间
最佳答案
- 二级知识专家网友:白昼之月
- 2021-01-24 11:17
#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口我没有进行位定义,你在开头位定义一下应该就可以可以了
#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口我没有进行位定义,你在开头位定义一下应该就可以可以了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯