‘壹’ 单片机 延迟一秒程序怎么写延迟2秒我是初学者,想请教一下。
你好!
你要先写一个延时基准(50毫秒),在延时1秒就是做20次基准,2秒就是40个基准!
也可以用定时器,定时50毫秒,定时器中断计数,计数20就是1秒,计数40次就是2秒(推荐用定时器!)
仅代表个人观点,不喜勿喷,谢谢。
‘贰’ 单片机有哪些延时方法详细介绍
据我所知,单片机延时的方法有:
1。空操作延时(12MHz)
voiddelay10us()
{
_NOP_();
_NOP_();
_NOP_();
_NOP_();
_NOP_();
_NOP_();
}
2。循环延时(12MHz)
Voiddelay500ms()
{
unsignedchari,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
延时总时间=[(k*2+3)*j+3]*i+5
k*2+3=165 us
165*j+3=33333 us
33333*i+5=500000 us=500 ms
3。计时器中断延时(工作方式2) (12MHz)
#include<reg52.h>
sbitled=P1^0;
unsignedintnum=0;
voidmain()
{
TMOD=0x02;
TH0=6;
TL0=6;
EA=1;
ET0=1;
TR0=1;
while(1)
{
if(num==4000)
{
num=0;
led=~led;
}
}
}
voidT0_time()interrupt1
{
num++;
}
4。C程序嵌入组合语言延时
‘叁’ 如何用按键调整单片机的延时时间
#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口我没有进行位定义,你在开头位定义一下应该就可以可以了
‘肆’ 单片机编程 使用按键控制流水灯延时时间,每按一次按键流水灯流水速度逐渐变慢,直到停止流水
你可以简单地认为单片机只能输出5V或者0V的电压 分别对应1和0,那么LED灯的另一端接地或者接5V,如果你 的单片机输出5V接到LED灯,LED灯另一端接地 , 那就产生电压了,电路就导通了,灯就亮了 ,反之也是这个道理。时间方面可以写大致的延时,或者用定时器,这样就比较精确了,你学会了这个就可以说入门了。
‘伍’ 怎样调整单片机流水灯的快慢,请举个例子
就下面的程序
;----- 延时子程序 -----
DELAY: MOV R0,#255 ;延时一段时间
D1: MOV R1,#20
DJNZ R1,$
DJNZ R0,D1
RET ;子程序返回
END ;程序结束
来说,想要让流水灯变慢点的话,就增加延时。这里将第二行指令D1: MOV R1,#20中的20改大,但是要小于256.比如D1: MOV R1,#200
如果想要流水灯快点的话,就是要减少延时时间。这里将第二行指令D1: MOV R1,#20中的20改小,但是一定要大于等于零。比如D1: MOV R1,#2
‘陆’ 通过用按键调整单片机的延时时间
#include<reg51.h>
sbitkey=P1^0;
sbitled=P1^2;
voiddelay(unsignedcharx)
{
unsignedchari;
while(x--)for(i=0;i<120;i++);
}
main()
{
unsignedcharnn;
while(1)
{
if(key==0)
{
while(key==0);
nn++;
if(nn>250)nn=50;
}
led=0;
delay(nn);
led=1;
delay(nn);
}
}