1、首先,在电脑中打开keil软件,创建好工程,然后添加c文件,如下图所示。
2、然后添加c文件,接下来输入代码,先输入一个头文件命令。
3、然后,进行宏定义,代码如图所示。
4、然后声明P1口,如下图所示。
5、最后,将延时语句全部添加进去,代码按照图中所示的直接敲入即可。
6、最后,点击编译,生成HEX文件就可以了,这样51单片机延时语句就完成了。
一、用定时器中断,50ms中断的1 次,20次就是1秒#include <REG51.H>
#define uchar unsigned char
sbit LED =P1^1//接一LED,1 秒钟亮或灭一次
uchar time
void init_t0int()
{
TMOD=0x01
TH0=(65535-50000)/256
TL0=(65535-50000)%256
EA=1
ET0=1
TR0=1
}
void main()
{
init_t0int()
while(1)
}
void t0int() interrupt 1
{
TH0=(65535-50000)/256
TL0=(65535-50000)%256
time++
if(time==20)
{
time=0
LED=~LED
}
}
二、用循环延时可能程序更简单一点,但没实际意义 。单片机在这1 秒内只能循环而不能做其它事。
#include<reg51.h>
sbit LED=P1^0
void delay_ms(unsigned char ms)
{
unsigned char i
while(ms--)
for(i=0i<123i++)
}
void main()
{
while(1)
{
delay_ms(1000)
LED=~P1^0 //P1.0接一LED,可看到LED每1S亮或灭一次
}
}
参考资料: LED
unsigned char rSecondCount//秒计时数unsigned char rMinuteCount//分计时数
sbit IsOneSecondReach
sbit Pulse_Sec=P1^0
sbit Pulse_Min=P1^1
main()
{
rSecondCount=0
rMinuteCount=0
TH1=0x3C
TL1=0xAF//定时器50ms产生一次中断 (FFFF-3CAF)us
MOD = 0x10//定时器1工作于模式1,(用工作于模式2也可以,而且更 简便)
TR1=1//使能定时器1
ET1=1//开中断
EA=1//开全局中断
while(1)
{
if (IsOneSecondReach)
{
IsOneSecondReach = 0
//do something,如果一秒延时标志为1,则清除此标志,等待下次1秒,在此处
//执行需要执行的程序
}
}
}
/* 定时器50ms产生一次中断 */
void Timer(void) interrupt 3
{
/* 重新载入T1参数 */
TH1=0x3C
TL1=0xAF
/* 一秒累加 */
rSecondCount++//秒计时+1
if (rSecondCount==20) //1sec到,50ms*20
{
IsOneSecondReach = 1
}
}
//
脉冲宽度为50ms,如果有其他要求的话,修改T1参数和“秒分”的参数凑下就行了.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)